diff --git a/include/caosdb/exceptions.h b/include/caosdb/exceptions.h index 304216679200329660c5068362fa9e089f089235..415d0722580e1199f014358f524caf75f9d68b32 100644 --- a/include/caosdb/exceptions.h +++ b/include/caosdb/exceptions.h @@ -101,12 +101,12 @@ public: }; /** - * @brief The connection isn't known to the ConnectionManager under this name. + * @brief Exception for errors during the configuration of the connection. */ -class UnknownConnectionError : public Exception { +class ConnectionConfigurationError : public Exception { public: - explicit UnknownConnectionError(const std::string &what_arg) - : Exception(StatusCode::UNKNOWN_CONNECTION_ERROR, what_arg) {} + explicit ConnectionConfigurationError(const std::string &what_arg) + : Exception(StatusCode::CONNECTION_CONFIGURATION_ERROR, what_arg) {} }; } // namespace caosdb::exceptions diff --git a/include/caosdb/logging.h b/include/caosdb/logging.h index 7b5a605044521ba33ab1327e96889be3aef6345e..0fa4da51c5de7727e8d882d9679b04a4d1bdaa38 100644 --- a/include/caosdb/logging.h +++ b/include/caosdb/logging.h @@ -39,24 +39,24 @@ const std::string logger_name = "caosdb::logging"; typedef boost::log::sources::severity_channel_logger_mt<int, std::string> boost_logger_class; -class _logger { +class logger { public: - static boost_logger_class &get() { return *_logger::GetInstance()._logger_instance; } + static boost_logger_class &get() { return *logger::GetInstance()._logger_instance; } static void destroy() { - auto &instance = _logger::GetInstance(); + auto &instance = logger::GetInstance(); delete instance._logger_instance; } private: - _logger() { this->_logger_instance = new boost_logger_class(); }; - static _logger &GetInstance() { - static _logger instance; + logger() { this->_logger_instance = new boost_logger_class(); }; + static logger &GetInstance() { + static logger instance; return instance; } boost_logger_class *_logger_instance; }; -auto inline get_logger() -> boost_logger_class & { return _logger::get(); } +auto inline get_logger() -> boost_logger_class & { return logger::get(); } /** * This class stores the integer log level. diff --git a/include/caosdb/status_code.h b/include/caosdb/status_code.h index e458b1727af51720451cbc057d4e40cee35a4a4e..e1a382191b5bd4559c554e2fc3e084103c27c3cc 100644 --- a/include/caosdb/status_code.h +++ b/include/caosdb/status_code.h @@ -62,7 +62,7 @@ enum StatusCode { GENERIC_ERROR = 21, GENERIC_TRANSACTION_ERROR = 22, CONFIGURATION_ERROR = 23, - UNKNOWN_CONNECTION_ERROR = 24, + CONNECTION_CONFIGURATION_ERROR = 24, TRANSACTION_STATUS_ERROR = 25, TRANSACTION_TYPE_ERROR = 26, UNSUPPORTED_FEATURE = 27, diff --git a/src/caosdb/connection.cpp b/src/caosdb/connection.cpp index 8420d8ffe6459f3431ead22ab660ab6fcd6a50f3..fcf4b119f5dcf4dacf268fd3d6c19f9b036b93fe 100644 --- a/src/caosdb/connection.cpp +++ b/src/caosdb/connection.cpp @@ -113,8 +113,8 @@ auto ConnectionManager::mGetConnection(const std::string &name) const auto connection = ConfigurationManager::GetConnectionConfiguration(name); connections[name] = std::make_shared<Connection>(*connection.release()); } catch (const caosdb::exceptions::ConfigurationError &exc) { - throw caosdb::exceptions::UnknownConnectionError("No connection named '" + name + - "' present."); + throw caosdb::exceptions::ConnectionConfigurationError("Error with the connection named '" + + name + "': " + exc.what()); } } return this->connections.at(name); diff --git a/src/caosdb/logging.cpp b/src/caosdb/logging.cpp index 906bd7989d3b7b80ea4159bab1ae577c022abfe3..c684862d17291c328e3a8d7856b82df1eb507001 100644 --- a/src/caosdb/logging.cpp +++ b/src/caosdb/logging.cpp @@ -45,13 +45,11 @@ #include <vector> void __attribute__((constructor)) startup() { - std::cout << "LOADING CAOSDB 1" << std::endl; - boost::log::core::get()->set_logging_enabled(false); - std::cout << "LOADING CAOSDB 2" << std::endl; + std::cout << "LOADING CAOSDB" << std::endl; } void __attribute__((destructor)) shutdown() { - std::cout << "UNLOADING CAOSDB 1" << std::endl; - caosdb::logging::_logger::destroy(); + std::cout << "UNLOADING CAOSDB" << std::endl; + caosdb::logging::logger::destroy(); } namespace caosdb::logging { diff --git a/src/caosdb/status_code_description.cpp b/src/caosdb/status_code_description.cpp index d5e08e7820ca0f7380723087570f838465a9c261..5823943cfd7f79416cabb61662f778bac5de9bf8 100644 --- a/src/caosdb/status_code_description.cpp +++ b/src/caosdb/status_code_description.cpp @@ -131,8 +131,9 @@ auto get_status_description(int code) -> const std::string & { "The transaction terminated unsuccessfully with transaction errors."}, {StatusCode::CONFIGURATION_ERROR, "An error occurred during the configuration of the ConfigurationManager."}, - {StatusCode::UNKNOWN_CONNECTION_ERROR, - "The ConnectionManager does not know any connection of this name."}, + {StatusCode::CONNECTION_CONFIGURATION_ERROR, + "Wither there is no connection of the given name or the given connection has a faulty " + "configuration"}, {StatusCode::TRANSACTION_STATUS_ERROR, "The Transaction is in a wrong state for the attempted action."}, {StatusCode::TRANSACTION_TYPE_ERROR, diff --git a/test/test_connection.cpp b/test/test_connection.cpp index 97a86df3938fd047161523e36470f90fa5f7248f..00c3bcf58e605e112a404fdfe6ece62e829562ea 100644 --- a/test/test_connection.cpp +++ b/test/test_connection.cpp @@ -22,7 +22,7 @@ #include "caosdb/certificate_provider.h" // for PemCertificateProvider #include "caosdb/configuration.h" // for InsecureConnectionConfigura... #include "caosdb/connection.h" // for ConnectionManager -#include "caosdb/exceptions.h" // for UnknownConnectionError +#include "caosdb/exceptions.h" // for ConnectionConfigurationError #include "caosdb_test_utility.h" // for EXPECT_THROW_MESSAGE, TEST_... #include <gtest/gtest-message.h> // for Message #include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestPartR... @@ -65,9 +65,16 @@ TEST_F(test_connection, configure_ssl_localhost_8080) { } TEST_F(test_connection, connection_manager_unknown_connection) { - EXPECT_THROW_MESSAGE(ConnectionManager::GetConnection("test"), - caosdb::exceptions::UnknownConnectionError, - "No connection named 'test' present."); + EXPECT_THROW_MESSAGE( + ConnectionManager::GetConnection("test"), caosdb::exceptions::ConnectionConfigurationError, + "Error with the connection named 'test': The connection 'test' has not been defined."); +} + +TEST_F(test_connection, connection_missing_certificate) { + EXPECT_THROW_MESSAGE(ConnectionManager::GetConnection("missing"), + caosdb::exceptions::ConnectionConfigurationError, + std::string("Error with the connection named 'missing': ") + + "File does not exist (server_certificate_path): /missing"); } TEST_F(test_connection, connection_manager_get_default_connection) { diff --git a/test/test_data/test_caosdb_client.json b/test/test_data/test_caosdb_client.json index 2007413021b332c3bd32686363e241804a8d62ab..276c542f75353090b28918ab0ef9b33f9f0815e1 100644 --- a/test/test_data/test_caosdb_client.json +++ b/test/test_data/test_caosdb_client.json @@ -13,6 +13,16 @@ "local-caosdb": { "host": "localhost", "port": 8443, + "authentication": { + "type": "plain", + "username": "me", + "password": "secret!" + } + }, + "missing": { + "host": "localhost", + "port": 8443, + "server_certificate_path": "/missing", "authentication": { "type": "plain", "username": "me", diff --git a/test/test_misc.cpp b/test/test_misc.cpp deleted file mode 100644 index dccaaa817a8a926772502723a231f379d04764dc..0000000000000000000000000000000000000000 --- a/test/test_misc.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * - * This file is a part of the CaosDB Project. - * - * Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com> - * Copyright (C) 2021 IndiScale GmbH <info@indiscale.com> - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ -#include <gtest/gtest-message.h> // for Message -#include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestFactoryImpl -#include <gtest/gtest_pred_impl.h> // for Test, TestInfo, EXPECT_EQ, TEST -#include <iostream> // for cout, << -#include <string> // for string -#include <utility> // for move - -namespace caosdb { - -class TestClass { -public: - ~TestClass() = default; - TestClass(TestClass &&other) = default; - TestClass(const TestClass &other); - TestClass(); - explicit TestClass(std::string member); - - auto operator=(const TestClass &other) -> TestClass &; - auto operator=(TestClass &&other) -> TestClass & = default; - - [[nodiscard]] auto ToString() const -> std::string; - std::string member; -}; - -TestClass::TestClass() { std::cout << "Constructor TestClass(): " << ToString() << "\n"; } - -TestClass::TestClass(std::string member) : member(std::move(member)) { - std::cout << "Constructor TestClass(const std:string &): " << ToString() << "\n"; -} - -TestClass::TestClass(const TestClass &other) : member(other.member) { - std::cout << "Copy Constructor TestClass(const TestClass &): " << ToString() << "\n"; -} - -auto TestClass::operator=(const TestClass &other) -> TestClass & { - std::cout << "Copy assignment (" << ToString() << "->"; - if (this != &other) { - this->member = other.member; - } - std::cout << ToString() << ")\n"; - return *this; -} - -auto TestClass::ToString() const -> std::string { return "TestClass(" + member + ")"; } - -TEST(test_misc, test_move) { - TestClass test_class1; - std::cout << "test_class1: " << test_class1.ToString() << "\n"; - - TestClass test_class2 = test_class1; - std::cout << "test_class2: " << test_class2.ToString() << "\n"; - - const TestClass test_class3("member3"); - std::cout << "test_class3: " << test_class3.ToString() << "\n"; - - TestClass test_class4 = test_class3; - std::cout << "test_class4: " << test_class4.ToString() << "\n"; -} - -} // namespace caosdb