Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • caosdb/src/caosdb-cppinttest
1 result
Show changes
Commits on Source (5)
......@@ -24,7 +24,7 @@
set(test_cases
test_connection
test_transaction
#test_file_transmission TODO add once fixed
test_list_properties
test_ccaosdb
)
......
......@@ -33,16 +33,16 @@
*/
#define EXPECT_THROW_MESSAGE(statement, exeption_type, message) \
EXPECT_THROW( \
try { statement; } catch (const exeption_type &e) { \
EXPECT_EQ(std::string(e.what()), message); \
throw; \
}, \
exeption_type)
try { statement; } catch (const exeption_type &e) { \
EXPECT_EQ(std::string(e.what()), message); \
throw; \
}, \
exeption_type)
#define ASSERT_THROW_MESSAGE(statement, exeption_type, message) \
ASSERT_THROW( \
try { statement; } catch (const exeption_type &e) { \
ASSERT_EQ(std::string(e.what()), message); \
throw; \
}, \
exeption_type)
try { statement; } catch (const exeption_type &e) { \
ASSERT_EQ(std::string(e.what()), message); \
throw; \
}, \
exeption_type)
#endif
......@@ -37,7 +37,7 @@ TEST(test_ccaosdb, connection_ssl_authentication_success) {
auto major = caosdb_constants_COMPATIBLE_SERVER_VERSION_MAJOR();
auto minor = caosdb_constants_COMPATIBLE_SERVER_VERSION_MINOR();
const auto *const pre_release =
caosdb_constants_COMPATIBLE_SERVER_VERSION_PRE_RELEASE();
caosdb_constants_COMPATIBLE_SERVER_VERSION_PRE_RELEASE();
EXPECT_EQ(major, version_info.major);
EXPECT_EQ(minor, version_info.minor);
......@@ -48,12 +48,12 @@ TEST(test_ccaosdb, test_count_query) {
caosdb_connection_connection connection;
int return_code(
caosdb_connection_connection_manager_get_default_connection(&connection));
caosdb_connection_connection_manager_get_default_connection(&connection));
EXPECT_EQ(return_code, 0);
caosdb_transaction_transaction transaction;
return_code =
caosdb_connection_connection_create_transaction(&connection, &transaction);
return_code = caosdb_connection_connection_create_transaction(&connection,
&transaction);
EXPECT_EQ(return_code, 0);
// COUNT query with an empty result
......@@ -67,7 +67,7 @@ TEST(test_ccaosdb, test_count_query) {
long dummy(-1); // NOLINT
long *count = &dummy; // NOLINT
return_code =
caosdb_transaction_transaction_get_count_result(&transaction, count);
caosdb_transaction_transaction_get_count_result(&transaction, count);
EXPECT_EQ(return_code, 0);
EXPECT_EQ(*count, 0);
......@@ -78,12 +78,12 @@ TEST(test_ccaosdb, test_count_query) {
TEST(test_ccaosdb, test_query) {
caosdb_connection_connection connection;
int return_code(
caosdb_connection_connection_manager_get_default_connection(&connection));
caosdb_connection_connection_manager_get_default_connection(&connection));
EXPECT_EQ(return_code, 0);
caosdb_transaction_transaction transaction;
return_code =
caosdb_connection_connection_create_transaction(&connection, &transaction);
return_code = caosdb_connection_connection_create_transaction(&connection,
&transaction);
EXPECT_EQ(return_code, 0);
return_code = caosdb_transaction_transaction_query(&transaction,
......@@ -95,7 +95,7 @@ TEST(test_ccaosdb, test_query) {
caosdb_transaction_result_set result_set;
return_code =
caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
EXPECT_EQ(return_code, 0);
int dummy(-1);
......@@ -111,16 +111,16 @@ TEST(test_ccaosdb, test_query) {
TEST(test_ccaosdb, test_single_id_retrieve) {
caosdb_connection_connection connection;
int return_code(
caosdb_connection_connection_manager_get_default_connection(&connection));
caosdb_connection_connection_manager_get_default_connection(&connection));
EXPECT_EQ(return_code, 0);
caosdb_transaction_transaction transaction;
return_code =
caosdb_connection_connection_create_transaction(&connection, &transaction);
return_code = caosdb_connection_connection_create_transaction(&connection,
&transaction);
EXPECT_EQ(return_code, 0);
return_code =
caosdb_transaction_transaction_retrieve_by_id(&transaction, "21");
caosdb_transaction_transaction_retrieve_by_id(&transaction, "21");
EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
return_code = caosdb_transaction_transaction_execute(&transaction);
......@@ -128,7 +128,7 @@ TEST(test_ccaosdb, test_single_id_retrieve) {
caosdb_transaction_result_set result_set;
return_code =
caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
EXPECT_EQ(return_code, 0);
int dummy(-1);
......@@ -157,17 +157,17 @@ TEST(test_ccaosdb, test_single_id_retrieve) {
TEST(test_ccaosdb, test_multi_id_retrieve) {
caosdb_connection_connection connection;
int return_code(
caosdb_connection_connection_manager_get_default_connection(&connection));
caosdb_connection_connection_manager_get_default_connection(&connection));
EXPECT_EQ(return_code, 0);
caosdb_transaction_transaction transaction;
return_code =
caosdb_connection_connection_create_transaction(&connection, &transaction);
return_code = caosdb_connection_connection_create_transaction(&connection,
&transaction);
EXPECT_EQ(return_code, 0);
const char *ids[] = {"20", "21", "22"}; // NOLINT
return_code =
caosdb_transaction_transaction_retrieve_by_ids(&transaction, ids, 3);
caosdb_transaction_transaction_retrieve_by_ids(&transaction, ids, 3);
EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
return_code = caosdb_transaction_transaction_execute(&transaction);
......@@ -176,7 +176,7 @@ TEST(test_ccaosdb, test_multi_id_retrieve) {
caosdb_transaction_result_set result_set;
return_code =
caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
caosdb_transaction_transaction_get_result_set(&transaction, &result_set);
EXPECT_EQ(return_code, 0);
int dummy(-1);
......
......@@ -62,10 +62,10 @@ TEST(test_connection, connect_somehost_42347_fails) {
TEST(test_connection, connection_insecure_authentication_error_anonymous) {
const auto *port_str =
caosdb::utility::get_env_var("CAOSDB_SERVER_GRPC_PORT_HTTP", "8080");
caosdb::utility::get_env_var("CAOSDB_SERVER_GRPC_PORT_HTTP", "8080");
auto port = std::stoi(port_str);
const auto *const host =
caosdb::utility::get_env_var("CAOSDB_SERVER_HOST", "localhost");
caosdb::utility::get_env_var("CAOSDB_SERVER_HOST", "localhost");
auto config = InsecureConnectionConfiguration(host, port);
auto connection = Connection(config);
......@@ -75,12 +75,12 @@ TEST(test_connection, connection_insecure_authentication_error_anonymous) {
TEST(test_connection, connection_ssl_authentication_error_anonymous) {
const auto *port_str =
caosdb::utility::get_env_var("CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
caosdb::utility::get_env_var("CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
auto port = std::stoi(port_str);
const auto *const host =
caosdb::utility::get_env_var("CAOSDB_SERVER_HOST", "localhost");
caosdb::utility::get_env_var("CAOSDB_SERVER_HOST", "localhost");
const auto path =
caosdb::utility::get_env_var("CAOSDB_SERVER_CERT", std::string());
caosdb::utility::get_env_var("CAOSDB_SERVER_CERT", std::string());
auto cert = PemFileCertificateProvider(path);
auto config = TlsConnectionConfiguration(host, port, cert);
......@@ -94,12 +94,12 @@ TEST(test_connection, connection_ssl_authentication_error_anonymous) {
TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) {
const auto *port_str =
caosdb::utility::get_env_var("CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
caosdb::utility::get_env_var("CAOSDB_SERVER_GRPC_PORT_HTTPS", "8443");
auto port = std::stoi(port_str);
const auto *const host =
caosdb::utility::get_env_var("CAOSDB_SERVER_HOST", "localhost");
caosdb::utility::get_env_var("CAOSDB_SERVER_HOST", "localhost");
const auto path =
caosdb::utility::get_env_var("CAOSDB_SERVER_CERT", std::string());
caosdb::utility::get_env_var("CAOSDB_SERVER_CERT", std::string());
const auto *const user = "not-a-user-23461237";
const auto *const password = "very-c-cred";
......@@ -109,10 +109,10 @@ TEST(test_connection, connection_ssl_authentication_error_wrong_credentials) {
auto connection = Connection(config);
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.");
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) {
......@@ -121,7 +121,7 @@ TEST(test_connection, connection_ssl_authentication_success) {
auto major = caosdb::COMPATIBLE_SERVER_VERSION_MAJOR;
auto minor = caosdb::COMPATIBLE_SERVER_VERSION_MINOR;
const auto pre_release =
std::string(caosdb::COMPATIBLE_SERVER_VERSION_PRE_RELEASE);
std::string(caosdb::COMPATIBLE_SERVER_VERSION_PRE_RELEASE);
const auto &v_info = connection->RetrieveVersionInfo();
EXPECT_EQ(major, v_info.GetMajor());
......
/*
* 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 "caosdb/connection.h" // for Connection, ConnectionManager
#include "caosdb/entity.h"
#include "caosdb/entity/v1alpha1/main.pb.h"
#include "caosdb/transaction.h" // for Transaction, UniqueRe...
#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...
#include <string> // for string
namespace caosdb::transaction {
using caosdb::entity::Entity;
using caosdb::entity::v1alpha1::FileDownloadResponse;
using caosdb::entity::v1alpha1::FileUploadResponse;
using caosdb::entity::v1alpha1::RegisterFileDownloadResponse;
using caosdb::entity::v1alpha1::RegisterFileUploadResponse;
using caosdb::entity::v1alpha1::RegistrationStatus;
using caosdb::entity::v1alpha1::TransmissionStatus;
// TODO(tf) this file is currently not used (see CMakeLists.txt)
// Is it still necessary or is it obsolete due to test_transaction.cpp?
// RegisterFileDownloadResponse is currently not defined by proto or the h
// file.
class test_file_transmission : public ::testing::Test {
protected:
void SetUp() override {}
void TearDown() override {
// TODO(tf): delete all created entities
}
};
TEST_F(test_file_transmission, register_file_upload) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto transaction(connection->CreateTransaction());
RegisterFileUploadResponse response;
EXPECT_EQ(response.status(),
RegistrationStatus::REGISTRATION_STATUS_UNSPECIFIED);
transaction->RegisterUploadFile(&response);
EXPECT_EQ(response.status(),
RegistrationStatus::REGISTRATION_STATUS_ACCEPTED);
EXPECT_FALSE(response.registration_id().empty());
}
TEST_F(test_file_transmission, file_upload) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto transaction(connection->CreateTransaction());
RegisterFileUploadResponse registration_response;
transaction->RegisterUploadFile(&registration_response);
ASSERT_EQ(registration_response.status(),
RegistrationStatus::REGISTRATION_STATUS_ACCEPTED);
auto registration_id = registration_response.registration_id();
FileUploadResponse upload_response;
transaction->UploadFile(&upload_response, registration_id);
EXPECT_EQ(upload_response.status(),
TransmissionStatus::TRANSMISSION_STATUS_GO_ON);
}
TEST_F(test_file_transmission, file_insertion) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto transaction(connection->CreateTransaction());
RegisterFileUploadResponse registration_response;
transaction->RegisterUploadFile(&registration_response);
ASSERT_EQ(registration_response.status(),
RegistrationStatus::REGISTRATION_STATUS_ACCEPTED);
auto registration_id = registration_response.registration_id();
FileUploadResponse upload_response;
transaction->UploadFile(&upload_response, registration_id);
Entity file_entity;
file_entity.SetRole("File");
file_entity.SetFileTransmissionId(registration_id, "test.txt");
file_entity.SetFilePath("test.txt");
transaction->InsertEntity(&file_entity);
transaction->Execute();
auto cleanup_transaction(connection->CreateTransaction());
cleanup_transaction->DeleteById(transaction->GetResultSet().At(0).GetId());
cleanup_transaction->Execute();
}
TEST_F(test_file_transmission, file_download) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto upload_transaction(connection->CreateTransaction());
RegisterFileUploadResponse upload_registration_response;
upload_transaction->RegisterUploadFile(&upload_registration_response);
ASSERT_EQ(upload_registration_response.status(),
RegistrationStatus::REGISTRATION_STATUS_ACCEPTED);
auto registration_id = upload_registration_response.registration_id();
FileUploadResponse upload_response;
upload_transaction->UploadFile(&upload_response, registration_id);
Entity file_entity;
file_entity.SetRole("File");
file_entity.SetFileTransmissionId(registration_id, "test.txt");
file_entity.SetFilePath("test.txt");
upload_transaction->InsertEntity(&file_entity);
upload_transaction->Execute();
// Download by entity_id
auto download_transaction(connection->CreateTransaction());
RegisterFileDownloadResponse download_registration_response;
RegisterFileDownloadRequest download_registration_request;
download_registration_request.add_files()->set_entity_id(
upload_transaction->GetResultSet().At(0).GetId());
download_transaction->RegisterDownloadFile(download_registration_request,
&download_registration_response);
ASSERT_EQ(download_registration_response.status(),
RegistrationStatus::REGISTRATION_STATUS_ACCEPTED);
FileDownloadResponse download_response;
download_transaction->DownloadFile(&download_response,
download_registration_response);
EXPECT_EQ(download_response.chunk().data(), "this is some data");
// CLEANUP
auto cleanup_transaction(connection->CreateTransaction());
cleanup_transaction->DeleteById(
upload_transaction->GetResultSet().At(0).GetId());
cleanup_transaction->Execute();
}
} // namespace caosdb::transaction
/*
* 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 "caosdb/connection.h" // for Connection, ConnectionManager
#include "caosdb/data_type.h" // for AtomicDataType
#include "caosdb/entity.h" // for Entity, Messages, Message
#include "caosdb/transaction.h" // for Entity, Transaction,...
#include "caosdb/transaction_status.h" // for TransactionStatus, StatusCode
#include "caosdb/value.h" // for value
#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 <iostream>
#include <memory> // for unique_ptr, allocator, __shar...
#include <string> // for string
#include <vector> // for vector
namespace caosdb::entity {
class test_list_properties : public ::testing::Test {
protected:
void SetUp() override {}
void TearDown() override {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("FIND ENTITY WITH id > 99");
query_transaction->Execute();
if (query_transaction->GetResultSet().size() > 0) {
auto delete_transaction(connection->CreateTransaction());
for (const Entity &entity : query_transaction->GetResultSet()) {
delete_transaction->DeleteById(entity.GetId());
}
delete_transaction->Execute();
}
}
};
TEST_F(test_list_properties, insert_list_of_text) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto insertion_prop(connection->CreateTransaction());
Entity abstract_list_property;
abstract_list_property.SetRole(Role::PROPERTY);
abstract_list_property.SetName("TestProp");
abstract_list_property.SetDataType(DataType::ListOf(AtomicDataType::TEXT));
abstract_list_property.SetValue(
std::vector<std::string>{"item1", "item2", "item3"});
insertion_prop->InsertEntity(&abstract_list_property);
std::cout << "response " << insertion_prop->ResponseToString();
insertion_prop->Execute();
EXPECT_TRUE(insertion_prop->GetStatus().IsTerminated());
auto insertion_rt(connection->CreateTransaction());
Property list_property;
list_property.SetId(insertion_prop->GetResultSet().at(0).GetId());
list_property.SetValue(std::vector<std::string>{"item4", "item5", "item6"});
Entity entity;
entity.SetRole(Role::RECORD_TYPE);
entity.SetName("TestRT");
entity.AppendProperty(list_property);
insertion_rt->InsertEntity(&entity);
std::cout << "response " << insertion_rt->ResponseToString();
insertion_rt->Execute();
EXPECT_TRUE(insertion_rt->GetStatus().IsTerminated());
EXPECT_FALSE(insertion_rt->GetStatus().IsError());
// retrieve and check again
auto retrieval(connection->CreateTransaction());
retrieval->RetrieveById(insertion_rt->GetResultSet().at(0).GetId());
retrieval->Execute();
EXPECT_TRUE(retrieval->GetStatus().IsTerminated());
EXPECT_FALSE(retrieval->GetStatus().IsError());
const auto &same_entity = retrieval->GetResultSet().at(0);
const auto &data_type = same_entity.GetProperties().at(0).GetDataType();
const auto &value = same_entity.GetProperties().at(0).GetValue();
EXPECT_TRUE(data_type.IsList());
EXPECT_TRUE(data_type.AsList().IsListOfAtomic());
EXPECT_EQ(data_type.AsList().GetAtomicDataType(), AtomicDataType::TEXT);
EXPECT_TRUE(value.IsList());
EXPECT_EQ(value.AsList().size(), 3);
EXPECT_TRUE(value.AsList().at(1).IsString());
EXPECT_EQ(value.AsList().at(1).AsString(), "item6");
}
} // namespace caosdb::entity
......@@ -57,6 +57,7 @@ protected:
test_upload_file_1 = fs::path("test_upload_file_1_delete_me.dat");
test_download_file_1 = fs::path("test_download_file_1_delete_me.dat");
// fill the file that shall be uploaded
FileWriter writer(test_upload_file_1);
std::string buffer(1024, 'c');
for (int i = 0; i < 8; i++) {
......@@ -65,11 +66,13 @@ protected:
}
void TearDown() override {
// delete files
fs::remove(test_upload_file_1);
fs::remove(test_download_file_1);
// delete all entities
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto query_transaction(connection->CreateTransaction());
query_transaction->Query("FIND ENTITY WITH id > 99");
query_transaction->Execute();
......@@ -83,9 +86,15 @@ protected:
}
};
/*
* Test the retrieval of a non-existing entity
*
* The transaction returns an error code and the entity has the appropriate
* error message
*/
TEST_F(test_transaction, retrieve_non_existing) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto transaction(connection->CreateTransaction());
......@@ -107,9 +116,15 @@ TEST_F(test_transaction, retrieve_non_existing) {
MessageCode::ENTITY_DOES_NOT_EXIST);
}
/*
* Testing the insertion of a basic entity
* Transaction should terminate without errors.
* Returned entity should have an id, no errors and a warning since no property
* is set.
*/
TEST_F(test_transaction, insert_without_delete) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto insert_transaction(connection->CreateTransaction());
......@@ -136,9 +151,15 @@ TEST_F(test_transaction, insert_without_delete) {
MessageCode::ENTITY_HAS_NO_PROPERTIES);
}
/*
* Test deletion of an entity
* Insert an entity first.
*/
TEST_F(test_transaction, insert_delete) {
// same as in insert_without_delete
// until marked END SAME
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto insert_transaction(connection->CreateTransaction());
......@@ -157,12 +178,7 @@ TEST_F(test_transaction, insert_delete) {
const auto &new_entity = insert_result_set.at(0);
EXPECT_FALSE(new_entity.GetId().empty());
EXPECT_FALSE(new_entity.HasErrors());
// Should have a warning since it has no properties
EXPECT_TRUE(new_entity.HasWarnings());
EXPECT_EQ(new_entity.GetWarnings().size(), 1);
EXPECT_EQ(new_entity.GetWarnings().at(0).GetCode(),
MessageCode::ENTITY_HAS_NO_PROPERTIES);
// END SAME
auto delete_transaction(connection->CreateTransaction());
......@@ -181,12 +197,18 @@ TEST_F(test_transaction, insert_delete) {
EXPECT_FALSE(deleted_entity.HasErrors());
}
/*
* Insert a Record with a parent, retrieve and delete it again
*/
TEST_F(test_transaction, insert_delete_with_parent) {
// same as in insert_without_delete
// until marked END SAME
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto insert_transaction(connection->CreateTransaction());
// insert RT
Entity rt;
rt.SetRole(Role::RECORD_TYPE);
rt.SetName("TestRT");
......@@ -201,7 +223,9 @@ TEST_F(test_transaction, insert_delete_with_parent) {
const auto &insert_result_set = insert_transaction->GetResultSet();
const auto &inserted_rt = insert_result_set.at(0);
// END SAME
// create Record with parent
Entity rec;
rec.SetRole(Role::RECORD);
rec.SetName("TestRec");
......@@ -211,6 +235,7 @@ TEST_F(test_transaction, insert_delete_with_parent) {
parent.SetId(inserted_rt.GetId());
rec.AppendParent(parent);
// insert Record
auto rec_transaction(connection->CreateTransaction());
rec_transaction->InsertEntity(&rec);
rec_transaction->ExecuteAsynchronously();
......@@ -226,6 +251,7 @@ TEST_F(test_transaction, insert_delete_with_parent) {
EXPECT_FALSE(inserted_rec.GetId().empty());
// retrieve inserted Record
auto retrieve_transaction(connection->CreateTransaction());
retrieve_transaction->RetrieveById(inserted_rec.GetId());
......@@ -239,11 +265,13 @@ TEST_F(test_transaction, insert_delete_with_parent) {
const auto &retrieve_result_set = retrieve_transaction->GetResultSet();
const auto &retrieved_rec = retrieve_result_set.at(0);
// compare retrieved record with the one that was inserted
EXPECT_EQ(retrieved_rec.GetName(), rec.GetName());
EXPECT_EQ(retrieved_rec.GetParents().size(), 1);
EXPECT_EQ(retrieved_rec.GetParents().at(0).GetId(), inserted_rt.GetId());
EXPECT_EQ(retrieved_rec.GetParents().at(0).GetName(), rt.GetName());
// delete the inserted record again
auto rec_deletion(connection->CreateTransaction());
rec_deletion->DeleteById(retrieved_rec.GetId());
......@@ -254,6 +282,7 @@ TEST_F(test_transaction, insert_delete_with_parent) {
ASSERT_TRUE(rec_delete_status.IsTerminated());
ASSERT_FALSE(rec_delete_status.IsError());
// delete the record type again
auto rt_deletion(connection->CreateTransaction());
rt_deletion->DeleteById(inserted_rt.GetId());
......@@ -265,9 +294,12 @@ TEST_F(test_transaction, insert_delete_with_parent) {
ASSERT_FALSE(rt_delete_status.IsError());
}
/*
* insert a property, record type with that property and a record with it
*/
TEST_F(test_transaction, insert_delete_with_property) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
// Create and insert property
Entity prop_ent;
......@@ -347,7 +379,7 @@ TEST_F(test_transaction, insert_delete_with_property) {
Property prop_rec;
prop_rec.SetName(prop_ent.GetName());
prop_rec.SetId(inserted_prop.GetId());
prop_rec.SetValue("Test");
prop_rec.SetValue(std::string("Test"));
Entity rec;
rec.SetName("TestRec");
......@@ -369,7 +401,7 @@ TEST_F(test_transaction, insert_delete_with_property) {
const auto &inserted_rec = rec_result_set.at(0);
EXPECT_FALSE(inserted_rec.GetId().empty());
// Retrieve the record and verify paretn and property
// Retrieve the record and verify parent and property
auto rec_retrieval(connection->CreateTransaction());
rec_retrieval->RetrieveById(inserted_rec.GetId());
rec_retrieval->ExecuteAsynchronously();
......@@ -398,9 +430,12 @@ TEST_F(test_transaction, insert_delete_with_property) {
EXPECT_EQ(retrieved_prop_rec.GetValue(), prop_rec.GetValue());
}
/*
* test retrieving multiple entities at once
*/
TEST_F(test_transaction, test_multi_retrieve) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto transaction(connection->CreateTransaction());
......@@ -429,9 +464,12 @@ TEST_F(test_transaction, test_multi_retrieve) {
MessageCode::ENTITY_DOES_NOT_EXIST);
}
/*
* test insert, then update and then delete a RecordType
*/
TEST_F(test_transaction, insert_update_delete) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
// INSERT
auto insert_transaction(connection->CreateTransaction());
......@@ -494,9 +532,12 @@ TEST_F(test_transaction, insert_update_delete) {
EXPECT_FALSE(deleted_entity.HasErrors());
}
/*
* test insert a RecordType and then submit a find and a count query
*/
TEST_F(test_transaction, test_query) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
auto insert_transaction(connection->CreateTransaction());
......@@ -536,9 +577,13 @@ TEST_F(test_transaction, test_query) {
EXPECT_EQ(count_query_trans->GetCountResult(), 1);
}
/*
* insert three recordtypes and the submit multiple queries in different
* combinations
*/
TEST_F(test_transaction, test_query_with_retrieve) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
// rt1
Entity rt1;
......@@ -648,9 +693,12 @@ TEST_F(test_transaction, test_query_with_retrieve) {
EXPECT_EQ(count_and_retrieve->GetCountResult(), 3);
}
/*
* create a file object and upload it
*/
TEST_F(test_transaction, test_file_upload) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
Entity file;
file.SetRole(Role::FILE);
......@@ -682,9 +730,12 @@ TEST_F(test_transaction, test_file_upload) {
EXPECT_EQ(count_query->GetCountResult(), 1);
}
/*
* create a file object, upload and then download it
*/
TEST_F(test_transaction, test_file_up_n_download) {
const auto &connection =
caosdb::connection::ConnectionManager::GetDefaultConnection();
caosdb::connection::ConnectionManager::GetDefaultConnection();
Entity file;
file.SetRole(Role::FILE);
......@@ -703,7 +754,7 @@ TEST_F(test_transaction, test_file_up_n_download) {
auto download_transaction(connection->CreateTransaction());
download_transaction->RetrieveAndDownloadFilesById(
inserted_file.GetId(), test_download_file_1.string());
inserted_file.GetId(), test_download_file_1.string());
download_transaction->ExecuteAsynchronously();
ASSERT_EQ(download_transaction->WaitForIt().GetCode(), StatusCode::SUCCESS);
......