From 6cf9f48c2339f85fa233c4e557da08884f666704 Mon Sep 17 00:00:00 2001 From: zhangxiaoyu Date: Tue, 22 Nov 2022 16:52:51 +0800 Subject: [PATCH 46/54] fix storage layer and driver ut failed in container Signed-off-by: zhangxiaoyu --- .../oci/storage/layers/storage_driver_ut.cc | 61 ++++++++++++++++--- .../oci/storage/layers/storage_layers_ut.cc | 54 +++++++++++++++- 2 files changed, 106 insertions(+), 9 deletions(-) diff --git a/test/image/oci/storage/layers/storage_driver_ut.cc b/test/image/oci/storage/layers/storage_driver_ut.cc index 735526f1..650368d8 100644 --- a/test/image/oci/storage/layers/storage_driver_ut.cc +++ b/test/image/oci/storage/layers/storage_driver_ut.cc @@ -58,6 +58,28 @@ std::string GetDirectory() return static_cast(abs_path) + "../../../../../../test/image/oci/storage/layers"; } +bool check_support_overlay(std::string root_dir) +{ + if (!util_support_overlay()) { + std::cout << "Cannot support overlay, skip storage driver ut test." << std::endl; + return false; + } + + char *backing_fs = util_get_fs_name(root_dir.c_str()); + if (backing_fs == NULL) { + std::cout << "Failed to get fs name for " << root_dir << ", skip storage driver ut test." << std::endl; + return false; + } + + if (strcmp(backing_fs, "aufs") == 0 || strcmp(backing_fs, "zfs") == 0 || strcmp(backing_fs, "overlayfs") == 0 || + strcmp(backing_fs, "ecryptfs") == 0) { + std::cout << "Backing fs cannot support overlay, skip storage driver ut test." << std::endl; + return false; + } + + return true; +} + bool dirExists(const char *path) { DIR *dp = nullptr; @@ -99,11 +121,16 @@ protected: void SetUp() override { MockDriverQuota_SetMock(&m_driver_quota_mock); - std::string isulad_dir { "/var/lib/isulad/" }; + std::string isulad_dir { "/tmp/isulad/" }; + mkdir(isulad_dir.c_str(), 0755); std::string root_dir = isulad_dir + "data"; std::string run_dir = isulad_dir + "data/run"; std::string data_dir = GetDirectory() + "/data"; - struct storage_module_init_options *opts; + + support_overlay = check_support_overlay(root_dir); + if (!support_overlay) { + return; + } ASSERT_STRNE(util_clean_path(data_dir.c_str(), data_path, sizeof(data_path)), nullptr); std::string cp_command = "cp -r " + std::string(data_path) + " " + isulad_dir; @@ -117,15 +144,16 @@ protected: + root_dir + "/overlay/9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63/work "; ASSERT_EQ(system(mkdir.c_str()), 0); - opts = (struct storage_module_init_options *)util_common_calloc_s(sizeof(struct storage_module_init_options)); + 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->driver_opts = (char **)util_common_calloc_s(4 * sizeof(char *)); + 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_len = 4; EXPECT_CALL(m_driver_quota_mock, QuotaCtl(_, _, _, _)).WillRepeatedly(Invoke(invokeQuotaCtl)); @@ -141,18 +169,25 @@ protected: void TearDown() override { MockDriverQuota_SetMock(nullptr); - ASSERT_EQ(graphdriver_cleanup(), 0); - std::string rm_command = "rm -rf /var/lib/isulad/data"; + if (support_overlay) { + ASSERT_EQ(graphdriver_cleanup(), 0); + } + std::string rm_command = "rm -rf /tmp/isulad/"; ASSERT_EQ(system(rm_command.c_str()), 0); } NiceMock m_driver_quota_mock; char data_path[PATH_MAX] = { 0x00 }; + bool support_overlay; }; TEST_F(StorageDriverUnitTest, test_graphdriver_layer_exists) { + if (!support_overlay) { + return; + } + std::string id { "9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63" }; std::string incorrectId { "eb29745b8228e1e97c01b1d5c2554a319c00a94d8dd5746a3904222ad65a13f8" }; ASSERT_TRUE(graphdriver_layer_exists(id.c_str())); @@ -161,6 +196,10 @@ TEST_F(StorageDriverUnitTest, test_graphdriver_layer_exists) TEST_F(StorageDriverUnitTest, test_graphdriver_create_rw) { + if (!support_overlay) { + return; + } + std::string id { "eb29745b8228e1e97c01b1d5c2554a319c00a94d8dd5746a3904222ad65a13f8" }; struct driver_create_opts *create_opts; @@ -186,8 +225,12 @@ TEST_F(StorageDriverUnitTest, test_graphdriver_create_rw) TEST_F(StorageDriverUnitTest, test_graphdriver_mount_layer) { + if (!support_overlay) { + return; + } + std::string id { "9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63" }; - std::string merged_dir = "/var/lib/isulad/data/overlay/" + id + "/merged"; + std::string merged_dir = "/tmp/isulad/data/overlay/" + id + "/merged"; struct driver_mount_opts *mount_opts = nullptr; char* mount_dir = nullptr; @@ -219,6 +262,10 @@ TEST_F(StorageDriverUnitTest, test_graphdriver_mount_layer) TEST_F(StorageDriverUnitTest, test_graphdriver_try_repair_lowers) { + if (!support_overlay) { + return; + } + std::string id { "1be74353c3d0fd55fb5638a52953e6f1bc441e5b1710921db9ec2aa202725569" }; ASSERT_EQ(graphdriver_try_repair_lowers(id.c_str(), nullptr), 0); } diff --git a/test/image/oci/storage/layers/storage_layers_ut.cc b/test/image/oci/storage/layers/storage_layers_ut.cc index 87dfb4a1..fca37e83 100644 --- a/test/image/oci/storage/layers/storage_layers_ut.cc +++ b/test/image/oci/storage/layers/storage_layers_ut.cc @@ -59,6 +59,28 @@ std::string GetDirectory() return static_cast(abs_path) + "../../../../../../test/image/oci/storage/layers"; } +bool check_support_overlay(std::string root_dir) +{ + if (!util_support_overlay()) { + std::cout << "Cannot support overlay, skip storage driver ut test." << std::endl; + return false; + } + + char *backing_fs = util_get_fs_name(root_dir.c_str()); + if (backing_fs == NULL) { + std::cout << "Failed to get fs name for " << root_dir << ", skip storage driver ut test." << std::endl; + return false; + } + + if (strcmp(backing_fs, "aufs") == 0 || strcmp(backing_fs, "zfs") == 0 || strcmp(backing_fs, "overlayfs") == 0 || + strcmp(backing_fs, "ecryptfs") == 0) { + std::cout << "Backing fs cannot support overlay, skip storage driver ut test." << std::endl; + return false; + } + + return true; +} + bool dirExists(const char *path) { DIR *dp = nullptr; @@ -159,6 +181,11 @@ protected: std::string run_dir = isulad_dir + "data/run"; std::string data_dir = GetDirectory() + "/data"; + support_overlay = check_support_overlay(root_dir); + if (!support_overlay) { + return; + } + ASSERT_STRNE(util_clean_path(data_dir.c_str(), data_path, sizeof(data_path)), nullptr); std::string cp_command = "cp -r " + std::string(data_path) + " " + isulad_dir; ASSERT_EQ(system(cp_command.c_str()), 0); @@ -186,8 +213,10 @@ protected: { MockDriverQuota_SetMock(nullptr); - layer_store_exit(); - layer_store_cleanup(); + if (support_overlay) { + layer_store_exit(); + layer_store_cleanup(); + } std::string rm_command = "rm -rf /tmp/isulad/"; ASSERT_EQ(system(rm_command.c_str()), 0); @@ -197,10 +226,15 @@ protected: char real_path[PATH_MAX] = { 0x00 }; char real_run_path[PATH_MAX] = { 0x00 }; char data_path[PATH_MAX] = { 0x00 }; + bool support_overlay; }; TEST_F(StorageLayersUnitTest, test_layers_load) { + if (!support_overlay) { + return; + } + struct layer_list *layer_list = (struct layer_list *)util_common_calloc_s(sizeof(struct layer_list)); ASSERT_NE(layer_list, nullptr); @@ -246,6 +280,10 @@ TEST_F(StorageLayersUnitTest, test_layers_load) TEST_F(StorageLayersUnitTest, test_layer_store_exists) { + if (!support_overlay) { + return; + } + std::string id { "7db8f44a0a8e12ea4283e3180e98880007efbd5de2e7c98b67de9cdd4dfffb0b" }; std::string incorrectId { "50551ff67da98ab8540d7132" }; @@ -255,6 +293,10 @@ TEST_F(StorageLayersUnitTest, test_layer_store_exists) TEST_F(StorageLayersUnitTest, test_layer_store_create) { + if (!support_overlay) { + return; + } + struct layer_opts *layer_opt = (struct layer_opts *)util_common_calloc_s(sizeof(struct layer_opts)); layer_opt->parent = strdup("9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63"); layer_opt->writable = true; @@ -278,6 +320,10 @@ TEST_F(StorageLayersUnitTest, test_layer_store_create) TEST_F(StorageLayersUnitTest, test_layer_store_by_compress_digest) { + if (!support_overlay) { + return; + } + std::string compress { "sha256:0e03bdcc26d7a9a57ef3b6f1bf1a210cff6239bff7c8cac72435984032851689" }; std::string id { "9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63" }; struct layer_list *layer_list = (struct layer_list *)util_common_calloc_s(sizeof(struct layer_list)); @@ -294,6 +340,10 @@ TEST_F(StorageLayersUnitTest, test_layer_store_by_compress_digest) TEST_F(StorageLayersUnitTest, test_layer_store_by_uncompress_digest) { + if (!support_overlay) { + return; + } + std::string uncompress { "sha256:9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63" }; std::string id { "9c27e219663c25e0f28493790cc0b88bc973ba3b1686355f221c38a36978ac63" }; struct layer_list *layer_list = (struct layer_list *)util_common_calloc_s(sizeof(struct layer_list)); -- 2.25.1