diff --git a/CMakeLists.txt b/CMakeLists.txt index 681fb8661d4a5dfdb29a0f4a341a7c20d09649f5..31b42d272652fc3405008585d32cea18e5a1403a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,9 +42,6 @@ string(REGEX REPLACE "grpc\\+?\\+?_unsecure" "" CONAN_LIBS string(REGEX REPLACE "grpc\\+?\\+?_unsecure" "" CONAN_PKG_LIBS "${CONAN_PKG_LIBS}") -# ignore some warnings here -add_compile_options(-Wno-unused-parameter -Wno-unused-result -g) - set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) enable_testing() diff --git a/conanfile.txt b/conanfile.txt index 048f038956408610ddfa02e4d3b780b990f2d657..8d9e042aeeef0bafbed5095de4bf6ceb2029d06b 100644 --- a/conanfile.txt +++ b/conanfile.txt @@ -1,5 +1,5 @@ [requires] -caosdb/0.0.5 +caosdb/0.0.6 gtest/1.11.0 [generators] diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 49dde42cf0d3a578f9bd1f50cd99b1c88ccf3fcb..23ef7d4ba3fe73fb58272a1f0f29e470e0aaefc7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -27,11 +27,39 @@ set(test_cases test_ccaosdb ) + +include(CheckCXXCompilerFlag) +include(CheckCCompilerFlag) + +function(add_compiler_flag flag) + string(FIND "${CMAKE_CXX_FLAGS}" "${flag}" cxx_present) + if(cxx_present EQUAL -1) + check_cxx_compiler_flag("${flag}" flag_supported) + if(flag_supported) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}" PARENT_SCOPE) + endif() + unset(flag_supported CACHE) + endif() + unset(cxx_present CACHE) +endfunction() + +### but ignore these +add_compiler_flag("-Wno-unused-parameter") +add_compiler_flag("-Wno-unused-result") +add_compiler_flag("-g") + ####################################################### ### Linting with clang-tidy and include-what-you-use ####################################################### option(LINTING "clang-tidy and iwye" ON) if(LINTING) + ### set paranoid compiler flags + #add_compiler_flag("-Wall") + #add_compiler_flag("-Wextra") + #add_compiler_flag("-pedantic") + #add_compiler_flag("-Werror") + + find_program(iwyu NAMES include-what-you-use iwyu PATHS ${CMAKE_SOURCE_DIR}/tools/include-what-you-use/${iwyu_os}/bin) @@ -54,7 +82,7 @@ if(LINTING) "--warnings-as-errors=*" "--fix") set(_CMAKE_CXX_CLANG_TIDY_CHECKS - "--checks=*,-fuchsia-*,-llvm-include-order,-llvmlibc-*,-cert-err58-cpp,-cppcoreguidelines-avoid-non-const-global-variables,-cppcoreguidelines-owning-memory,-modernize-use-trailing-return-type,-google-readability-avoid-underscore-in-googletest-name,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-cppcoreguidelines-avoid-goto,-hicpp-avoid-goto") + "--checks=*,-fuchsia-*,-llvmlibc-*,-cert-err58-cpp,-cppcoreguidelines-avoid-non-const-global-variables,-cppcoreguidelines-owning-memory,-modernize-use-trailing-return-type,-google-readability-avoid-underscore-in-googletest-name,-cppcoreguidelines-avoid-magic-numbers,-readability-magic-numbers,-cppcoreguidelines-avoid-goto,-hicpp-avoid-goto") endif() else() message(STATUS "LINTING is OFF") diff --git a/test/test_ccaosdb.cpp b/test/test_ccaosdb.cpp index 3b99e8e0c8869230648b5d85359e3ecbeebf07e6..1bf33420edef2b62f4dbfa395ffd2b401b43ea68 100644 --- a/test/test_ccaosdb.cpp +++ b/test/test_ccaosdb.cpp @@ -17,11 +17,11 @@ * 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 <memory> // for allocator, unique_ptr #include "ccaosdb.h" // for caosdb_info_version_info, caosdb_... #include "gtest/gtest-message.h" // for Message #include "gtest/gtest-test-part.h" // for TestPartResult #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, SuiteApiResolver +#include <memory> // for allocator, unique_ptr TEST(test_ccaosdb, connection_ssl_authentication_success) { diff --git a/test/test_connection.cpp b/test/test_connection.cpp index 08eec662fd93ac3e0b7b05579f0aa4c184017a38..ed1ca1faa5186105c87edb5068916f76ab850882 100644 --- a/test/test_connection.cpp +++ b/test/test_connection.cpp @@ -18,21 +18,27 @@ * 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, TestPartResult -#include <memory> // for make_shared, allocator, shared_ptr -#include <string> // for string -#include "caosdb/authentication.h" // for PlainPasswordAuthenticator -#include "caosdb/connection.h" // for InsecureConnectionConfiguration -#include "caosdb/exceptions.h" // for AuthenticationError, ConnectionError -#include "caosdb/info.h" // for VersionInfo -#include "caosdb/utility.h" // for get_env_var -#include "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ, EXPECT_THROW -#include "caosdb_test_utility.h" -#include "caosdb/constants.h" +#include "boost/filesystem/path.hpp" // for path +#include "caosdb/authentication.h" // for PlainPasswordAuthenticator +#include "caosdb/certificate_provider.h" // for PemFileCertificateProvider +#include "caosdb/configuration.h" // for InsecureConnectionConfigura... +#include "caosdb/connection.h" // for Connection, VersionInfo, path +#include "caosdb/constants.h" // for COMPATIBLE_SERVER_VERSION_M... +#include "caosdb/exceptions.h" // for AuthenticationError, Connec... +#include "caosdb/info.h" // for VersionInfo +#include "caosdb/utility.h" // for get_env_var +#include "caosdb_test_utility.h" // for EXPECT_THROW_MESSAGE +#include <gtest/gtest-message.h> // for Message +#include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestPartR... +#include "gtest/gtest_pred_impl.h" // for Test, TestInfo, TEST, EXPEC... +#include <memory> // for allocator, unique_ptr, __sh... +#include <string> // for stoi, string namespace caosdb::connection { using caosdb::authentication::PlainPasswordAuthenticator; +using caosdb::configuration::InsecureConnectionConfiguration; +using caosdb::configuration::PemFileCertificateProvider; +using caosdb::configuration::TlsConnectionConfiguration; using caosdb::exceptions::AuthenticationError; using caosdb::exceptions::ConnectionError; @@ -51,7 +57,7 @@ TEST(test_connection, connect_somehost_42347_fails) { auto config = InsecureConnectionConfiguration(host, port); Connection connection(config); - EXPECT_THROW(connection.GetVersionInfo(), ConnectionError); + EXPECT_THROW(connection.RetrieveVersionInfo(), ConnectionError); } TEST(test_connection, connection_insecure_authentication_error_anonymous) { @@ -64,7 +70,7 @@ TEST(test_connection, connection_insecure_authentication_error_anonymous) { auto config = InsecureConnectionConfiguration(host, port); auto connection = Connection(config); - EXPECT_THROW(connection.GetVersionInfo(), AuthenticationError); + EXPECT_THROW(connection.RetrieveVersionInfo(), AuthenticationError); } TEST(test_connection, connection_ssl_authentication_error_anonymous) { @@ -80,8 +86,10 @@ TEST(test_connection, connection_ssl_authentication_error_anonymous) { auto config = TlsConnectionConfiguration(host, port, cert); auto connection = Connection(config); - EXPECT_THROW_MESSAGE(connection.GetVersionInfo(), AuthenticationError, - "Please login."); + EXPECT_THROW_MESSAGE(connection.RetrieveVersionInfo(), AuthenticationError, + "The attempt to execute this transaction has not been " + "executed at all because the authentication did not " + "succeed. Original error: Please login."); } TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) { @@ -100,8 +108,11 @@ TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) { auto config = TlsConnectionConfiguration(host, port, cert, auth); auto connection = Connection(config); - EXPECT_THROW_MESSAGE(connection.GetVersionInfo(), AuthenticationError, - "Authentication failed. Username or password wrong."); + EXPECT_THROW_MESSAGE( + connection.RetrieveVersionInfo(), AuthenticationError, + "The attempt to execute this transaction has not been executed at all " + "because the authentication did not succeed. Original error: " + "Authentication failed. Username or password wrong."); } TEST(test_connection, connection_ssl_authentication_success) { @@ -112,10 +123,10 @@ TEST(test_connection, connection_ssl_authentication_success) { const auto pre_release = std::string(caosdb::COMPATIBLE_SERVER_VERSION_PRE_RELEASE); - auto v_info = connection->GetVersionInfo(); - EXPECT_EQ(major, v_info->GetMajor()); - EXPECT_EQ(minor, v_info->GetMinor()); - EXPECT_EQ(pre_release, v_info->GetPreRelease()); + const auto &v_info = connection->RetrieveVersionInfo(); + EXPECT_EQ(major, v_info.GetMajor()); + EXPECT_EQ(minor, v_info.GetMinor()); + EXPECT_EQ(pre_release, v_info.GetPreRelease()); } } // namespace caosdb::connection diff --git a/test/test_transaction.cpp b/test/test_transaction.cpp index ec59df9e692416d727529f3c320583be99f6b8f8..1a4141532d31164ffa102dac3d20fd0b828d1a89 100644 --- a/test/test_transaction.cpp +++ b/test/test_transaction.cpp @@ -18,15 +18,19 @@ * 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 <memory> // for allocator, static_pointer_cast -#include "caosdb/connection.h" // for CaosDBConnection -#include "caosdb/entity.h" // for Entity, EntityID -#include "caosdb/transaction.h" // for Transaction, UniqueResult, Entity -#include "gtest/gtest_pred_impl.h" // for Test, TestInfo, EXPECT_EQ, TEST +#include "caosdb/connection.h" // for Connection, ConnectionManager +#include "caosdb/entity.h" // for Entity, Messages, Message +#include "caosdb/message_code.h" // for ENTITY_DOES_NOT_EXIST, Messag... +#include "caosdb/status_code.h" // for SUCCESS, StatusCode +#include "caosdb/transaction.h" // for Entity, Transaction, UniqueRe... +#include "caosdb/transaction_status.h" // for TransactionStatus, StatusCode +#include "gtest/gtest-message.h" // for Message +#include "gtest/gtest-test-part.h" // for TestPartResult, SuiteApiResolver +#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, AssertionResult +#include <memory> // for unique_ptr, allocator, __shar... namespace caosdb::transaction { +using caosdb::entity::MessageCode; TEST(test_transaction, DISABLED_retrieve_manufacturer_by_id) { const auto &connection = @@ -54,4 +58,30 @@ TEST(test_transaction, DISABLED_retrieve_manufacturer_by_id) { EXPECT_EQ(version, entity.GetVersion()); } +TEST(test_transaction, retrieve_non_existing) { + const auto &connection = + caosdb::connection::ConnectionManager::GetDefaultConnection(); + + auto transaction(connection->CreateTransaction()); + + const auto *id = "non-existing-id"; + transaction->RetrieveById(id); + transaction->ExecuteAsynchronously(); + + auto status = transaction->WaitForIt(); + EXPECT_EQ(status.GetCode(), TransactionStatus::TRANSACTION_ERROR().GetCode()); + ASSERT_EQ(status.GetCode(), StatusCode::GENERIC_TRANSACTION_ERROR); + + const auto &result_set = + dynamic_cast<const caosdb::transaction::UniqueResult &>( + transaction->GetResultSet()); + + const auto &entity = result_set.GetEntity(); + EXPECT_EQ(id, entity.GetId()); + EXPECT_TRUE(entity.HasErrors()); + ASSERT_EQ(entity.GetErrors().Size(), 1); + EXPECT_EQ(entity.GetErrors().At(0).GetCode(), + MessageCode::ENTITY_DOES_NOT_EXIST); +} + } // namespace caosdb::transaction