diff options
Diffstat (limited to '0178-add-storage-driver-ut.patch')
-rw-r--r-- | 0178-add-storage-driver-ut.patch | 353 |
1 files changed, 353 insertions, 0 deletions
diff --git a/0178-add-storage-driver-ut.patch b/0178-add-storage-driver-ut.patch new file mode 100644 index 0000000..a0609d3 --- /dev/null +++ b/0178-add-storage-driver-ut.patch @@ -0,0 +1,353 @@ +From 7321614a1097d4527f5968d1e3c7c1a06f6a9cd4 Mon Sep 17 00:00:00 2001 +From: wujichao <wujichao1@huawei.com> +Date: Thu, 9 Jan 2025 16:15:25 +0800 +Subject: [PATCH 178/198] add storage driver ut + +--- + .../graphdriver/overlay2/driver_overlay2.c | 18 +- + test/image/oci/storage/layers/CMakeLists.txt | 2 + + .../oci/storage/layers/storage_driver_ut.cc | 174 ++++++++++++++++-- + 3 files changed, 169 insertions(+), 25 deletions(-) + +diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c +index cc24909a..2b2e1eb3 100644 +--- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c ++++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c +@@ -26,6 +26,8 @@ + #include <stdio.h> + #include <strings.h> + ++#include <isula_libutils/utils_macro.h> ++ + #include "isula_libutils/log.h" + #ifdef ENABLE_USERNS_REMAP + #include "isulad_config.h" +@@ -828,7 +830,7 @@ out: + return ret; + } + +-static int set_layer_quota(const char *dir, const json_map_string_string *opts, const struct graphdriver *driver) ++STATIC int set_layer_quota(const char *dir, const json_map_string_string *opts, const struct graphdriver *driver) + { + int ret = 0; + size_t i = 0; +@@ -875,7 +877,7 @@ out: + } + + #ifdef ENABLE_REMOTE_LAYER_STORE +-static int do_create_remote_ro(const char *id, const char *parent, const struct graphdriver *driver, ++STATIC int do_create_remote_ro(const char *id, const char *parent, const struct graphdriver *driver, + const struct driver_create_opts *create_opts) + { + int ret = -1; +@@ -1021,7 +1023,7 @@ out: + return ret; + } + +-static int append_default_quota_opts(struct driver_create_opts *ori_opts, uint64_t quota) ++STATIC int append_default_quota_opts(struct driver_create_opts *ori_opts, uint64_t quota) + { + int ret = 0; + int nret = 0; +@@ -1362,7 +1364,7 @@ out: + return ret; + } + +-static char *get_mount_opt_data_with_custom_option(size_t cur_size, const char *cur_opts, ++STATIC char *get_mount_opt_data_with_custom_option(size_t cur_size, const char *cur_opts, + const struct driver_mount_opts *mount_opts) + { + int nret = 0; +@@ -1405,7 +1407,7 @@ out: + return mount_data; + } + +-static char *get_mount_opt_data_with_driver_option(size_t cur_size, const char *cur_opts, const char *mount_opts) ++STATIC char *get_mount_opt_data_with_driver_option(size_t cur_size, const char *cur_opts, const char *mount_opts) + { + int nret = 0; + char *mount_data = NULL; +@@ -1523,7 +1525,7 @@ out: + return mount_data; + } + +-static char *get_rel_mount_opt_data(const char *id, const char *rel_lower_dir, const struct graphdriver *driver, ++STATIC char *get_rel_mount_opt_data(const char *id, const char *rel_lower_dir, const struct graphdriver *driver, + const struct driver_mount_opts *mount_opts) + { + int nret = 0; +@@ -1663,7 +1665,7 @@ out: + return ret; + } + +-static int rel_mount(const char *driver_home, const char *id, const char *mount_data) ++STATIC int rel_mount(const char *driver_home, const char *id, const char *mount_data) + { + int ret = 0; + char *mount_target = NULL; +@@ -2151,7 +2153,7 @@ out: + return ret; + } + +-static int check_lower_valid(const char *driver_home, const char *lower) ++STATIC int check_lower_valid(const char *driver_home, const char *lower) + { + int ret = 0; + char *abs_path = NULL; +diff --git a/test/image/oci/storage/layers/CMakeLists.txt b/test/image/oci/storage/layers/CMakeLists.txt +index c4384e8f..eae67833 100644 +--- a/test/image/oci/storage/layers/CMakeLists.txt ++++ b/test/image/oci/storage/layers/CMakeLists.txt +@@ -5,6 +5,8 @@ add_subdirectory(devmapper) + # storage_driver_ut + SET(DRIVER_EXE storage_driver_ut) + ++add_definitions(-DUNIT_TEST=ON) ++ + add_executable(${DRIVER_EXE} + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/utils/cutils/utils.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/utils/cutils/utils_regex.c +diff --git a/test/image/oci/storage/layers/storage_driver_ut.cc b/test/image/oci/storage/layers/storage_driver_ut.cc +index 943fa073..79b29b71 100644 +--- a/test/image/oci/storage/layers/storage_driver_ut.cc ++++ b/test/image/oci/storage/layers/storage_driver_ut.cc +@@ -40,6 +40,20 @@ using ::testing::Invoke; + using ::testing::_; + using ::testing::FLAGS_gmock_catch_leaked_mocks; + ++extern "C" { ++ int set_layer_quota(const char *dir, const json_map_string_string *opts, const struct graphdriver *driver); ++ int do_create_remote_ro(const char *id, const char *parent, const struct graphdriver *driver, ++ const struct driver_create_opts *create_opts); ++ int append_default_quota_opts(struct driver_create_opts *ori_opts, uint64_t quota); ++ char *get_mount_opt_data_with_custom_option(size_t cur_size, const char *cur_opts, ++ const struct driver_mount_opts *mount_opts); ++ char *get_mount_opt_data_with_driver_option(size_t cur_size, const char *cur_opts, const char *mount_opts); ++ char *get_rel_mount_opt_data(const char *id, const char *rel_lower_dir, const struct graphdriver *driver, ++ const struct driver_mount_opts *mount_opts); ++ int rel_mount(const char *driver_home, const char *id, const char *mount_data); ++ int check_lower_valid(const char *driver_home, const char *lower); ++} ++ + std::string GetDirectory() + { + char abs_path[PATH_MAX] { 0x00 }; +@@ -121,7 +135,7 @@ protected: + void SetUp() override + { + MockDriverQuota_SetMock(&m_driver_quota_mock); +- std::string isulad_dir { "/tmp/isulad/" }; ++ std::string isulad_dir = "/opt/isulad_storege_driver_ut/"; + mkdir(isulad_dir.c_str(), 0755); + std::string root_dir = isulad_dir + "data"; + std::string run_dir = isulad_dir + "data/run"; +@@ -146,15 +160,15 @@ protected: + + struct storage_module_init_options *opts = (struct storage_module_init_options *)util_common_calloc_s(sizeof( + struct storage_module_init_options)); +- opts->storage_root = strdup(root_dir.c_str()); +- opts->storage_run_root = strdup(run_dir.c_str()); +- opts->driver_name = strdup("overlay"); ++ opts->storage_root = util_strdup_s(root_dir.c_str()); ++ opts->storage_run_root = util_strdup_s(run_dir.c_str()); ++ opts->driver_name = util_strdup_s("overlay"); + opts->driver_opts = (char **)util_common_calloc_s(5 * sizeof(char *)); +- opts->driver_opts[0] = strdup("overlay2.basesize=128M"); +- opts->driver_opts[1] = strdup("overlay2.override_kernel_check=true"); +- opts->driver_opts[2] = strdup("overlay2.skip_mount_home=false"); +- opts->driver_opts[3] = strdup("overlay2.mountopt=rw"); +- opts->driver_opts[4] = strdup("overlay2.skip_mount_home=true"); ++ opts->driver_opts[0] = util_strdup_s("overlay2.basesize=128M"); ++ opts->driver_opts[1] = util_strdup_s("overlay2.override_kernel_check=true"); ++ opts->driver_opts[2] = util_strdup_s("overlay2.skip_mount_home=false"); ++ opts->driver_opts[3] = util_strdup_s("overlay2.mountopt=rw"); ++ opts->driver_opts[4] = util_strdup_s("overlay2.skip_mount_home=true"); + opts->driver_opts_len = 4; + + EXPECT_CALL(m_driver_quota_mock, QuotaCtl(_, _, _, _)).WillRepeatedly(Invoke(invokeQuotaCtl)); +@@ -173,7 +187,7 @@ protected: + if (support_overlay) { + ASSERT_EQ(graphdriver_cleanup(), 0); + } +- std::string rm_command = "rm -rf /tmp/isulad/"; ++ std::string rm_command = "rm -rf /opt/isulad_storege_driver_ut/"; + ASSERT_EQ(system(rm_command.c_str()), 0); + } + +@@ -195,6 +209,134 @@ TEST_F(StorageDriverUnitTest, test_graphdriver_layer_exists) + ASSERT_FALSE(graphdriver_layer_exists(incorrectId.c_str())); + } + ++TEST_F(StorageDriverUnitTest, test_set_layer_quota) ++{ ++ if (!support_overlay) { ++ return; ++ } ++ ++ struct driver_create_opts *create_opts = (struct driver_create_opts *)util_common_calloc_s(sizeof(struct driver_create_opts)); ++ ASSERT_NE(create_opts, nullptr); ++ create_opts->storage_opt = (json_map_string_string *)util_common_calloc_s(sizeof(json_map_string_string)); ++ ASSERT_NE(create_opts->storage_opt, nullptr); ++ create_opts->storage_opt->keys = (char **)util_common_calloc_s(sizeof(char *)); ++ create_opts->storage_opt->values = (char **)util_common_calloc_s(sizeof(char *)); ++ create_opts->storage_opt->keys[0] = util_strdup_s("size"); ++ create_opts->storage_opt->values[0] = util_strdup_s(""); ++ create_opts->storage_opt->len = 1; ++ ASSERT_EQ(set_layer_quota("/opt/isulad_storege_driver_ut/", create_opts->storage_opt, nullptr), -1); ++ create_opts->storage_opt->keys[0] = util_strdup_s("notsize"); ++ ASSERT_EQ(set_layer_quota("/opt/isulad_storege_driver_ut/", create_opts->storage_opt, nullptr), -1); ++ free_driver_create_opts(create_opts); ++} ++ ++#ifdef ENABLE_REMOTE_LAYER_STORE ++TEST_F(StorageDriverUnitTest, test_do_create_remote_ro) ++{ ++ if (!support_overlay) { ++ return; ++ } ++ ++ struct graphdriver *graph_driver = (struct graphdriver *)util_common_calloc_s(sizeof(struct graphdriver)); ++ ASSERT_NE(graph_driver, nullptr); ++ graph_driver->home = nullptr; ++ ASSERT_EQ(do_create_remote_ro(nullptr, nullptr, graph_driver, nullptr), -1); ++ graph_driver->home = "driver_home"; ++ ASSERT_EQ(do_create_remote_ro(nullptr, nullptr, graph_driver, nullptr), -1); ++ free(graph_driver); ++} ++#endif ++ ++TEST_F(StorageDriverUnitTest, test_append_default_quota_opts) ++{ ++ if (!support_overlay) { ++ return; ++ } ++ ++ struct driver_create_opts *create_opts = (struct driver_create_opts *)util_common_calloc_s(sizeof(struct driver_create_opts)); ++ ASSERT_NE(create_opts, nullptr); ++ create_opts->storage_opt = (json_map_string_string *)util_common_calloc_s(sizeof(json_map_string_string)); ++ ASSERT_NE(create_opts->storage_opt, nullptr); ++ create_opts->storage_opt->keys = (char **)util_common_calloc_s(sizeof(char *)); ++ create_opts->storage_opt->values = (char **)util_common_calloc_s(sizeof(char *)); ++ create_opts->storage_opt->keys[0] = util_strdup_s("size"); ++ create_opts->storage_opt->values[0] = util_strdup_s("128M"); ++ create_opts->storage_opt->len = 1; ++ ASSERT_EQ(append_default_quota_opts(nullptr, 0), 0); ++ ASSERT_EQ(append_default_quota_opts(create_opts, 134217728), 0); // 134217728 = 128*1024*1024 ++ free_driver_create_opts(create_opts); ++} ++ ++TEST_F(StorageDriverUnitTest, test_get_mount_opt_data_with_custom_option) ++{ ++ if (!support_overlay) { ++ return; ++ } ++ ++ struct driver_mount_opts * mount_opts = (struct driver_mount_opts *)util_common_calloc_s(sizeof(struct driver_mount_opts)); ++ ASSERT_NE(mount_opts, nullptr); ++ mount_opts->options = (char **)util_common_calloc_s(1 * sizeof(char *)); ++ mount_opts->options[0] = util_strdup_s("ro"); ++ mount_opts->options_len = 1; ++ size_t cur_size = 0; ++ const char *cur_opts = "cur_opts"; ++ ASSERT_EQ(get_mount_opt_data_with_custom_option(cur_size, cur_opts, mount_opts), nullptr); ++ free_driver_mount_opts(mount_opts); ++} ++ ++TEST_F(StorageDriverUnitTest, test_get_mount_opt_data_with_driver_option) ++{ ++ if (!support_overlay) { ++ return; ++ } ++ struct driver_mount_opts * mount_opts = (struct driver_mount_opts *)util_common_calloc_s(sizeof(struct driver_mount_opts)); ++ ASSERT_NE(mount_opts, nullptr); ++ mount_opts->options = (char **)util_common_calloc_s(1 * sizeof(char *)); ++ mount_opts->options[0] = util_strdup_s("ro"); ++ size_t cur_size = 0; ++ const char *cur_opts = "cur_opts"; ++ ASSERT_EQ(get_mount_opt_data_with_driver_option(cur_size, cur_opts, mount_opts->options[0]), nullptr); ++ free_driver_mount_opts(mount_opts); ++} ++ ++TEST_F(StorageDriverUnitTest, test_get_rel_mount_opt_data) ++{ ++ if (!support_overlay) { ++ return; ++ } ++ std::string id { "9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63" }; ++ struct driver_mount_opts * mount_opts = (struct driver_mount_opts *)util_common_calloc_s(sizeof(struct driver_mount_opts)); ++ ASSERT_NE(mount_opts, nullptr); ++ mount_opts->options = (char **)util_common_calloc_s(1 * sizeof(char *)); ++ mount_opts->options[0] = util_strdup_s("ro"); ++ mount_opts->options_len = 1; ++ const char *rel_lower_dir = "rel_lower_dir"; ++ std::string res { "ro,lowerdir=rel_lower_dir,upperdir=9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63/diff,workdir=9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63/work" }; ++ ASSERT_EQ(get_rel_mount_opt_data(id.c_str(), rel_lower_dir, nullptr, mount_opts), res); ++ free_driver_mount_opts(mount_opts); ++} ++ ++TEST_F(StorageDriverUnitTest, test_rel_mount) ++{ ++ if (!support_overlay) { ++ return; ++ } ++ const char *mount_data = "mount_data"; ++ const char *driver_home = nullptr; ++ std::string id { "9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63" }; ++ ASSERT_EQ(rel_mount(driver_home, id.c_str(), mount_data),-1); ++} ++ ++TEST_F(StorageDriverUnitTest, test_check_lower_valid) ++{ ++ if (!support_overlay) { ++ return; ++ } ++ const char *lower = "lower"; ++ const char *driver_home = nullptr; ++ ASSERT_EQ(check_lower_valid(driver_home, lower), -1); ++} ++ + TEST_F(StorageDriverUnitTest, test_graphdriver_create_rw) + { + if (!support_overlay) { +@@ -202,17 +344,15 @@ TEST_F(StorageDriverUnitTest, test_graphdriver_create_rw) + } + + std::string id { "eb29745b8228e1e97c01b1d5c2554a319c00a94d8dd5746a3904222ad65a13f8" }; +- struct driver_create_opts *create_opts; +- +- create_opts = (struct driver_create_opts *)util_common_calloc_s(sizeof(struct driver_create_opts)); ++ struct driver_create_opts *create_opts = (struct driver_create_opts *)util_common_calloc_s(sizeof(struct driver_create_opts)); + ASSERT_NE(create_opts, nullptr); + + create_opts->storage_opt = (json_map_string_string *)util_common_calloc_s(sizeof(json_map_string_string)); + ASSERT_NE(create_opts->storage_opt, nullptr); + create_opts->storage_opt->keys = (char **)util_common_calloc_s(sizeof(char *)); + create_opts->storage_opt->values = (char **)util_common_calloc_s(sizeof(char *)); +- create_opts->storage_opt->keys[0] = strdup("size"); +- create_opts->storage_opt->values[0] = strdup("128M"); ++ create_opts->storage_opt->keys[0] = util_strdup_s("size"); ++ create_opts->storage_opt->values[0] = util_strdup_s("128M"); + create_opts->storage_opt->len = 1; + + EXPECT_CALL(m_driver_quota_mock, IOCtl(_, _)).WillRepeatedly(Invoke(invokeIOCtl)); +@@ -231,7 +371,7 @@ TEST_F(StorageDriverUnitTest, test_graphdriver_mount_layer) + } + + std::string id { "9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63" }; +- std::string merged_dir = "/tmp/isulad/data/overlay/" + id + "/merged"; ++ std::string merged_dir = "/opt/isulad_storege_driver_ut/data/overlay/" + id + "/merged"; + struct driver_mount_opts *mount_opts = nullptr; + char* mount_dir = nullptr; + +@@ -248,7 +388,7 @@ TEST_F(StorageDriverUnitTest, test_graphdriver_mount_layer) + mount_opts = (struct driver_mount_opts *)util_common_calloc_s(sizeof(struct driver_mount_opts)); + ASSERT_NE(mount_opts, nullptr); + mount_opts->options = (char **)util_common_calloc_s(1 * sizeof(char *)); +- mount_opts->options[0] = strdup("ro"); ++ mount_opts->options[0] = util_strdup_s("ro"); + mount_opts->options_len = 1; + + FLAGS_gmock_catch_leaked_mocks = false; +-- +2.34.1 + |