Skip to content
Snippets Groups Projects
Verified Commit 86a57546 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

BUILD: introduce BUILD_ACM macro

parent 184cbbf6
No related branches found
No related tags found
2 merge requests!42Release 0.2.0,!40F dot in username
Pipeline #24971 failed
This commit is part of merge request !42. Comments created here will be created in the context of that merge request.
......@@ -46,6 +46,11 @@ IF (WIN32)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
ENDIF()
IF (BUILD_ACM)
message(STATUS "BUILD_ACM")
add_compile_definitions("BUILD_ACM")
ENDIF()
###########################################
### DEPENDENCY MANAGEMENT with CONAN
###########################################
......@@ -81,8 +86,13 @@ add_subdirectory(doc)
set(PROTO_FILES
${PROJECT_SOURCE_DIR}/proto/proto/caosdb/info/v1/main.proto
${PROJECT_SOURCE_DIR}/proto/proto/caosdb/entity/v1/main.proto
)
IF (BUILD_ACM)
list(APPEND PROTO_FILES
${PROJECT_SOURCE_DIR}/proto/proto/caosdb/acm/v1alpha1/main.proto
)
ENDIF()
set(PROTO_PATH ${PROJECT_SOURCE_DIR}/proto/proto)
......@@ -233,12 +243,6 @@ target_link_libraries(cxxcaosdbcli
### LINTING with CLANG-TIDY and INCLUDE-WHAT-YOU-USE
#######################################################
###########################################
### PARANOID COMPILER SETTINGS
###########################################
option(PARANOID_COMPILER_SETTINGS "Enable extra-paranoid compiler settings
(which may even flag errors for code in the dependencies. These only apply in
Debug BUILD_TYPE with SKIP_LINTING=Off or when LINTING=On." OFF)
include(CheckCXXCompilerFlag)
include(CheckCCompilerFlag)
......
......@@ -10,8 +10,16 @@ class CaosdbConan(ConanFile):
description = "C++ library for the CaosDB project"
topics = ("data management", "caosdb")
settings = "os", "compiler", "build_type", "arch"
options = {"shared": [True, False], "fPIC": [True, False]}
default_options = {"shared": False, "fPIC": True}
options = {
"shared": [True, False],
"fPIC": [True, False],
"build_acm": [True, False],
}
default_options = {
"shared": False,
"fPIC": True,
"build_acm": False,
}
generators = "cmake"
requires = [
("grpc/1.45.2"),
......@@ -41,14 +49,12 @@ class CaosdbConan(ConanFile):
def build(self):
cmake = CMake(self)
if self.options.build_acm:
cmake.definitions["BUILD_ACM"] = "On"
cmake.configure(source_folder="")
cmake.build()
# Explicit way:
# self.run('cmake %s/hello %s'
# % (self.source_folder, cmake.command_line))
# self.run("cmake --build . %s" % cmake.build_config)
def package(self):
self.copy("*.h", dst="include", src="include")
self.copy("*.dll", dst="bin", keep_path=False)
......
......@@ -20,8 +20,6 @@
# add all header files to this list
set(libcaosdb_INCL
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/role.h
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/user.h
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/authentication.h
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/certificate_provider.h
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/configuration.h
......@@ -52,6 +50,14 @@ set(libcaosdb_INCL
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/file_transmission/file_error.h
)
IF(BUILD_ACM)
list(APPEND libcaosdb_INCL
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/role.h
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/user.h
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/permission_rule.h
)
ENDIF()
# pass variable to parent scope
set(libcaosdb_INCL ${libcaosdb_INCL} PARENT_SCOPE)
......
......@@ -26,6 +26,7 @@
* @author Timm Fitchen
* @date 2022-02-11
*/
#ifdef BUILD_ACM
#ifndef CAOSDB_ACM_PERMISSION_RULE_H
#define CAOSDB_ACM_PERMISSION_RULE_H
......@@ -65,3 +66,4 @@ using PermissionRules = std::unordered_set<PermissionRule, HashPermissionRule>;
} // namespace caosdb::acm
#endif
#endif
......@@ -27,6 +27,7 @@
* @author Timm Fitchen
* @date 2022-02-11
*/
#ifdef BUILD_ACM
#ifndef CAOSDB_ACM_ROLES_H
#define CAOSDB_ACM_ROLES_H
......@@ -73,3 +74,4 @@ private:
} // namespace caosdb::acm
#endif
#endif
......@@ -27,6 +27,7 @@
* @author Timm Fitchen
* @date 2022-06-29
*/
#ifdef BUILD_ACM
#ifndef CAOSDB_ACM_USER_H
#define CAOSDB_ACM_USER_H
......@@ -68,3 +69,4 @@ private:
} // namespace caosdb::acm
#endif
#endif
......@@ -27,9 +27,11 @@
* @date 2021-05-18
* @brief Configuration and setup of the connection.
*/
#ifdef BUILD_ACM
#include "caosdb/acm/role.h" // for Role
#include "caosdb/acm/user.h" // for User
#include "caosdb/acm/v1alpha1/main.grpc.pb.h" // for AccessControlMan...
#endif
#include "caosdb/authentication.h" // for Authenticator
#include "caosdb/configuration.h" // for ConnectionConfigura...
#include "caosdb/entity/v1/main.grpc.pb.h" // for EntityTransactionSe...
......@@ -45,9 +47,11 @@
#include <vector> // for vector
namespace caosdb::connection {
#ifdef BUILD_ACM
using caosdb::acm::Role;
using caosdb::acm::User;
using caosdb::acm::v1alpha1::AccessControlManagementService;
#endif
using caosdb::authentication::Authenticator;
using caosdb::configuration::ConnectionConfiguration;
using caosdb::entity::v1::EntityTransactionService;
......@@ -101,6 +105,7 @@ public:
*/
[[nodiscard]] auto CreateTransaction() const -> std::unique_ptr<Transaction>;
#ifdef BUILD_ACM
/**
* List all known roles.
*/
......@@ -130,6 +135,7 @@ public:
// TODO(tf) find a way to deal with this:
// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)
auto DeleteSingleUser(std::string realm, std::string name) const -> void;
#endif
private:
/// GRPC-Channel (HTTP/2 Connection plus Authentication). We use a shared
......@@ -147,10 +153,12 @@ private:
/// Service for file transmission (download and upload). We use a shared
/// pointer because Transaction instances also own this service stub.
std::shared_ptr<FileTransmissionService::Stub> file_transmission_service;
#ifdef BUILD_ACM
/// Service for Access Controll Management (Role, Useraccounts, Permissions).
/// We use a unique pointer because only this connection owns and uses this
/// service.
std::unique_ptr<AccessControlManagementService::Stub> access_controll_management_service;
#endif
};
/**
......
......@@ -21,11 +21,6 @@
# add all source files to this list
set(libcaosdb_SRC
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/permission_rule.cpp
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/role.cpp
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/role_impl.h
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/user.cpp
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/user_impl.h
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/authentication.cpp
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/entity.cpp
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/logging.cpp
......@@ -44,5 +39,15 @@ set(libcaosdb_SRC
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/status_code_description.cpp
)
IF(BUILD_ACM)
list(APPEND libcaosdb_SRC
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/permission_rule.cpp
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/role.cpp
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/role_impl.h
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/user.cpp
${CMAKE_CURRENT_SOURCE_DIR}/caosdb/acm/user_impl.h
)
ENDIF()
# pass variable to parent scope
set(libcaosdb_SRC ${libcaosdb_SRC} PARENT_SCOPE)
......@@ -20,10 +20,12 @@
*
*/
#include "caosdb/connection.h"
#ifdef BUILD_ACM
#include "caosdb/acm/role_impl.h" // for RoleImpl
#include "caosdb/acm/user_impl.h" // for UserImpl
#include "caosdb/acm/v1alpha1/main.grpc.pb.h" // for AccessControlMan...
#include "caosdb/acm/v1alpha1/main.pb.h" // for ListRolesRequest
#endif
#include "caosdb/configuration.h" // for ConnectionConfigur...
#include "caosdb/exceptions.h" // for ConfigurationError
#include "caosdb/info.h" // for VersionInfo
......@@ -39,6 +41,7 @@
// IWYU pragma: no_include "net/proto2/public/repeated_field.h"
namespace caosdb::connection {
#ifdef BUILD_ACM
using caosdb::acm::RoleImpl;
using caosdb::acm::UserImpl;
using caosdb::acm::v1alpha1::AccessControlManagementService;
......@@ -56,6 +59,7 @@ using caosdb::acm::v1alpha1::RetrieveSingleRoleRequest;
using caosdb::acm::v1alpha1::RetrieveSingleRoleResponse;
using caosdb::acm::v1alpha1::RetrieveSingleUserRequest;
using caosdb::acm::v1alpha1::RetrieveSingleUserResponse;
#endif
using caosdb::configuration::ConfigurationManager;
using caosdb::configuration::ConnectionConfiguration;
using caosdb::entity::v1::EntityTransactionService;
......@@ -75,8 +79,10 @@ Connection::Connection(const ConnectionConfiguration &configuration) {
this->entity_transaction_service =
std::make_shared<EntityTransactionService::Stub>(this->channel);
this->file_transmission_service = std::make_shared<FileTransmissionService::Stub>(this->channel);
#ifdef BUILD_ACM
this->access_controll_management_service =
std::make_unique<AccessControlManagementService::Stub>(this->channel);
#endif
}
auto Connection::RetrieveVersionInfoNoExceptions() const noexcept -> TransactionStatus {
......@@ -121,6 +127,7 @@ auto Connection::RetrieveVersionInfo() const -> const VersionInfo & {
return std::make_unique<Transaction>(entity_service, file_service);
}
#ifdef BUILD_ACM
[[nodiscard]] auto Connection::RetrieveSingleRole(std::string name) const -> Role {
RetrieveSingleRoleRequest request;
request.set_name(name);
......@@ -323,6 +330,8 @@ auto Connection::CreateSingleUser(const User &user) const -> void {
return result;
}
#endif
auto ConnectionManager::mHasConnection(const std::string &name) const -> bool {
auto it = connections.find(name);
return it != connections.end();
......
......@@ -29,14 +29,19 @@ set(test_cases
test_issues
test_list_properties
test_protobuf
test_role
test_transaction
test_utility
test_user
test_value
test_ccaosdb
)
IF(BUILD_ACM)
list(APPEND test_cases
test_role
test_user
)
ENDIF()
###################################################
### Set up tests using GoogleTest (GTest)
###################################################
......
......@@ -19,7 +19,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#ifdef BUILD_ACM
#include "caosdb/acm/user.h" // for User
#endif
#include "caosdb/certificate_provider.h" // for PemCertificateProvider
#include "caosdb/configuration.h" // for InsecureConnectionConfigura...
#include "caosdb/connection.h" // for ConnectionManager
......@@ -32,7 +34,9 @@
#include <string> // for operator+, string
namespace caosdb::connection {
#ifdef BUILD_ACM
using caosdb::acm::User;
#endif
using caosdb::configuration::ConfigurationManager;
using caosdb::configuration::InsecureConnectionConfiguration;
using caosdb::configuration::PemCertificateProvider;
......@@ -89,6 +93,7 @@ TEST_F(test_connection, connection_manager_get_connection) {
EXPECT_TRUE(ConnectionManager::GetConnection("local-caosdb-admin"));
}
#ifdef BUILD_ACM
TEST_F(test_connection, test_create_single_user) {
auto connection = ConnectionManager::GetDefaultConnection();
User user;
......@@ -119,5 +124,6 @@ TEST_F(test_connection, test_list_roles) {
"The attempt to execute this transaction was not successful because the "
"connection to the server could not be established.");
}
#endif
} // namespace caosdb::connection
cmake_minimum_required(VERSION 3.1)
project(PackageTest CXX)
#######################################################################
### append test cases here (file name without the ".cpp" suffix)
#######################################################################
set(test_cases
test_info
)
###################################################
### Set up tests using GoogleTest (GTest)
###################################################
# dependencies
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(KEEP_RPATHS)
# supress warnings during build of gtest
cmake_policy(SET CMP0054 NEW)
enable_testing()
# add special cmake functions for gtest
include(GoogleTest REQUIRED)
# loop over all test cases and add them to the test runner
list(LENGTH test_cases len_test_cases)
math(EXPR len_test_cases "${len_test_cases} - 1")
foreach (i RANGE "${len_test_cases}")
list(GET test_cases ${i} test_case_name)
add_executable(${test_case_name} ${test_case_name}.cpp)
target_link_libraries(${test_case_name} PRIVATE ${CONAN_LIBS_CAOSDB}
${CONAN_LIBS_GTEST} ${CONAN_LIBS_GRPC} ${CONAN_LIBS_ABSEIL}
${CONAN_LIBS_OPENSSL} ${CONAN_LIBS_C-ARES} ${CONAN_LIBS_BZIP2}
${CONAN_LIBS_PROTOBUF} ${CONAN_LIBS_ZLIB})
if("${CMAKE_BUILD_TYPE}" MATCHES "Debug")
target_link_libraries(${test_case_name} PRIVATE caosdb_grpc)
endif()
target_include_directories(${test_case_name} PUBLIC ${CONAN_INCLUDE_DIRS})
set_target_properties(${test_case_name}
PROPERTIES
CXX_CLANG_TIDY "${_CMAKE_CXX_CLANG_TIDY}"
CXX_INCLUDE_WHAT_YOU_USE "${_CMAKE_CXX_INCLUDE_WHAT_YOU_USE}")
gtest_discover_tests(${test_case_name}
PROPERTIES
LABELS "caosdb-cpplib-int-tests")
endforeach ()
import os
from conans import ConanFile, CMake, tools
class LibcaosdbTestConan(ConanFile):
settings = "os", "compiler", "build_type", "arch"
generators = "cmake"
build_requires = [
("gtest/1.11.0"),
]
def build(self):
cmake = CMake(self)
# Current dir is "test_package/build/<build_id>" and CMakeLists.txt is
# in "test_package"
cmake.configure()
cmake.build()
def imports(self):
self.copy("*.dll", dst="bin", src="bin")
self.copy("*.dylib*", dst="bin", src="lib")
self.copy('*.so*', dst='bin', src='lib')
def test(self):
if not tools.cross_building(self):
cmake = CMake(self)
cmake.test()
../test/test_info.cpp
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment