diff --git a/test/test_file_transmission.cpp b/test/test_file_transmission.cpp index a54fbc7c36a38c31635d45fb6b89fdbb43974dae..7c6a72d0b4d52ecd76d01d253e377473ce7954cf 100644 --- a/test/test_file_transmission.cpp +++ b/test/test_file_transmission.cpp @@ -18,17 +18,23 @@ * along with this program. If not, see <https://www.gnu.org/licenses/>. * */ -#include "caosdb/connection.h" // for Connection, ConnectionManager +#include "caosdb/connection.h" // for Connection, ConnectionManager +#include "caosdb/entity.h" #include "caosdb/entity/v1alpha1/main.pb.h" -#include "caosdb/transaction.h" // for Entity, Transaction, UniqueRe... +#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; class test_file_transmission : public ::testing::Test { protected: @@ -55,4 +61,98 @@ TEST_F(test_file_transmission, register_file_upload) { 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(®istration_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(®istration_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