This is an automated email from the ASF dual-hosted git repository.

wangdan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git


The following commit(s) were added to refs/heads/master by this push:
     new c4470fa4b refactor(nfs_test): use rocksdb API to read/write file 
(#1621)
c4470fa4b is described below

commit c4470fa4b5631fda4ed9a12ef63449d5fd6de9bc
Author: Yingchun Lai <[email protected]>
AuthorDate: Tue Sep 26 04:43:11 2023 -0500

    refactor(nfs_test): use rocksdb API to read/write file (#1621)
    
    https://github.com/apache/incubator-pegasus/issues/887
    
    There is no functional changes, but only refactor the nfs unit test.
---
 src/nfs/test/main.cpp | 159 ++++++++++++++++++++++++++++++++------------------
 1 file changed, 103 insertions(+), 56 deletions(-)

diff --git a/src/nfs/test/main.cpp b/src/nfs/test/main.cpp
index 445c4732f..078812992 100644
--- a/src/nfs/test/main.cpp
+++ b/src/nfs/test/main.cpp
@@ -24,13 +24,16 @@
  * THE SOFTWARE.
  */
 
+// IWYU pragma: no_include <gtest/gtest-param-test.h>
 // IWYU pragma: no_include <gtest/gtest-message.h>
 // IWYU pragma: no_include <gtest/gtest-test-part.h>
 #include <gtest/gtest.h>
 #include <stddef.h>
-#include <stdint.h>
+#include <algorithm>
+#include <cstdint>
 #include <memory>
 #include <string>
+#include <utility>
 #include <vector>
 
 #include "aio/aio_task.h"
@@ -40,7 +43,9 @@
 #include "runtime/rpc/rpc_address.h"
 #include "runtime/task/task_code.h"
 #include "runtime/tool_api.h"
+#include "test_util/test_util.h"
 #include "utils/autoref_ptr.h"
+#include "utils/env.h"
 #include "utils/error_code.h"
 #include "utils/filesystem.h"
 #include "utils/threadpool_code.h"
@@ -54,36 +59,55 @@ struct aio_result
     size_t sz;
 };
 
-TEST(nfs, basic)
+class nfs_test : public pegasus::encrypt_data_test_base
 {
-    std::unique_ptr<dsn::nfs_node> nfs(dsn::nfs_node::create());
+};
+
+// TODO(yingchun): ENCRYPTION: add enable encryption test.
+INSTANTIATE_TEST_CASE_P(, nfs_test, ::testing::Values(false));
+
+TEST_P(nfs_test, basic)
+{
+    auto nfs = dsn::nfs_node::create();
     nfs->start();
     nfs->register_async_rpc_handler_for_test();
     dsn::gpid fake_pid = gpid(1, 0);
 
-    utils::filesystem::remove_path("nfs_test_dir");
-    utils::filesystem::remove_path("nfs_test_dir_copy");
-
-    ASSERT_FALSE(utils::filesystem::directory_exists("nfs_test_dir"));
-    ASSERT_FALSE(utils::filesystem::directory_exists("nfs_test_dir_copy"));
-
-    ASSERT_TRUE(utils::filesystem::create_directory("nfs_test_dir"));
-    ASSERT_TRUE(utils::filesystem::directory_exists("nfs_test_dir"));
+    // Prepare the destination directory.
+    const std::string kDstDir = "nfs_test_dir";
+    ASSERT_TRUE(utils::filesystem::remove_path(kDstDir));
+    ASSERT_FALSE(utils::filesystem::directory_exists(kDstDir));
+    ASSERT_TRUE(utils::filesystem::create_directory(kDstDir));
+    ASSERT_TRUE(utils::filesystem::directory_exists(kDstDir));
+
+    // Prepare the source files information.
+    std::vector<std::string> kSrcFilenames({"nfs_test_file1", 
"nfs_test_file2"});
+    std::vector<int64_t> src_file_sizes;
+    std::vector<std::string> src_file_md5s;
+    for (const auto &src_filename : kSrcFilenames) {
+        int64_t file_size;
+        ASSERT_TRUE(utils::filesystem::file_size(
+            src_filename, dsn::utils::FileDataType::kSensitive, file_size));
+        src_file_sizes.push_back(file_size);
+        std::string src_file_md5;
+        ASSERT_EQ(ERR_OK, utils::filesystem::md5sum(src_filename, 
src_file_md5));
+        src_file_md5s.emplace_back(std::move(src_file_md5));
+    }
 
+    // copy files to the destination directory.
     {
-        // copy nfs_test_file1 nfs_test_file2 nfs_test_dir
-        
ASSERT_FALSE(utils::filesystem::file_exists("nfs_test_dir/nfs_test_file1"));
-        
ASSERT_FALSE(utils::filesystem::file_exists("nfs_test_dir/nfs_test_file2"));
-
-        std::vector<std::string> files{"nfs_test_file1", "nfs_test_file2"};
+        // The destination directory is empty before copying.
+        std::vector<std::string> dst_filenames;
+        ASSERT_TRUE(utils::filesystem::get_subfiles(kDstDir, dst_filenames, 
true));
+        ASSERT_TRUE(dst_filenames.empty());
 
         aio_result r;
         dsn::aio_task_ptr t = 
nfs->copy_remote_files(dsn::rpc_address("localhost", 20101),
                                                      "default",
                                                      ".",
-                                                     files,
+                                                     kSrcFilenames,
                                                      "default",
-                                                     "nfs_test_dir",
+                                                     kDstDir,
                                                      fake_pid,
                                                      false,
                                                      false,
@@ -100,32 +124,32 @@ TEST(nfs, basic)
         ASSERT_EQ(ERR_OK, r.err);
         ASSERT_EQ(r.sz, t->get_transferred_size());
 
-        
ASSERT_TRUE(utils::filesystem::file_exists("nfs_test_dir/nfs_test_file1"));
-        
ASSERT_TRUE(utils::filesystem::file_exists("nfs_test_dir/nfs_test_file2"));
-
-        int64_t sz1, sz2;
-        ASSERT_TRUE(utils::filesystem::file_size("nfs_test_file1", sz1));
-        
ASSERT_TRUE(utils::filesystem::file_size("nfs_test_dir/nfs_test_file1", sz2));
-        ASSERT_EQ(sz1, sz2);
-        ASSERT_TRUE(utils::filesystem::file_size("nfs_test_file2", sz1));
-        
ASSERT_TRUE(utils::filesystem::file_size("nfs_test_dir/nfs_test_file2", sz2));
-        ASSERT_EQ(sz1, sz2);
+        // The destination files equal to the source files after copying.
+        ASSERT_TRUE(utils::filesystem::get_subfiles(kDstDir, dst_filenames, 
true));
+        std::sort(dst_filenames.begin(), dst_filenames.end());
+        ASSERT_EQ(kSrcFilenames.size(), dst_filenames.size());
+        int i = 0;
+        for (const auto &dst_filename : dst_filenames) {
+            int64_t file_size;
+            ASSERT_TRUE(utils::filesystem::file_size(
+                dst_filename, dsn::utils::FileDataType::kSensitive, 
file_size));
+            ASSERT_EQ(src_file_sizes[i], file_size);
+            std::string file_md5;
+            ASSERT_EQ(ERR_OK, utils::filesystem::md5sum(dst_filename, 
file_md5));
+            ASSERT_EQ(src_file_md5s[i], file_md5);
+            i++;
+        }
     }
 
+    // copy files to the destination directory, files will be overwritten.
     {
-        // copy files again, overwrite
-        
ASSERT_TRUE(utils::filesystem::file_exists("nfs_test_dir/nfs_test_file1"));
-        
ASSERT_TRUE(utils::filesystem::file_exists("nfs_test_dir/nfs_test_file2"));
-
-        std::vector<std::string> files{"nfs_test_file1", "nfs_test_file2"};
-
         aio_result r;
         dsn::aio_task_ptr t = 
nfs->copy_remote_files(dsn::rpc_address("localhost", 20101),
                                                      "default",
                                                      ".",
-                                                     files,
+                                                     kSrcFilenames,
                                                      "default",
-                                                     "nfs_test_dir",
+                                                     kDstDir,
                                                      fake_pid,
                                                      true,
                                                      false,
@@ -141,22 +165,42 @@ TEST(nfs, basic)
         ASSERT_EQ(r.err, t->error());
         ASSERT_EQ(ERR_OK, r.err);
         ASSERT_EQ(r.sz, t->get_transferred_size());
+
         // this is only true for simulator
         if (dsn::tools::get_current_tool()->name() == "simulator") {
             ASSERT_EQ(1, t->get_count());
         }
+
+        // The destination files equal to the source files after overwrite 
copying.
+        std::vector<std::string> dst_filenames;
+        ASSERT_TRUE(utils::filesystem::get_subfiles(kDstDir, dst_filenames, 
true));
+        std::sort(dst_filenames.begin(), dst_filenames.end());
+        ASSERT_EQ(kSrcFilenames.size(), dst_filenames.size());
+        int i = 0;
+        for (const auto &dst_filename : dst_filenames) {
+            int64_t file_size;
+            ASSERT_TRUE(utils::filesystem::file_size(
+                dst_filename, dsn::utils::FileDataType::kSensitive, 
file_size));
+            ASSERT_EQ(src_file_sizes[i], file_size);
+            std::string file_md5;
+            ASSERT_EQ(ERR_OK, utils::filesystem::md5sum(dst_filename, 
file_md5));
+            ASSERT_EQ(src_file_md5s[i], file_md5);
+            i++;
+        }
     }
 
+    // copy files from kDstDir to kNewDstDir.
     {
-        // copy nfs_test_dir nfs_test_dir_copy
-        ASSERT_FALSE(utils::filesystem::directory_exists("nfs_test_dir_copy"));
+        const std::string kNewDstDir = "nfs_test_dir_copy";
+        ASSERT_TRUE(utils::filesystem::remove_path(kNewDstDir));
+        ASSERT_FALSE(utils::filesystem::directory_exists(kNewDstDir));
 
         aio_result r;
         dsn::aio_task_ptr t = 
nfs->copy_remote_directory(dsn::rpc_address("localhost", 20101),
                                                          "default",
-                                                         "nfs_test_dir",
+                                                         kDstDir,
                                                          "default",
-                                                         "nfs_test_dir_copy",
+                                                         kNewDstDir,
                                                          fake_pid,
                                                          false,
                                                          false,
@@ -173,22 +217,25 @@ TEST(nfs, basic)
         ASSERT_EQ(ERR_OK, r.err);
         ASSERT_EQ(r.sz, t->get_transferred_size());
 
-        ASSERT_TRUE(utils::filesystem::directory_exists("nfs_test_dir_copy"));
-        
ASSERT_TRUE(utils::filesystem::file_exists("nfs_test_dir_copy/nfs_test_file1"));
-        
ASSERT_TRUE(utils::filesystem::file_exists("nfs_test_dir_copy/nfs_test_file2"));
-
-        std::vector<std::string> sub1, sub2;
-        ASSERT_TRUE(utils::filesystem::get_subfiles("nfs_test_dir", sub1, 
true));
-        ASSERT_TRUE(utils::filesystem::get_subfiles("nfs_test_dir_copy", sub2, 
true));
-        ASSERT_EQ(sub1.size(), sub2.size());
-
-        int64_t sz1, sz2;
-        
ASSERT_TRUE(utils::filesystem::file_size("nfs_test_dir/nfs_test_file1", sz1));
-        
ASSERT_TRUE(utils::filesystem::file_size("nfs_test_dir_copy/nfs_test_file1", 
sz2));
-        ASSERT_EQ(sz1, sz2);
-        
ASSERT_TRUE(utils::filesystem::file_size("nfs_test_dir/nfs_test_file2", sz1));
-        
ASSERT_TRUE(utils::filesystem::file_size("nfs_test_dir_copy/nfs_test_file2", 
sz2));
-        ASSERT_EQ(sz1, sz2);
+        // The kNewDstDir will be created automatically.
+        ASSERT_TRUE(utils::filesystem::directory_exists(kNewDstDir));
+
+        std::vector<std::string> new_dst_filenames;
+        ASSERT_TRUE(utils::filesystem::get_subfiles(kNewDstDir, 
new_dst_filenames, true));
+        std::sort(new_dst_filenames.begin(), new_dst_filenames.end());
+        ASSERT_EQ(kSrcFilenames.size(), new_dst_filenames.size());
+
+        int i = 0;
+        for (const auto &new_dst_filename : new_dst_filenames) {
+            int64_t file_size;
+            ASSERT_TRUE(utils::filesystem::file_size(
+                new_dst_filename, dsn::utils::FileDataType::kSensitive, 
file_size));
+            ASSERT_EQ(src_file_sizes[i], file_size);
+            std::string file_md5;
+            ASSERT_EQ(ERR_OK, utils::filesystem::md5sum(new_dst_filename, 
file_md5));
+            ASSERT_EQ(src_file_md5s[i], file_md5);
+            i++;
+        }
     }
 
     nfs->stop();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to