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

abstract CaosDBConnection and CaosDBConnectionConfig

parent dd724ecf
No related branches found
No related tags found
No related merge requests found
Pipeline #9086 passed with warnings
Pipeline: caosdb-cppinttest

#9087

    ...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
    namespace caosdb { namespace caosdb {
    using caosdb::info::v1alpha1::GeneralInfoService; using caosdb::info::v1alpha1::GeneralInfoService;
    using caosdb::info::v1alpha1::VersionInfo; using caosdb::info::v1alpha1::VersionInfo;
    using grpc::ChannelCredentials;
    /** /**
    * @brief Configuration of the CaosDB connection. * @brief Configuration of the CaosDB connection.
    ...@@ -53,23 +54,38 @@ public: ...@@ -53,23 +54,38 @@ public:
    const CaosDBConnectionConfig &config) const CaosDBConnectionConfig &config)
    -> std::ostream &; -> std::ostream &;
    [[nodiscard]] auto getHost() -> std::string; [[nodiscard]] auto virtual toString() const -> std::string = 0;
    [[nodiscard]] auto getHost() const -> std::string;
    [[nodiscard]] auto getPort() const -> int; [[nodiscard]] auto getPort() const -> int;
    [[nodiscard]] auto virtual getChannelCredentials() const -> std::shared_ptr<ChannelCredentials> = 0;
    };
    class InsecureCaosDBConnectionConfig: public CaosDBConnectionConfig {
    private:
    std::shared_ptr<ChannelCredentials> credentials;
    public:
    InsecureCaosDBConnectionConfig(const std::string &host, int port);
    [[nodiscard]] auto toString() const -> std::string override;
    [[nodiscard]] auto getChannelCredentials() const -> std::shared_ptr<ChannelCredentials> override;
    };
    class SslCaosDBConnectionConfig: public CaosDBConnectionConfig {
    SslCaosDBConnectionConfig(const std::string &host, int port);
    SslCaosDBConnectionConfig(const std::string &host, int port, std::string cacert);
    }; };
    /** /**
    * @brief A reusable connection to a CaosDBServer. * @brief A reusable connection to a CaosDBServer.
    */ */
    class CaosDBConnection { class CaosDBConnection {
    CaosDBConnectionConfig config; std::shared_ptr<CaosDBConnectionConfig> config;
    std::unique_ptr<GeneralInfoService::Stub> stub_; std::unique_ptr<GeneralInfoService::Stub> stub_;
    public: public:
    explicit CaosDBConnection(const CaosDBConnectionConfig &config); explicit CaosDBConnection(const std::shared_ptr<CaosDBConnectionConfig> &config);
    friend auto operator<<(std::ostream &out, const CaosDBConnection &connection) friend auto operator<<(std::ostream &out, const CaosDBConnection &connection)
    -> std::ostream &; -> std::ostream &;
    auto getGeneralInfoService() -> GeneralInfoService::Stub &; [[nodiscard]] auto getGeneralInfoService() const -> GeneralInfoService::Stub &;
    [[nodiscard]] auto getVersionInfo() const -> const VersionInfo &; [[nodiscard]] auto getVersionInfo() const -> const VersionInfo &;
    }; };
    } // namespace caosdb } // namespace caosdb
    ......
    ...@@ -21,11 +21,11 @@ ...@@ -21,11 +21,11 @@
    */ */
    // A simple caosdb client // A simple caosdb client
    #include "connection.h"
    #include "caosdb_config.h"
    #include <memory>
    #include <iostream> #include <iostream>
    #include <string> #include <string>
    #include "caosdb/info/v1alpha1/main.pb.h"
    #include "caosdb_config.h"
    #include "connection.h"
    auto main() -> int { auto main() -> int {
    ...@@ -34,15 +34,20 @@ auto main() -> int { ...@@ -34,15 +34,20 @@ auto main() -> int {
    << caosdb::LIBCAOSDB_VERSION_PATCH << ")" << std::endl; << caosdb::LIBCAOSDB_VERSION_PATCH << ")" << std::endl;
    std::cout << "We don't miss the H of caos." << std::endl; std::cout << "We don't miss the H of caos." << std::endl;
    std::string host = "localhost"; const std::string host = "localhost";
    // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers) // NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers,readability-magic-numbers)
    int port = 8080; const int port = 8080;
    const std::string &test = host;
    std::cout << test << std::endl;
    caosdb::CaosDBConnectionConfig config(host, port); std::shared_ptr<caosdb::InsecureCaosDBConnectionConfig> config = std::make_shared<caosdb::InsecureCaosDBConnectionConfig>(host, port);
    caosdb::CaosDBConnection connection(config); caosdb::CaosDBConnection connection(config);
    std::cout << std::endl << connection << std::endl; std::cout << std::endl << connection << std::endl;
    const caosdb::info::v1alpha1::VersionInfo &v_info = const caosdb::info::v1alpha1::VersionInfo &v_info =
    connection.getVersionInfo(); connection.getVersionInfo();
    std::cout << "VersionInfo(" << v_info.major() << ")" << std::endl; const std::string &build = v_info.build();
    std::cout << "BUILD(" << build[0] << ")" << std::endl;
    std::cout << "VersionInfo(" << v_info.major() << "." << v_info.minor() << "." << v_info.patch() << ")" << std::endl;
    std::cout << "PRE_RELEASE(" << v_info.pre_release() << ")" << std::endl;
    return 0; return 0;
    } }
    ...@@ -31,6 +31,7 @@ using caosdb::info::v1alpha1::GeneralInfoService; ...@@ -31,6 +31,7 @@ using caosdb::info::v1alpha1::GeneralInfoService;
    using caosdb::info::v1alpha1::GetVersionInfoRequest; using caosdb::info::v1alpha1::GetVersionInfoRequest;
    using caosdb::info::v1alpha1::GetVersionInfoResponse; using caosdb::info::v1alpha1::GetVersionInfoResponse;
    using caosdb::info::v1alpha1::VersionInfo; using caosdb::info::v1alpha1::VersionInfo;
    using grpc::InsecureChannelCredentials;
    CaosDBConnectionConfig::CaosDBConnectionConfig(const std::string &host, CaosDBConnectionConfig::CaosDBConnectionConfig(const std::string &host,
    int port) { int port) {
    ...@@ -38,33 +39,42 @@ CaosDBConnectionConfig::CaosDBConnectionConfig(const std::string &host, ...@@ -38,33 +39,42 @@ CaosDBConnectionConfig::CaosDBConnectionConfig(const std::string &host,
    this->port = port; this->port = port;
    } }
    auto CaosDBConnectionConfig::getHost() -> std::string { return this->host; } auto CaosDBConnectionConfig::getHost() const -> std::string { return this->host; }
    auto CaosDBConnectionConfig::getPort() const -> int { return this->port; } auto CaosDBConnectionConfig::getPort() const -> int { return this->port; }
    auto operator<<(std::ostream &out, const CaosDBConnectionConfig &config) auto operator<<(std::ostream &out, const CaosDBConnectionConfig &config)
    -> std::ostream & { -> std::ostream & {
    out << "CaosDBConnectionConfig(\"" << config.host << "\"," << config.port out << config.toString();
    << ")";
    return out; return out;
    } }
    CaosDBConnection::CaosDBConnection(const CaosDBConnectionConfig &config) InsecureCaosDBConnectionConfig::InsecureCaosDBConnectionConfig(const std::string &host, int port) : CaosDBConnectionConfig(host, port) {
    : config(config) { this->credentials = grpc::InsecureChannelCredentials();
    }
    auto InsecureCaosDBConnectionConfig::toString() const -> std::string {
    return "InsecureCaosDBConnectionConfig(" + this->getHost() + "," + std::to_string(this->getPort()) + ")";
    }
    auto InsecureCaosDBConnectionConfig::getChannelCredentials() const -> std::shared_ptr<ChannelCredentials> {
    return this->credentials;
    }
    CaosDBConnection::CaosDBConnection(const std::shared_ptr<CaosDBConnectionConfig> &config) {
    this->config = config; this->config = config;
    std::shared_ptr<grpc::Channel> channel = grpc::CreateChannel( const std::string &target = this->config->getHost() + ":" + std::to_string(this->config->getPort());
    this->config.getHost() + ":" + std::to_string(this->config.getPort()), const std::shared_ptr<grpc::Channel> &channel = grpc::CreateChannel(target, this->config->getChannelCredentials());
    grpc::InsecureChannelCredentials());
    this->stub_ = GeneralInfoService::NewStub(channel); this->stub_ = GeneralInfoService::NewStub(channel);
    } }
    auto operator<<(std::ostream &out, const CaosDBConnection &connection) auto operator<<(std::ostream &out, const CaosDBConnection &connection)
    -> std::ostream & { -> std::ostream & {
    out << "CaosDBConnection(" << connection.config << ")"; out << "CaosDBConnection(" << *(connection.config) << ")";
    return out; return out;
    } }
    auto CaosDBConnection::getGeneralInfoService() -> GeneralInfoService::Stub & { auto CaosDBConnection::getGeneralInfoService() const -> GeneralInfoService::Stub & {
    return *stub_; return *stub_;
    } }
    ......
    ...@@ -56,9 +56,9 @@ if (LCOV_PATH) ...@@ -56,9 +56,9 @@ if (LCOV_PATH)
    setup_target_for_coverage_lcov( setup_target_for_coverage_lcov(
    NAME unit_test_coverage NAME unit_test_coverage
    EXECUTABLE ctest -L caosdb-cpplib-unit-tests EXECUTABLE ctest -L caosdb-cpplib-unit-tests
    EXCLUDE "${CMAKE_BINARY_DIR}/*" "g++*" EXCLUDE "${CMAKE_BINARY_DIR}/*"
    DEPEDENCIES caosdb ${test_cases} gtest_main DEPEDENCIES caosdb ${test_cases} gtest_main
    LCOV_ARGS --rc lcov_branch_coverage=1 LCOV_ARGS --rc lcov_branch_coverage=1 --no-external
    GENHTML_ARGS --rc lcov_branch_coverage=1 GENHTML_ARGS --rc lcov_branch_coverage=1
    ) )
    else () else ()
    ......
    ...@@ -24,11 +24,14 @@ ...@@ -24,11 +24,14 @@
    #include <gtest/gtest-message.h> #include <gtest/gtest-message.h>
    #include <gtest/gtest-test-part.h> #include <gtest/gtest-test-part.h>
    #include <memory> #include <memory>
    #include <type_traits>
    #include "gtest/gtest_pred_impl.h" #include "gtest/gtest_pred_impl.h"
    TEST(test_connection, localhost_8080) { TEST(test_connection, localhost_8080) {
    caosdb::CaosDBConnectionConfig config("localhost", 8000); caosdb::InsecureCaosDBConnectionConfig config("localhost", 8000);
    EXPECT_EQ("localhost", config.getHost()); ASSERT_EQ("localhost", config.getHost());
    EXPECT_EQ(8000, config.getPort()); ASSERT_EQ(8000, config.getPort());
    std::shared_ptr<grpc::ChannelCredentials> icc = config.getChannelCredentials();
    ASSERT_TRUE(icc != nullptr);
    } }
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment