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

Merge branch 'dev' into 'main'

Error handling

See merge request !2
parents 54eccbba 85a62398
Branches
Tags
1 merge request!2Error handling
Pipeline #11304 failed
...@@ -42,9 +42,6 @@ string(REGEX REPLACE "grpc\\+?\\+?_unsecure" "" CONAN_LIBS ...@@ -42,9 +42,6 @@ string(REGEX REPLACE "grpc\\+?\\+?_unsecure" "" CONAN_LIBS
string(REGEX REPLACE "grpc\\+?\\+?_unsecure" "" CONAN_PKG_LIBS string(REGEX REPLACE "grpc\\+?\\+?_unsecure" "" CONAN_PKG_LIBS
"${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}) set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
enable_testing() enable_testing()
......
[requires] [requires]
caosdb/0.0.5 caosdb/0.0.6
gtest/1.11.0 gtest/1.11.0
[generators] [generators]
......
...@@ -27,11 +27,39 @@ set(test_cases ...@@ -27,11 +27,39 @@ set(test_cases
test_ccaosdb 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 ### Linting with clang-tidy and include-what-you-use
####################################################### #######################################################
option(LINTING "clang-tidy and iwye" ON) option(LINTING "clang-tidy and iwye" ON)
if(LINTING) 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 find_program(iwyu
NAMES include-what-you-use iwyu NAMES include-what-you-use iwyu
PATHS ${CMAKE_SOURCE_DIR}/tools/include-what-you-use/${iwyu_os}/bin) PATHS ${CMAKE_SOURCE_DIR}/tools/include-what-you-use/${iwyu_os}/bin)
...@@ -54,7 +82,7 @@ if(LINTING) ...@@ -54,7 +82,7 @@ if(LINTING)
"--warnings-as-errors=*" "--warnings-as-errors=*"
"--fix") "--fix")
set(_CMAKE_CXX_CLANG_TIDY_CHECKS 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() endif()
else() else()
message(STATUS "LINTING is OFF") message(STATUS "LINTING is OFF")
......
...@@ -17,11 +17,11 @@ ...@@ -17,11 +17,11 @@
* You should have received a copy of the GNU Affero General Public License * 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/>. * 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 "ccaosdb.h" // for caosdb_info_version_info, caosdb_...
#include "gtest/gtest-message.h" // for Message #include "gtest/gtest-message.h" // for Message
#include "gtest/gtest-test-part.h" // for TestPartResult #include "gtest/gtest-test-part.h" // for TestPartResult
#include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, SuiteApiResolver #include "gtest/gtest_pred_impl.h" // for Test, EXPECT_EQ, SuiteApiResolver
#include <memory> // for allocator, unique_ptr
TEST(test_ccaosdb, connection_ssl_authentication_success) { TEST(test_ccaosdb, connection_ssl_authentication_success) {
......
...@@ -18,21 +18,27 @@ ...@@ -18,21 +18,27 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
#include <gtest/gtest-message.h> // for Message #include "boost/filesystem/path.hpp" // for path
#include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestPartResult #include "caosdb/authentication.h" // for PlainPasswordAuthenticator
#include <memory> // for make_shared, allocator, shared_ptr #include "caosdb/certificate_provider.h" // for PemFileCertificateProvider
#include <string> // for string #include "caosdb/configuration.h" // for InsecureConnectionConfigura...
#include "caosdb/authentication.h" // for PlainPasswordAuthenticator #include "caosdb/connection.h" // for Connection, VersionInfo, path
#include "caosdb/connection.h" // for InsecureConnectionConfiguration #include "caosdb/constants.h" // for COMPATIBLE_SERVER_VERSION_M...
#include "caosdb/exceptions.h" // for AuthenticationError, ConnectionError #include "caosdb/exceptions.h" // for AuthenticationError, Connec...
#include "caosdb/info.h" // for VersionInfo #include "caosdb/info.h" // for VersionInfo
#include "caosdb/utility.h" // for get_env_var #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" // for EXPECT_THROW_MESSAGE
#include "caosdb_test_utility.h" #include <gtest/gtest-message.h> // for Message
#include "caosdb/constants.h" #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 { namespace caosdb::connection {
using caosdb::authentication::PlainPasswordAuthenticator; using caosdb::authentication::PlainPasswordAuthenticator;
using caosdb::configuration::InsecureConnectionConfiguration;
using caosdb::configuration::PemFileCertificateProvider;
using caosdb::configuration::TlsConnectionConfiguration;
using caosdb::exceptions::AuthenticationError; using caosdb::exceptions::AuthenticationError;
using caosdb::exceptions::ConnectionError; using caosdb::exceptions::ConnectionError;
...@@ -51,7 +57,7 @@ TEST(test_connection, connect_somehost_42347_fails) { ...@@ -51,7 +57,7 @@ TEST(test_connection, connect_somehost_42347_fails) {
auto config = InsecureConnectionConfiguration(host, port); auto config = InsecureConnectionConfiguration(host, port);
Connection connection(config); Connection connection(config);
EXPECT_THROW(connection.GetVersionInfo(), ConnectionError); EXPECT_THROW(connection.RetrieveVersionInfo(), ConnectionError);
} }
TEST(test_connection, connection_insecure_authentication_error_anonymous) { TEST(test_connection, connection_insecure_authentication_error_anonymous) {
...@@ -64,7 +70,7 @@ 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 config = InsecureConnectionConfiguration(host, port);
auto connection = Connection(config); auto connection = Connection(config);
EXPECT_THROW(connection.GetVersionInfo(), AuthenticationError); EXPECT_THROW(connection.RetrieveVersionInfo(), AuthenticationError);
} }
TEST(test_connection, connection_ssl_authentication_error_anonymous) { TEST(test_connection, connection_ssl_authentication_error_anonymous) {
...@@ -80,8 +86,10 @@ 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 config = TlsConnectionConfiguration(host, port, cert);
auto connection = Connection(config); auto connection = Connection(config);
EXPECT_THROW_MESSAGE(connection.GetVersionInfo(), AuthenticationError, EXPECT_THROW_MESSAGE(connection.RetrieveVersionInfo(), AuthenticationError,
"Please login."); "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) { TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) {
...@@ -100,8 +108,11 @@ 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 config = TlsConnectionConfiguration(host, port, cert, auth);
auto connection = Connection(config); auto connection = Connection(config);
EXPECT_THROW_MESSAGE(connection.GetVersionInfo(), AuthenticationError, EXPECT_THROW_MESSAGE(
"Authentication failed. Username or password wrong."); 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) { TEST(test_connection, connection_ssl_authentication_success) {
...@@ -112,10 +123,10 @@ TEST(test_connection, connection_ssl_authentication_success) { ...@@ -112,10 +123,10 @@ TEST(test_connection, connection_ssl_authentication_success) {
const auto pre_release = const auto pre_release =
std::string(caosdb::COMPATIBLE_SERVER_VERSION_PRE_RELEASE); std::string(caosdb::COMPATIBLE_SERVER_VERSION_PRE_RELEASE);
auto v_info = connection->GetVersionInfo(); const auto &v_info = connection->RetrieveVersionInfo();
EXPECT_EQ(major, v_info->GetMajor()); EXPECT_EQ(major, v_info.GetMajor());
EXPECT_EQ(minor, v_info->GetMinor()); EXPECT_EQ(minor, v_info.GetMinor());
EXPECT_EQ(pre_release, v_info->GetPreRelease()); EXPECT_EQ(pre_release, v_info.GetPreRelease());
} }
} // namespace caosdb::connection } // namespace caosdb::connection
...@@ -18,15 +18,19 @@ ...@@ -18,15 +18,19 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
#include <gtest/gtest-message.h> // for Message #include "caosdb/connection.h" // for Connection, ConnectionManager
#include <gtest/gtest-test-part.h> // for SuiteApiResolver, TestFactoryImpl #include "caosdb/entity.h" // for Entity, Messages, Message
#include <memory> // for allocator, static_pointer_cast #include "caosdb/message_code.h" // for ENTITY_DOES_NOT_EXIST, Messag...
#include "caosdb/connection.h" // for CaosDBConnection #include "caosdb/status_code.h" // for SUCCESS, StatusCode
#include "caosdb/entity.h" // for Entity, EntityID #include "caosdb/transaction.h" // for Entity, Transaction, UniqueRe...
#include "caosdb/transaction.h" // for Transaction, UniqueResult, Entity #include "caosdb/transaction_status.h" // for TransactionStatus, StatusCode
#include "gtest/gtest_pred_impl.h" // for Test, TestInfo, EXPECT_EQ, TEST #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 { namespace caosdb::transaction {
using caosdb::entity::MessageCode;
TEST(test_transaction, DISABLED_retrieve_manufacturer_by_id) { TEST(test_transaction, DISABLED_retrieve_manufacturer_by_id) {
const auto &connection = const auto &connection =
...@@ -54,4 +58,30 @@ TEST(test_transaction, DISABLED_retrieve_manufacturer_by_id) { ...@@ -54,4 +58,30 @@ TEST(test_transaction, DISABLED_retrieve_manufacturer_by_id) {
EXPECT_EQ(version, entity.GetVersion()); 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 } // namespace caosdb::transaction
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment