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
No related branches found
No related tags found
1 merge request!2Error handling
Pipeline #11304 failed
......@@ -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()
......
[requires]
caosdb/0.0.5
caosdb/0.0.6
gtest/1.11.0
[generators]
......
......@@ -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")
......
......@@ -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) {
......
......@@ -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 "boost/filesystem/path.hpp" // for path
#include "caosdb/authentication.h" // for PlainPasswordAuthenticator
#include "caosdb/connection.h" // for InsecureConnectionConfiguration
#include "caosdb/exceptions.h" // for AuthenticationError, ConnectionError
#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 "gtest/gtest_pred_impl.h" // for Test, TEST, EXPECT_EQ, EXPECT_THROW
#include "caosdb_test_utility.h"
#include "caosdb/constants.h"
#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,7 +108,10 @@ 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,
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.");
}
......@@ -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
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment