From 613b70653a4fa620bfbca055e6d17c8d5479d03f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <henrik@trineo.org>
Date: Mon, 23 Aug 2021 18:51:19 +0200
Subject: [PATCH] TST: add int test for file up and download

---
 test/test_ccaosdb.cpp | 88 +++++++++++++++++++++++++++++++++++++++----
 1 file changed, 81 insertions(+), 7 deletions(-)

diff --git a/test/test_ccaosdb.cpp b/test/test_ccaosdb.cpp
index 4a3c55e..58ddad8 100644
--- a/test/test_ccaosdb.cpp
+++ b/test/test_ccaosdb.cpp
@@ -18,24 +18,46 @@
  * 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/message_code.h"   // for MessageCode
-#include "caosdb/status_code.h"    // for StatusCode
-#include "ccaosdb.h"               // for caosdb_info_version_info, caosdb_...
-#include <cstring>                 // for strcmp
-#include <gtest/gtest-message.h>   // for Message
-#include <gtest/gtest-test-part.h> // for TestPartResult
+#include "caosdb/file_transmission/file_reader.h" // for FileReader
+#include "caosdb/file_transmission/file_writer.h" // for FileWriter
+#include "caosdb/message_code.h"                  // for MessageCode
+#include "caosdb/status_code.h"                   // for StatusCode
+#include "ccaosdb.h"                 // for caosdb_info_version_info, caosdb_...
+#include <boost/filesystem/path.hpp> // for path
+#include <boost/filesystem/path_traits.hpp> // for filesystem
+#include <cstring>                          // for strcmp
+#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 <iostream>
 #include <memory> // for allocator, unique_ptr
 
+namespace fs = boost::filesystem;
 class test_ccaosdb : public ::testing::Test {
 protected:
-  void SetUp() override {}
+  fs::path test_upload_file_1;
+  fs::path test_download_file_1;
+
+  void SetUp() override {
+    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
+    caosdb::transaction::FileWriter writer(test_upload_file_1);
+    std::string buffer(1024, 'c');
+    for (int i = 0; i < 8; i++) {
+      writer.write(buffer);
+    }
+  }
 
   /**
    * Delete everything with id>99, C style
    */
   void TearDown() override {
+    // delete files
+    fs::remove(test_upload_file_1);
+    fs::remove(test_download_file_1);
+
     caosdb_connection_connection connection;
     caosdb_connection_connection_manager_get_default_connection(&connection);
 
@@ -581,3 +603,55 @@ TEST_F(test_ccaosdb, test_insert_with_prop_and_parent) {
   caosdb_transaction_delete_transaction(&prop_insertion);
   caosdb_entity_delete_entity(&original_prop);
 }
+
+TEST_F(test_ccaosdb, test_up_n_download_file) {
+
+  caosdb_connection_connection connection;
+  caosdb_connection_connection_manager_get_default_connection(&connection);
+
+  caosdb_entity_entity original_entity;
+  caosdb_entity_create_entity(&original_entity);
+  caosdb_entity_entity_set_role(&original_entity, "FILE");
+  caosdb_entity_entity_set_local_path(&original_entity,
+                                      test_upload_file_1.c_str());
+  caosdb_entity_entity_set_file_path(&original_entity, "/some/file");
+
+  caosdb_transaction_transaction insert_transaction;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &insert_transaction);
+  caosdb_transaction_transaction_insert_entity(&insert_transaction,
+                                               &original_entity);
+  int return_code(caosdb_transaction_transaction_execute(&insert_transaction));
+  EXPECT_EQ(return_code, 0);
+
+  caosdb_transaction_result_set rec_results;
+  caosdb_transaction_transaction_get_result_set(&insert_transaction,
+                                                &rec_results);
+  caosdb_entity_entity inserted_rec;
+  caosdb_transaction_result_set_at(&rec_results, &inserted_rec, 0);
+  char *rec_id = nullptr; // NOLINT
+  caosdb_entity_entity_get_id(&inserted_rec, &rec_id);
+
+  caosdb_entity_entity download_entity;
+  caosdb_entity_create_entity(&download_entity);
+  caosdb_entity_entity_set_role(&download_entity, "FILE");
+  caosdb_entity_entity_set_local_path(&download_entity, "lol");
+  caosdb_entity_entity_set_file_path(&download_entity, "/some/file");
+
+  caosdb_transaction_transaction retrieve_transaction_1;
+  caosdb_connection_connection_create_transaction(&connection,
+                                                  &retrieve_transaction_1);
+  EXPECT_EQ(return_code, 0);
+  // return_code = caosdb_transaction_transaction_retrieve_by_id(
+  //   &retrieve_transaction_1, rec_id);
+  return_code = caosdb_transaction_transaction_retrieve_and_download_file_by_id(
+      &retrieve_transaction_1, rec_id, test_download_file_1.c_str());
+  EXPECT_EQ(return_code, caosdb::StatusCode::GO_ON);
+  return_code = caosdb_transaction_transaction_execute(&retrieve_transaction_1);
+  EXPECT_EQ(return_code, 0);
+
+  caosdb_transaction_result_set result_set;
+  return_code = caosdb_transaction_transaction_get_result_set(
+      &retrieve_transaction_1, &result_set);
+  EXPECT_EQ(return_code, 0);
+}
-- 
GitLab