From 7be3cb3117e9c074f52d1fbbf314e1ebc037c5e1 Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Thu, 30 Jun 2022 17:23:27 +0200 Subject: [PATCH] Add tests for user creation/deletion/retrieval --- test/CMakeLists.txt | 1 + test/caosdb_test_utility.h | 8 +++++ test/test_user.cpp | 66 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 test/test_user.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 347d017..1fc192c 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -29,6 +29,7 @@ set(test_cases test_transaction test_ccaosdb test_issues + test_user ) diff --git a/test/caosdb_test_utility.h b/test/caosdb_test_utility.h index 581e603..7c29f90 100644 --- a/test/caosdb_test_utility.h +++ b/test/caosdb_test_utility.h @@ -45,4 +45,12 @@ throw; \ }, \ exeption_type) +#define EXPECT_THROW_STARTS_WITH(statement, exception_type, pattern) \ + EXPECT_THROW( \ + try { statement; } catch (const exception_type &e) { \ + auto pat_s = std::string(pattern); \ + EXPECT_EQ(std::string(e.what()).substr(0, pat_s.size()), pat_s); \ + throw; \ + }, \ + exception_type) #endif diff --git a/test/test_user.cpp b/test/test_user.cpp new file mode 100644 index 0000000..3400822 --- /dev/null +++ b/test/test_user.cpp @@ -0,0 +1,66 @@ +/* + * This file is a part of the CaosDB Project. + * + * Copyright (C) 2022 Timm Fitschen <t.fitschen@indiscale.com> + * Copyright (C) 2022 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 "caosdb/acm/user.h" // for User +#include "caosdb/connection.h" // for Connection, VersionInfo, path +#include "caosdb/exceptions.h" // for TransactionError +#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::acm::User; + +TEST(test_user, test_create_single_user_failure_invalid_name) { + auto connection = ConnectionManager::GetDefaultConnection(); + User user("CaosDB", "-user1"); + EXPECT_THROW_STARTS_WITH( + connection->CreateSingleUser(user), caosdb::exceptions::Exception, + "The attempt to execute this transaction was not successful because an error occured in the " + "transport or RPC protocol layer. Original error: 2 - The user name does not comply with the " + "current policies for user names:"); +} + +TEST(test_user, test_create_single_user_failure_invalid_password) { + auto connection = ConnectionManager::GetDefaultConnection(); + User user("CaosDB", "user1"); + user.SetPassword("1234"); + EXPECT_THROW_STARTS_WITH( + connection->CreateSingleUser(user), caosdb::exceptions::Exception, + "The attempt to execute this transaction was not successful because an error occured in the " + "transport or RPC protocol layer. Original error: 2 - The password does not comply with the " + "current policies for passwords: "); +} + +TEST(test_user, test_create_single_user_success) { + auto connection = ConnectionManager::GetDefaultConnection(); + User user("CaosDB", "user1"); + user.SetPassword("Password1!"); + connection->CreateSingleUser(user); + auto re = connection->RetrieveSingleUser("CaosDB", "user1"); + EXPECT_EQ(re.GetName(), user.GetName()); + connection->DeleteSingleUser("CaosDB", "user1"); + EXPECT_THROW_MESSAGE(connection->RetrieveSingleUser("CaosDB", "user1"), caosdb::exceptions::Exception, "The attempt to execute this transaction was not successful because an error occured in the transport or RPC protocol layer. Original error: 5 - This account does not exist."); +} + +} // namespace caosdb::connection -- GitLab