!690 [sync] PR-689: remove extra %s in CreateContainerLogSymlink and allow env variable has an empty value
From: @openeuler-sync-bot Reviewed-by: @taotao-sauce Signed-off-by: @taotao-sauce
This commit is contained in:
commit
8e148bc1fa
741
0076-cdi-add-UT.patch
Normal file
741
0076-cdi-add-UT.patch
Normal file
@ -0,0 +1,741 @@
|
||||
From 0cd088174c94c56ee86506dab9a6a33f6e8fdaa4 Mon Sep 17 00:00:00 2001
|
||||
From: liuxu <liuxu156@huawei.com>
|
||||
Date: Thu, 25 Apr 2024 10:52:20 +0800
|
||||
Subject: [PATCH 76/78] cdi:add UT
|
||||
|
||||
Signed-off-by: liuxu <liuxu156@huawei.com>
|
||||
---
|
||||
CI/make-and-install.sh | 4 +-
|
||||
test/cutils/CMakeLists.txt | 1 +
|
||||
test/cutils/utils_array/utils_array_ut.cc | 128 ++++++++++
|
||||
test/cutils/utils_utils/utils_utils_ut.cc | 12 +
|
||||
test/cutils/utils_version/CMakeLists.txt | 17 ++
|
||||
test/cutils/utils_version/utils_version_ut.cc | 71 ++++++
|
||||
.../image/oci/oci_config_merge/CMakeLists.txt | 1 +
|
||||
test/mocks/cdi_operate_api_mock.cc | 58 +++++
|
||||
test/mocks/cdi_operate_api_mock.h | 35 +++
|
||||
test/sandbox/controller/shim/CMakeLists.txt | 1 +
|
||||
test/specs/specs/CMakeLists.txt | 1 +
|
||||
test/specs/specs/specs_ut.cc | 241 ++++++++++++++++++
|
||||
test/specs/specs_extend/CMakeLists.txt | 1 +
|
||||
13 files changed, 569 insertions(+), 2 deletions(-)
|
||||
create mode 100644 test/cutils/utils_version/CMakeLists.txt
|
||||
create mode 100644 test/cutils/utils_version/utils_version_ut.cc
|
||||
create mode 100644 test/mocks/cdi_operate_api_mock.cc
|
||||
create mode 100644 test/mocks/cdi_operate_api_mock.h
|
||||
|
||||
diff --git a/CI/make-and-install.sh b/CI/make-and-install.sh
|
||||
index 9bb984cd..9d4c5533 100755
|
||||
--- a/CI/make-and-install.sh
|
||||
+++ b/CI/make-and-install.sh
|
||||
@@ -72,7 +72,7 @@ cd $ISULAD_COPY_PATH
|
||||
sed -i 's/fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO/fd == 0 || fd == 1 || fd == 2 || fd >= 1000/g' ./src/utils/cutils/utils.c
|
||||
rm -rf build
|
||||
mkdir build && cd build
|
||||
-cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_UT=ON -DENABLE_CRI_API_V1=ON -DENABLE_SHIM_V2=ON -DENABLE_METRICS=ON ..
|
||||
+cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_UT=ON -DENABLE_CRI_API_V1=ON -DENABLE_CDI=ON -DENABLE_SHIM_V2=ON -DENABLE_METRICS=ON ..
|
||||
make -j $(nproc)
|
||||
make install
|
||||
ctest -E "driver_devmapper_ut" -T memcheck --output-on-failure
|
||||
@@ -103,7 +103,7 @@ rm -rf build
|
||||
mkdir build
|
||||
cd build
|
||||
if [[ ${enable_gcov} -ne 0 ]]; then
|
||||
- cmake -DLIB_INSTALL_DIR=${builddir}/lib -DCMAKE_INSTALL_PREFIX=${builddir} -DCMAKE_INSTALL_SYSCONFDIR=${builddir}/etc -DCMAKE_BUILD_TYPE=Debug -DGCOV=ON -DENABLE_EMBEDDED=ON -DENABLE_COVERAGE=ON -DENABLE_CRI_API_V1=ON -DENABLE_UT=ON -DENABLE_METRICS=ON -DENABLE_REMOTE_LAYER_STORE=ON -DENABLE_GRPC_REMOTE_CONNECT=ON ..
|
||||
+ cmake -DLIB_INSTALL_DIR=${builddir}/lib -DCMAKE_INSTALL_PREFIX=${builddir} -DCMAKE_INSTALL_SYSCONFDIR=${builddir}/etc -DCMAKE_BUILD_TYPE=Debug -DGCOV=ON -DENABLE_EMBEDDED=ON -DENABLE_COVERAGE=ON -DENABLE_CRI_API_V1=ON -DENABLE_CDI=ON -DENABLE_UT=ON -DENABLE_METRICS=ON -DENABLE_REMOTE_LAYER_STORE=ON -DENABLE_GRPC_REMOTE_CONNECT=ON ..
|
||||
else
|
||||
cmake -DLIB_INSTALL_DIR=${builddir}/lib -DCMAKE_INSTALL_PREFIX=${builddir} -DCMAKE_INSTALL_SYSCONFDIR=${builddir}/etc -DENABLE_EMBEDDED=ON -DENABLE_METRICS=ON -DENABLE_REMOTE_LAYER_STORE=ON -DENABLE_CRI_API_V1=ON -DENABLE_GRPC_REMOTE_CONNECT=ON ..
|
||||
fi
|
||||
diff --git a/test/cutils/CMakeLists.txt b/test/cutils/CMakeLists.txt
|
||||
index 9e681cc9..bd9def02 100644
|
||||
--- a/test/cutils/CMakeLists.txt
|
||||
+++ b/test/cutils/CMakeLists.txt
|
||||
@@ -34,4 +34,5 @@ add_subdirectory(utils_utils)
|
||||
add_subdirectory(utils_verify)
|
||||
add_subdirectory(utils_network)
|
||||
add_subdirectory(utils_transform)
|
||||
+add_subdirectory(utils_version)
|
||||
add_subdirectory(map)
|
||||
diff --git a/test/cutils/utils_array/utils_array_ut.cc b/test/cutils/utils_array/utils_array_ut.cc
|
||||
index 7bd13c25..6c6e76fa 100644
|
||||
--- a/test/cutils/utils_array/utils_array_ut.cc
|
||||
+++ b/test/cutils/utils_array/utils_array_ut.cc
|
||||
@@ -50,6 +50,33 @@ TEST(utils_array, test_util_free_array)
|
||||
util_free_array(array);
|
||||
}
|
||||
|
||||
+TEST(utils_array, test_util_copy_array_by_len)
|
||||
+{
|
||||
+ char **array = nullptr;
|
||||
+ char **array_copy = nullptr;
|
||||
+ size_t len = 3;
|
||||
+
|
||||
+ array = (char **)util_common_calloc_s(4 * sizeof(char *));
|
||||
+ ASSERT_NE(array, nullptr);
|
||||
+ array[0] = util_strdup_s("test1");
|
||||
+ array[1] = util_strdup_s("test2");
|
||||
+ array[2] = util_strdup_s("test3");
|
||||
+
|
||||
+ array_copy = util_copy_array_by_len(array, len);
|
||||
+ ASSERT_NE(array_copy, nullptr);
|
||||
+ for (size_t i = 0; i < len; i++) {
|
||||
+ ASSERT_EQ(strcmp(array_copy[i], array[i]), 0);
|
||||
+ free(array[i]);
|
||||
+ free(array_copy[i]);
|
||||
+ }
|
||||
+
|
||||
+ ASSERT_EQ(util_copy_array_by_len(array, 0), nullptr);
|
||||
+ ASSERT_EQ(util_copy_array_by_len(nullptr, len), nullptr);
|
||||
+
|
||||
+ free(array);
|
||||
+ free(array_copy);
|
||||
+}
|
||||
+
|
||||
TEST(utils_array, test_util_grow_array)
|
||||
{
|
||||
char **array = nullptr;
|
||||
@@ -229,6 +256,34 @@ TEST(utils_array, test_util_append_string_array)
|
||||
sarray = nullptr;
|
||||
}
|
||||
|
||||
+TEST(utils_array, test_util_copy_string_array)
|
||||
+{
|
||||
+ __isula_auto_string_array_t string_array *sarray_copy = nullptr;
|
||||
+ __isula_auto_string_array_t string_array *sarray = (string_array *)util_common_calloc_s(sizeof(string_array));
|
||||
+ ASSERT_NE(sarray, nullptr);
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = util_append_string_array(sarray, "1234567890");
|
||||
+ ASSERT_EQ(ret, 0);
|
||||
+ ret = util_append_string_array(sarray, "abc");
|
||||
+ ASSERT_EQ(ret, 0);
|
||||
+ ret = util_append_string_array(sarray, "bcd");
|
||||
+ ASSERT_EQ(ret, 0);
|
||||
+ ASSERT_EQ(sarray->len, 3);
|
||||
+
|
||||
+ sarray_copy = util_copy_string_array(sarray);
|
||||
+ ASSERT_NE(sarray_copy, nullptr);
|
||||
+ ASSERT_EQ(sarray_copy->len, sarray->len);
|
||||
+ for (size_t i = 0; i < sarray_copy->len; i++) {
|
||||
+ ASSERT_EQ(strcmp(sarray_copy->items[i], sarray->items[i]), 0);
|
||||
+ }
|
||||
+
|
||||
+ ASSERT_EQ(util_copy_string_array(nullptr), nullptr);
|
||||
+ sarray->cap = 0;
|
||||
+ ASSERT_EQ(util_copy_string_array(sarray), nullptr);
|
||||
+ sarray->cap = sarray->len;
|
||||
+}
|
||||
+
|
||||
TEST(utils_array, test_util_string_array_contain)
|
||||
{
|
||||
string_array *sarray = (string_array *)util_common_calloc_s(sizeof(string_array));
|
||||
@@ -299,3 +354,76 @@ TEST(utils_array, test_util_common_array_append_pointer)
|
||||
delete element1;
|
||||
delete element2;
|
||||
}
|
||||
+
|
||||
+static void common_array_free_mock(void *ptr)
|
||||
+{
|
||||
+ (void)ptr;
|
||||
+ return;
|
||||
+}
|
||||
+
|
||||
+TEST(utils_array, test_util_append_common_array)
|
||||
+{
|
||||
+ __isula_auto_common_array_t common_array *carray = nullptr;
|
||||
+ int ret;
|
||||
+ int value1 = 1;
|
||||
+ int value2 = 2;
|
||||
+ int value3 = 3;
|
||||
+
|
||||
+ carray = util_common_array_new(1, common_array_free_mock, util_clone_ptr);
|
||||
+ ASSERT_NE(carray, nullptr);
|
||||
+
|
||||
+ ret = util_append_common_array(carray, &value1);
|
||||
+ ASSERT_EQ(ret, 0);
|
||||
+ ASSERT_EQ(carray->items[0], &value1);
|
||||
+ ASSERT_EQ(carray->len, 1);
|
||||
+
|
||||
+ ret = util_append_common_array(carray, &value2);
|
||||
+ ASSERT_EQ(ret, 0);
|
||||
+ ret = util_append_common_array(carray, &value3);
|
||||
+ ASSERT_EQ(ret, 0);
|
||||
+ ASSERT_EQ(carray->items[1], &value2);
|
||||
+ ASSERT_EQ(carray->items[2], &value3);
|
||||
+ ASSERT_EQ(carray->len, 3);
|
||||
+
|
||||
+ carray->clone_item_cb = nullptr;
|
||||
+ ASSERT_EQ(util_append_common_array(carray, &value1), -1);
|
||||
+ carray->clone_item_cb = util_clone_ptr;
|
||||
+ ASSERT_EQ(util_append_common_array(carray, nullptr), 0);
|
||||
+}
|
||||
+
|
||||
+TEST(utils_array, test_util_merge_common_array)
|
||||
+{
|
||||
+ __isula_auto_common_array_t common_array *carray1 = nullptr;
|
||||
+ __isula_auto_common_array_t common_array *carray2 = nullptr;
|
||||
+ int ret;
|
||||
+ int value1 = 1;
|
||||
+ int value2 = 2;
|
||||
+
|
||||
+ carray1 = util_common_array_new(1, common_array_free_mock, util_clone_ptr);
|
||||
+ ASSERT_NE(carray1, nullptr);
|
||||
+ carray2 = util_common_array_new(1, common_array_free_mock, util_clone_ptr);
|
||||
+ ASSERT_NE(carray2, nullptr);
|
||||
+
|
||||
+ ret = util_append_common_array(carray1, &value1);
|
||||
+ ASSERT_EQ(ret, 0);
|
||||
+ ASSERT_EQ(carray1->items[0], &value1);
|
||||
+ ASSERT_EQ(carray1->len, 1);
|
||||
+ ret = util_append_common_array(carray2, &value2);
|
||||
+ ASSERT_EQ(ret, 0);
|
||||
+ ASSERT_EQ(carray2->items[0], &value2);
|
||||
+ ASSERT_EQ(carray2->len, 1);
|
||||
+
|
||||
+ ret = util_merge_common_array(carray1, carray2);
|
||||
+ ASSERT_EQ(ret, 0);
|
||||
+ ASSERT_EQ(carray1->items[1], &value2);
|
||||
+ ASSERT_EQ(carray1->len, 2);
|
||||
+
|
||||
+ ASSERT_EQ(util_merge_common_array(nullptr, carray2), -1);
|
||||
+ ASSERT_EQ(util_merge_common_array(carray1, nullptr), -1);
|
||||
+ carray1->clone_item_cb = nullptr;
|
||||
+ ASSERT_EQ(util_merge_common_array(carray1, carray2), -1);
|
||||
+ carray1->clone_item_cb = util_clone_ptr;
|
||||
+ carray2->clone_item_cb = nullptr;
|
||||
+ ASSERT_EQ(util_merge_common_array(carray1, carray2), -1);
|
||||
+ carray2->clone_item_cb = util_clone_ptr;
|
||||
+}
|
||||
\ No newline at end of file
|
||||
diff --git a/test/cutils/utils_utils/utils_utils_ut.cc b/test/cutils/utils_utils/utils_utils_ut.cc
|
||||
index 0720d1b1..a61e5a21 100644
|
||||
--- a/test/cutils/utils_utils/utils_utils_ut.cc
|
||||
+++ b/test/cutils/utils_utils/utils_utils_ut.cc
|
||||
@@ -54,6 +54,18 @@ static int status_to_exit_code(int status)
|
||||
return exit_code;
|
||||
}
|
||||
|
||||
+TEST(utils_utils, test_util_swap_ptr)
|
||||
+{
|
||||
+ int val1 = 1;
|
||||
+ int val2 = 2;
|
||||
+ int *ptr1 = &val1;
|
||||
+ int *ptr2 = &val2;
|
||||
+
|
||||
+ util_swap_ptr((void **)&ptr1, (void **)&ptr2);
|
||||
+ ASSERT_EQ(*ptr1, val2);
|
||||
+ ASSERT_EQ(*ptr2, val1);
|
||||
+}
|
||||
+
|
||||
TEST(utils_utils, test_util_mem_realloc)
|
||||
{
|
||||
char *old = nullptr;
|
||||
diff --git a/test/cutils/utils_version/CMakeLists.txt b/test/cutils/utils_version/CMakeLists.txt
|
||||
new file mode 100644
|
||||
index 00000000..1ada8e93
|
||||
--- /dev/null
|
||||
+++ b/test/cutils/utils_version/CMakeLists.txt
|
||||
@@ -0,0 +1,17 @@
|
||||
+project(iSulad_UT)
|
||||
+
|
||||
+SET(EXE utils_version_ut)
|
||||
+
|
||||
+add_executable(${EXE}
|
||||
+ utils_version_ut.cc)
|
||||
+
|
||||
+target_include_directories(${EXE} PUBLIC
|
||||
+ ${GTEST_INCLUDE_DIR}
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../include
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../src/common
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../src/utils/cutils
|
||||
+ )
|
||||
+
|
||||
+target_link_libraries(${EXE} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${ISULA_LIBUTILS_LIBRARY} libutils_ut -lcrypto -lyajl -lz)
|
||||
+add_test(NAME ${EXE} COMMAND ${EXE} --gtest_output=xml:${EXE}-Results.xml)
|
||||
+set_tests_properties(${EXE} PROPERTIES TIMEOUT 120)
|
||||
diff --git a/test/cutils/utils_version/utils_version_ut.cc b/test/cutils/utils_version/utils_version_ut.cc
|
||||
new file mode 100644
|
||||
index 00000000..d1fc0932
|
||||
--- /dev/null
|
||||
+++ b/test/cutils/utils_version/utils_version_ut.cc
|
||||
@@ -0,0 +1,71 @@
|
||||
+/******************************************************************************
|
||||
+ * Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved.
|
||||
+ * iSulad licensed under the Mulan PSL v2.
|
||||
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
+ * You may obtain a copy of Mulan PSL v2 at:
|
||||
+ * http://license.coscl.org.cn/MulanPSL2
|
||||
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
+ * PURPOSE.
|
||||
+ * See the Mulan PSL v2 for more details.
|
||||
+ * Author: liuxu
|
||||
+ * Create: 2024-04-25
|
||||
+ * Description: utils version unit test
|
||||
+ *******************************************************************************/
|
||||
+
|
||||
+#include <stdlib.h>
|
||||
+#include <stdio.h>
|
||||
+#include <climits>
|
||||
+#include <gtest/gtest.h>
|
||||
+#include "mock.h"
|
||||
+#include "utils_version.h"
|
||||
+#include "utils.h"
|
||||
+
|
||||
+TEST(utils_version, test_util_version_compare)
|
||||
+{
|
||||
+ const char *version1 = "1.1.1";
|
||||
+ const char *version2 = "1.1.2";
|
||||
+ int diff_value = 0;
|
||||
+
|
||||
+ ASSERT_EQ(util_version_compare(version1, version2, &diff_value), 0);
|
||||
+ ASSERT_TRUE(diff_value < 0);
|
||||
+ ASSERT_EQ(util_version_compare(version1, version1, &diff_value), 0);
|
||||
+ ASSERT_TRUE(diff_value == 0);
|
||||
+ ASSERT_EQ(util_version_compare(version2, version1, &diff_value), 0);
|
||||
+ ASSERT_TRUE(diff_value > 0);
|
||||
+
|
||||
+ ASSERT_EQ(util_version_compare(version1, nullptr, &diff_value), -1);
|
||||
+ ASSERT_EQ(util_version_compare(nullptr, version2, &diff_value), -1);
|
||||
+ ASSERT_EQ(util_version_compare(version1, version2, nullptr), -1);
|
||||
+ ASSERT_EQ(util_version_compare("1.1.1.1", version2, nullptr), -1);
|
||||
+ ASSERT_EQ(util_version_compare(version1, "a.b.1.1", nullptr), -1);
|
||||
+}
|
||||
+
|
||||
+TEST(utils_version, test_util_version_greater_than)
|
||||
+{
|
||||
+ const char *version1 = "0.6.0";
|
||||
+ const char *version2 = "1.0.0";
|
||||
+ bool result = true;
|
||||
+
|
||||
+ ASSERT_EQ(util_version_greater_than(version1, version2, &result), 0);
|
||||
+ ASSERT_FALSE(result);
|
||||
+ ASSERT_EQ(util_version_greater_than(version1, version1, &result), 0);
|
||||
+ ASSERT_FALSE(result);
|
||||
+ ASSERT_EQ(util_version_greater_than(version2, version1, &result), 0);
|
||||
+ ASSERT_TRUE(result);
|
||||
+}
|
||||
+
|
||||
+TEST(utils_version, test_util_version_greater_than_or_equal_to)
|
||||
+{
|
||||
+ const char *version1 = "0.6.0";
|
||||
+ const char *version2 = "1.0.0";
|
||||
+ bool result = true;
|
||||
+
|
||||
+ ASSERT_EQ(util_version_greater_than_or_equal_to(version1, version2, &result), 0);
|
||||
+ ASSERT_FALSE(result);
|
||||
+ ASSERT_EQ(util_version_greater_than_or_equal_to(version1, version1, &result), 0);
|
||||
+ ASSERT_TRUE(result);
|
||||
+ ASSERT_EQ(util_version_greater_than_or_equal_to(version2, version1, &result), 0);
|
||||
+ ASSERT_TRUE(result);
|
||||
+}
|
||||
+
|
||||
diff --git a/test/image/oci/oci_config_merge/CMakeLists.txt b/test/image/oci/oci_config_merge/CMakeLists.txt
|
||||
index ffd3999d..38ade4ec 100644
|
||||
--- a/test/image/oci/oci_config_merge/CMakeLists.txt
|
||||
+++ b/test/image/oci/oci_config_merge/CMakeLists.txt
|
||||
@@ -47,6 +47,7 @@ add_executable(${EXE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/selinux_label_mock.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/storage_mock.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/image_mock.cc
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/cdi_operate_api_mock.cc
|
||||
oci_config_merge_ut.cc)
|
||||
|
||||
target_include_directories(${EXE} PUBLIC
|
||||
diff --git a/test/mocks/cdi_operate_api_mock.cc b/test/mocks/cdi_operate_api_mock.cc
|
||||
new file mode 100644
|
||||
index 00000000..d8f9f9d4
|
||||
--- /dev/null
|
||||
+++ b/test/mocks/cdi_operate_api_mock.cc
|
||||
@@ -0,0 +1,58 @@
|
||||
+/******************************************************************************
|
||||
+ * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved.
|
||||
+ * iSulad licensed under the Mulan PSL v2.
|
||||
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
+ * You may obtain a copy of Mulan PSL v2 at:
|
||||
+ * http://license.coscl.org.cn/MulanPSL2
|
||||
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
+ * PURPOSE.
|
||||
+ * See the Mulan PSL v2 for more details.
|
||||
+ * Author: jikai
|
||||
+ * Create: 2023-10-20
|
||||
+ * Description: provide image api mock
|
||||
+ ******************************************************************************/
|
||||
+
|
||||
+#include "cdi_operate_api_mock.h"
|
||||
+
|
||||
+namespace {
|
||||
+std::shared_ptr<MockCdiOperateApi> g_cdi_operate_api_mock = nullptr;
|
||||
+}
|
||||
+
|
||||
+void MockCdiOperateApi_SetMock(std::shared_ptr<MockCdiOperateApi> mock)
|
||||
+{
|
||||
+ g_cdi_operate_api_mock = mock;
|
||||
+}
|
||||
+
|
||||
+int cdi_operate_registry_init(char **specs_dirs, size_t specs_dirs_len)
|
||||
+{
|
||||
+ if (g_cdi_operate_api_mock != nullptr) {
|
||||
+ return g_cdi_operate_api_mock->CdiOperateRegistryInit(specs_dirs, specs_dirs_len);
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int cdi_operate_refresh(void)
|
||||
+{
|
||||
+ if (g_cdi_operate_api_mock != nullptr) {
|
||||
+ return g_cdi_operate_api_mock->CdiOperateRefresh();
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int cdi_operate_inject_devices(oci_runtime_spec *spec, string_array *devices)
|
||||
+{
|
||||
+ if (g_cdi_operate_api_mock != nullptr) {
|
||||
+ return g_cdi_operate_api_mock->CdiOperateInjectDevices(spec, devices);
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int cdi_operate_parse_annotations(json_map_string_string *annotations, string_array **keys,
|
||||
+ string_array **devices, char **error)
|
||||
+{
|
||||
+ if (g_cdi_operate_api_mock != nullptr) {
|
||||
+ return g_cdi_operate_api_mock->CdiOperateParseAnnotations(annotations, keys, devices, error);
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
\ No newline at end of file
|
||||
diff --git a/test/mocks/cdi_operate_api_mock.h b/test/mocks/cdi_operate_api_mock.h
|
||||
new file mode 100644
|
||||
index 00000000..c118ee7a
|
||||
--- /dev/null
|
||||
+++ b/test/mocks/cdi_operate_api_mock.h
|
||||
@@ -0,0 +1,35 @@
|
||||
+/******************************************************************************
|
||||
+ * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved.
|
||||
+ * iSulad licensed under the Mulan PSL v2.
|
||||
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
|
||||
+ * You may obtain a copy of Mulan PSL v2 at:
|
||||
+ * http://license.coscl.org.cn/MulanPSL2
|
||||
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
+ * PURPOSE.
|
||||
+ * See the Mulan PSL v2 for more details.
|
||||
+ * Author: liuxu
|
||||
+ * Create: 2024-04-24
|
||||
+ * Description: provide cdi api mock
|
||||
+ ******************************************************************************/
|
||||
+
|
||||
+#ifndef ISULAD_TEST_MOCKS_CDI_OPERATE_API_MOCK_H
|
||||
+#define ISULAD_TEST_MOCKS_CDI_OPERATE_API_MOCK_H
|
||||
+
|
||||
+#include <gmock/gmock.h>
|
||||
+#include <memory>
|
||||
+
|
||||
+#include "cdi_operate_api.h"
|
||||
+
|
||||
+class MockCdiOperateApi {
|
||||
+public:
|
||||
+ MOCK_METHOD2(CdiOperateRegistryInit, int(char **specs_dirs, size_t specs_dirs_len));
|
||||
+ MOCK_METHOD0(CdiOperateRefresh, int(void));
|
||||
+ MOCK_METHOD2(CdiOperateInjectDevices, int(oci_runtime_spec *spec, string_array *devices));
|
||||
+ MOCK_METHOD4(CdiOperateParseAnnotations, int(json_map_string_string *annotations, string_array **keys,
|
||||
+ string_array **devices, char **error));
|
||||
+};
|
||||
+
|
||||
+void MockCdiOperateApi_SetMock(std::shared_ptr<MockCdiOperateApi> mock);
|
||||
+
|
||||
+#endif
|
||||
diff --git a/test/sandbox/controller/shim/CMakeLists.txt b/test/sandbox/controller/shim/CMakeLists.txt
|
||||
index 26a66e51..d18d1861 100644
|
||||
--- a/test/sandbox/controller/shim/CMakeLists.txt
|
||||
+++ b/test/sandbox/controller/shim/CMakeLists.txt
|
||||
@@ -21,6 +21,7 @@ add_executable(${EXE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/callback_mock.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/image_api_mock.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/service_container_api_mock.cc
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/cdi_operate_api_mock.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/sandbox/controller/controller_common.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/sandbox/controller/shim/shim_controller_ut.cc
|
||||
)
|
||||
diff --git a/test/specs/specs/CMakeLists.txt b/test/specs/specs/CMakeLists.txt
|
||||
index 12c11f51..892d44d7 100644
|
||||
--- a/test/specs/specs/CMakeLists.txt
|
||||
+++ b/test/specs/specs/CMakeLists.txt
|
||||
@@ -44,6 +44,7 @@ add_executable(${EXE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../test/mocks/storage_mock.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../test/mocks/image_mock.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../test/mocks/sender_mock.cc
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../test/mocks/cdi_operate_api_mock.cc
|
||||
specs_ut.cc)
|
||||
|
||||
target_include_directories(${EXE} PUBLIC
|
||||
diff --git a/test/specs/specs/specs_ut.cc b/test/specs/specs/specs_ut.cc
|
||||
index 6c42216d..47836e5b 100644
|
||||
--- a/test/specs/specs/specs_ut.cc
|
||||
+++ b/test/specs/specs/specs_ut.cc
|
||||
@@ -564,6 +564,247 @@ TEST_F(SpecsUnitTest, test_update_devcies_for_oci_spec)
|
||||
free(err);
|
||||
}
|
||||
|
||||
+#ifdef ENABLE_CDI
|
||||
+TEST_F(SpecsUnitTest, test_defs_process_add_multiple_env)
|
||||
+{
|
||||
+ size_t env_len = 2;
|
||||
+ char **envs = (char **)util_common_calloc_s(sizeof(char *) * env_len);
|
||||
+ ASSERT_NE(envs, nullptr);
|
||||
+ defs_process *dp = (defs_process *)util_common_calloc_s(sizeof(defs_process));
|
||||
+ ASSERT_NE(dp, nullptr);
|
||||
+ dp->env_len = 1;
|
||||
+ dp->env = (char **)util_common_calloc_s(sizeof(char *) * dp->env_len);
|
||||
+ ASSERT_NE(dp->env, nullptr);
|
||||
+
|
||||
+ envs[0] = util_strdup_s("key0=value0");
|
||||
+ envs[1] = util_strdup_s("key1=value1");
|
||||
+ dp->env[0] = util_strdup_s("key0=value0_old");
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), 0);
|
||||
+ ASSERT_EQ(dp->env_len, 2);
|
||||
+ ASSERT_EQ(strcmp(dp->env[0], envs[0]), 0);
|
||||
+ ASSERT_EQ(strcmp(dp->env[1], envs[1]), 0);
|
||||
+
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(dp, nullptr, env_len), 0);
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, 0), 0);
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(nullptr, (const char **)envs, env_len), -1);
|
||||
+
|
||||
+ free(envs[0]);
|
||||
+ envs[0] = util_strdup_s("=value0");
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
|
||||
+ free(envs[0]);
|
||||
+ envs[0] = util_strdup_s("key0=");
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
|
||||
+ free(envs[0]);
|
||||
+ envs[0] = util_strdup_s("key0xxxx");
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
|
||||
+
|
||||
+ free(dp->env[0]);
|
||||
+ dp->env[0] = util_strdup_s("=value0");
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
|
||||
+ free(dp->env[0]);
|
||||
+ dp->env[0] = util_strdup_s("key0=");
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
|
||||
+ free(dp->env[0]);
|
||||
+ dp->env[0] = util_strdup_s("key0xxxx");
|
||||
+ ASSERT_EQ(defs_process_add_multiple_env(dp, (const char **)envs, env_len), -1);
|
||||
+
|
||||
+ free_defs_process(dp);
|
||||
+ free(envs[0]);
|
||||
+ free(envs[1]);
|
||||
+ free(envs);
|
||||
+}
|
||||
+
|
||||
+TEST_F(SpecsUnitTest, test_spec_add_multiple_process_env)
|
||||
+{
|
||||
+ size_t env_len = 2;
|
||||
+ char **envs = (char **)util_common_calloc_s(sizeof(char *) * env_len);
|
||||
+ ASSERT_NE(envs, nullptr);
|
||||
+ oci_runtime_spec *oci_spec = (oci_runtime_spec *)util_common_calloc_s(sizeof(oci_runtime_spec));
|
||||
+ ASSERT_NE(oci_spec, nullptr);
|
||||
+ oci_spec->process = (defs_process *)util_common_calloc_s(sizeof(defs_process));
|
||||
+ ASSERT_NE(oci_spec->process, nullptr);
|
||||
+ oci_spec->process->env_len = 1;
|
||||
+ oci_spec->process->env = (char **)util_common_calloc_s(sizeof(char *) * oci_spec->process->env_len);
|
||||
+ ASSERT_NE(oci_spec->process->env, nullptr);
|
||||
+
|
||||
+ envs[0] = util_strdup_s("key0=value0");
|
||||
+ envs[1] = util_strdup_s("key1=value1");
|
||||
+ oci_spec->process->env[0] = util_strdup_s("key0=value0_old");
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), 0);
|
||||
+ ASSERT_EQ(oci_spec->process->env_len, 2);
|
||||
+ ASSERT_EQ(strcmp(oci_spec->process->env[0], envs[0]), 0);
|
||||
+ ASSERT_EQ(strcmp(oci_spec->process->env[1], envs[1]), 0);
|
||||
+
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, nullptr, env_len), 0);
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, 0), 0);
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(nullptr, (const char **)envs, env_len), -1);
|
||||
+
|
||||
+ free(envs[0]);
|
||||
+ envs[0] = util_strdup_s("=value0");
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
|
||||
+ free(envs[0]);
|
||||
+ envs[0] = util_strdup_s("key0=");
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
|
||||
+ free(envs[0]);
|
||||
+ envs[0] = util_strdup_s("key0xxxx");
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
|
||||
+
|
||||
+ free(oci_spec->process->env[0]);
|
||||
+ oci_spec->process->env[0] = util_strdup_s("=value0");
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
|
||||
+ free(oci_spec->process->env[0]);
|
||||
+ oci_spec->process->env[0] = util_strdup_s("key0=");
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
|
||||
+ free(oci_spec->process->env[0]);
|
||||
+ oci_spec->process->env[0] = util_strdup_s("key0xxxx");
|
||||
+ ASSERT_EQ(spec_add_multiple_process_env(oci_spec, (const char **)envs, env_len), -1);
|
||||
+
|
||||
+ free_oci_runtime_spec(oci_spec);
|
||||
+ free(envs[0]);
|
||||
+ free(envs[1]);
|
||||
+ free(envs);
|
||||
+}
|
||||
+
|
||||
+TEST_F(SpecsUnitTest, test_spec_add_device)
|
||||
+{
|
||||
+ defs_device *device = (defs_device *)util_common_calloc_s(sizeof(defs_device));
|
||||
+ ASSERT_NE(device, nullptr);
|
||||
+ oci_runtime_spec *oci_spec = (oci_runtime_spec *)util_common_calloc_s(sizeof(oci_runtime_spec));
|
||||
+ ASSERT_NE(oci_spec, nullptr);
|
||||
+ oci_spec->linux = (oci_runtime_config_linux *)util_common_calloc_s(sizeof(oci_runtime_config_linux));
|
||||
+ ASSERT_NE(oci_spec->linux, nullptr);
|
||||
+ oci_spec->linux->devices_len = 1;
|
||||
+ oci_spec->linux->devices = (defs_device **)util_common_calloc_s(sizeof(defs_device *) * oci_spec->linux->devices_len);
|
||||
+ ASSERT_NE(oci_spec->linux->devices, nullptr);
|
||||
+
|
||||
+ device->path = util_strdup_s("/device/path");
|
||||
+ oci_spec->linux->devices[0] = (defs_device *)util_common_calloc_s(sizeof(defs_device));
|
||||
+ ASSERT_NE(oci_spec->linux->devices[0], nullptr);
|
||||
+ oci_spec->linux->devices[0]->path = util_strdup_s("/device/path");
|
||||
+ ASSERT_EQ(spec_add_device(oci_spec, device), 0);
|
||||
+ ASSERT_EQ(oci_spec->linux->devices[0], device);
|
||||
+
|
||||
+ oci_spec->linux->devices[0] = nullptr;
|
||||
+ oci_spec->linux->devices_len = 0;
|
||||
+ ASSERT_EQ(spec_add_device(oci_spec, device), 0);
|
||||
+ ASSERT_EQ(oci_spec->linux->devices_len, 1);
|
||||
+ ASSERT_EQ(oci_spec->linux->devices[0], device);
|
||||
+
|
||||
+ ASSERT_EQ(spec_add_device(oci_spec, nullptr), -1);
|
||||
+ ASSERT_EQ(spec_add_device(nullptr, device), -1);
|
||||
+
|
||||
+ free_oci_runtime_spec(oci_spec);
|
||||
+}
|
||||
+
|
||||
+TEST_F(SpecsUnitTest, test_spec_add_linux_resources_device)
|
||||
+{
|
||||
+ oci_runtime_spec *oci_spec = (oci_runtime_spec *)util_common_calloc_s(sizeof(oci_runtime_spec));
|
||||
+ ASSERT_NE(oci_spec, nullptr);
|
||||
+ oci_spec->linux = (oci_runtime_config_linux *)util_common_calloc_s(sizeof(oci_runtime_config_linux));
|
||||
+ ASSERT_NE(oci_spec->linux, nullptr);
|
||||
+ oci_spec->linux->resources = (defs_resources *)util_common_calloc_s(sizeof(defs_resources));
|
||||
+ ASSERT_NE(oci_spec->linux->resources, nullptr);
|
||||
+ oci_spec->linux->resources->devices_len = 1;
|
||||
+ oci_spec->linux->resources->devices = (defs_device_cgroup **)util_common_calloc_s(sizeof(defs_device_cgroup *) * oci_spec->linux->resources->devices_len);
|
||||
+ ASSERT_NE(oci_spec->linux->resources->devices, nullptr);
|
||||
+
|
||||
+ oci_spec->linux->resources->devices[0] = (defs_device_cgroup *)util_common_calloc_s(sizeof(defs_device_cgroup));
|
||||
+ ASSERT_NE(oci_spec->linux->resources->devices[0], nullptr);
|
||||
+ ASSERT_EQ(spec_add_linux_resources_device(oci_spec, true, "bind", 10, 9, "rwm"), 0);
|
||||
+ ASSERT_EQ(oci_spec->linux->resources->devices_len, 2);
|
||||
+ ASSERT_EQ(oci_spec->linux->resources->devices[1]->allow, true);
|
||||
+ ASSERT_EQ(strcmp(oci_spec->linux->resources->devices[1]->type, "bind"), 0);
|
||||
+ ASSERT_EQ(oci_spec->linux->resources->devices[1]->major, 10);
|
||||
+ ASSERT_EQ(oci_spec->linux->resources->devices[1]->minor, 9);
|
||||
+ ASSERT_EQ(strcmp(oci_spec->linux->resources->devices[1]->access, "rwm"), 0);
|
||||
+
|
||||
+ ASSERT_EQ(spec_add_linux_resources_device(nullptr, true, "bind", 10, 9, "rwm"), -1);
|
||||
+
|
||||
+ free_oci_runtime_spec(oci_spec);
|
||||
+}
|
||||
+
|
||||
+TEST_F(SpecsUnitTest, test_spec_remove_mount)
|
||||
+{
|
||||
+ oci_runtime_spec *oci_spec = (oci_runtime_spec *)util_common_calloc_s(sizeof(oci_runtime_spec));
|
||||
+ ASSERT_NE(oci_spec, nullptr);
|
||||
+ oci_spec->mounts_len = 2;
|
||||
+ oci_spec->mounts = (defs_mount **)util_common_calloc_s(sizeof(defs_mount *) * oci_spec->mounts_len);
|
||||
+ ASSERT_NE(oci_spec->mounts, nullptr);
|
||||
+
|
||||
+ oci_spec->mounts[0] = (defs_mount *)util_common_calloc_s(sizeof(defs_mount));
|
||||
+ ASSERT_NE(oci_spec->mounts[0], nullptr);
|
||||
+ oci_spec->mounts[1] = (defs_mount *)util_common_calloc_s(sizeof(defs_mount));
|
||||
+ ASSERT_NE(oci_spec->mounts[1], nullptr);
|
||||
+ oci_spec->mounts[0]->destination = util_strdup_s("/mount/path/0");
|
||||
+ oci_spec->mounts[1]->destination = util_strdup_s("/mount/path/1");
|
||||
+ spec_remove_mount(oci_spec, oci_spec->mounts[0]->destination);
|
||||
+ ASSERT_EQ(oci_spec->mounts_len, 1);
|
||||
+ ASSERT_EQ(strcmp(oci_spec->mounts[0]->destination, "/mount/path/1"), 0);
|
||||
+
|
||||
+ free_oci_runtime_spec(oci_spec);
|
||||
+}
|
||||
+
|
||||
+TEST_F(SpecsUnitTest, test_spec_add_mount)
|
||||
+{
|
||||
+ defs_mount *mnt = (defs_mount *)util_common_calloc_s(sizeof(defs_mount));
|
||||
+ ASSERT_NE(mnt, nullptr);
|
||||
+ oci_runtime_spec *oci_spec = (oci_runtime_spec *)util_common_calloc_s(sizeof(oci_runtime_spec));
|
||||
+ ASSERT_NE(oci_spec, nullptr);
|
||||
+ oci_spec->mounts_len = 1;
|
||||
+ oci_spec->mounts = (defs_mount **)util_common_calloc_s(sizeof(defs_mount *) * oci_spec->mounts_len );
|
||||
+ ASSERT_NE(oci_spec->mounts, nullptr);
|
||||
+
|
||||
+ oci_spec->mounts[0] = (defs_mount *)util_common_calloc_s(sizeof(defs_mount));
|
||||
+ ASSERT_NE(oci_spec->mounts[0], nullptr);
|
||||
+ oci_spec->mounts[0]->destination = util_strdup_s("/mount/path/0");
|
||||
+ ASSERT_EQ(spec_add_mount(oci_spec, mnt), 0);
|
||||
+ ASSERT_EQ(oci_spec->mounts_len, 2);
|
||||
+ ASSERT_EQ(oci_spec->mounts[1], mnt);
|
||||
+
|
||||
+ ASSERT_EQ(spec_add_mount(nullptr, mnt), -1);
|
||||
+ ASSERT_EQ(spec_add_mount(oci_spec, nullptr), -1);
|
||||
+
|
||||
+ free_oci_runtime_spec(oci_spec);
|
||||
+}
|
||||
+
|
||||
+#define TEST_SPEC_ADD_HOOKS_ITEM_DEF(hooktype) \
|
||||
+ void test_spec_add_##hooktype##_hook(void) \
|
||||
+ { \
|
||||
+ defs_hook *hook = (defs_hook *)util_common_calloc_s(sizeof(defs_hook)); \
|
||||
+ ASSERT_NE(hook, nullptr); \
|
||||
+ oci_runtime_spec *oci_spec = (oci_runtime_spec *)util_common_calloc_s(sizeof(oci_runtime_spec)); \
|
||||
+ ASSERT_NE(oci_spec, nullptr); \
|
||||
+ oci_spec->hooks = (oci_runtime_spec_hooks *)util_common_calloc_s(sizeof(oci_runtime_spec_hooks)); \
|
||||
+ ASSERT_NE(oci_spec->hooks, nullptr); \
|
||||
+ oci_spec->hooks->hooktype##_len = 1; \
|
||||
+ oci_spec->hooks->hooktype = (defs_hook **)util_common_calloc_s(sizeof(defs_hook *) * oci_spec->hooks->hooktype##_len); \
|
||||
+ ASSERT_NE(oci_spec->hooks->hooktype, nullptr); \
|
||||
+ \
|
||||
+ oci_spec->hooks->hooktype[0] = (defs_hook *)util_common_calloc_s(sizeof(defs_hook)); \
|
||||
+ ASSERT_NE(oci_spec->hooks->hooktype[0], nullptr); \
|
||||
+ ASSERT_EQ(spec_add_##hooktype##_hook(oci_spec, hook), 0); \
|
||||
+ ASSERT_EQ(oci_spec->hooks->hooktype##_len, 2); \
|
||||
+ ASSERT_EQ(oci_spec->hooks->hooktype[1], hook); \
|
||||
+ \
|
||||
+ ASSERT_EQ(spec_add_##hooktype##_hook(nullptr, hook), -1); \
|
||||
+ ASSERT_EQ(spec_add_##hooktype##_hook(oci_spec, nullptr), -1); \
|
||||
+ \
|
||||
+ free_oci_runtime_spec(oci_spec); \
|
||||
+ }
|
||||
+
|
||||
+TEST_SPEC_ADD_HOOKS_ITEM_DEF(prestart)
|
||||
+TEST_SPEC_ADD_HOOKS_ITEM_DEF(poststart)
|
||||
+TEST_SPEC_ADD_HOOKS_ITEM_DEF(poststop)
|
||||
+
|
||||
+TEST_F(SpecsUnitTest, test_spec_add_hook)
|
||||
+{
|
||||
+ test_spec_add_prestart_hook();
|
||||
+ test_spec_add_poststart_hook();
|
||||
+ test_spec_add_poststop_hook();
|
||||
+}
|
||||
+
|
||||
+#endif /* ENABLE_CDI */
|
||||
+
|
||||
/********************************* UT for merge caps *******************************************/
|
||||
struct capabilities_lens {
|
||||
size_t bounding_len;
|
||||
diff --git a/test/specs/specs_extend/CMakeLists.txt b/test/specs/specs_extend/CMakeLists.txt
|
||||
index 2fd37e1c..bd4d2dd6 100644
|
||||
--- a/test/specs/specs_extend/CMakeLists.txt
|
||||
+++ b/test/specs/specs_extend/CMakeLists.txt
|
||||
@@ -44,6 +44,7 @@ add_executable(${EXE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../test/mocks/storage_mock.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../test/mocks/image_mock.cc
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../../test/mocks/sender_mock.cc
|
||||
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../test/mocks/cdi_operate_api_mock.cc
|
||||
specs_extend_ut.cc)
|
||||
|
||||
target_include_directories(${EXE} PUBLIC
|
||||
--
|
||||
2.25.1
|
||||
|
||||
26
0077-remove-extra-s-in-CreateContainerLogSymlink.patch
Normal file
26
0077-remove-extra-s-in-CreateContainerLogSymlink.patch
Normal file
@ -0,0 +1,26 @@
|
||||
From cade2ae3b53848bbedb3f89ff45333f3871e878a Mon Sep 17 00:00:00 2001
|
||||
From: jikai <jikai11@huawei.com>
|
||||
Date: Thu, 25 Apr 2024 12:46:10 +0000
|
||||
Subject: [PATCH 77/78] remove extra %s in CreateContainerLogSymlink
|
||||
|
||||
Signed-off-by: jikai <jikai11@huawei.com>
|
||||
---
|
||||
src/daemon/common/cri/cri_helpers.cc | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/daemon/common/cri/cri_helpers.cc b/src/daemon/common/cri/cri_helpers.cc
|
||||
index 5189ac00..d7ec9f36 100644
|
||||
--- a/src/daemon/common/cri/cri_helpers.cc
|
||||
+++ b/src/daemon/common/cri/cri_helpers.cc
|
||||
@@ -552,7 +552,7 @@ void CreateContainerLogSymlink(const std::string &containerID, Errors &error)
|
||||
if (symlink(realPath.c_str(), path.c_str()) != 0) {
|
||||
SYSERROR("failed to create symbolic link %s to the container log file %s for container %s", path.c_str(), realPath.c_str(),
|
||||
containerID.c_str());
|
||||
- error.Errorf("failed to create symbolic link %s to the container log file %s for container %s: %s", path.c_str(),
|
||||
+ error.Errorf("failed to create symbolic link %s to the container log file %s for container %s", path.c_str(),
|
||||
realPath.c_str(), containerID.c_str());
|
||||
}
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
||||
69
0078-allow-env-variable-has-an-empty-value.patch
Normal file
69
0078-allow-env-variable-has-an-empty-value.patch
Normal file
@ -0,0 +1,69 @@
|
||||
From f0212d54afc695b2039f09456b10c47f8edaf2de Mon Sep 17 00:00:00 2001
|
||||
From: jikai <jikai11@huawei.com>
|
||||
Date: Sat, 27 Apr 2024 14:32:19 +0800
|
||||
Subject: [PATCH 78/78] allow env variable has an empty value
|
||||
|
||||
Signed-off-by: jikai <jikai11@huawei.com>
|
||||
---
|
||||
src/daemon/modules/spec/specs_extend.c | 10 ++++++----
|
||||
src/utils/cutils/utils_string.c | 3 +++
|
||||
2 files changed, 9 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/daemon/modules/spec/specs_extend.c b/src/daemon/modules/spec/specs_extend.c
|
||||
index 199cba54..8cad2cbe 100644
|
||||
--- a/src/daemon/modules/spec/specs_extend.c
|
||||
+++ b/src/daemon/modules/spec/specs_extend.c
|
||||
@@ -195,6 +195,7 @@ static int generate_env_map_from_file(FILE *fp, json_map_string_string *env_map)
|
||||
char *pline = NULL;
|
||||
size_t length = 0;
|
||||
char *saveptr = NULL;
|
||||
+ char empty_str[1] = {'\0'};
|
||||
|
||||
while (getline(&pline, &length, fp) != -1) {
|
||||
util_trim_newline(pline);
|
||||
@@ -204,7 +205,9 @@ static int generate_env_map_from_file(FILE *fp, json_map_string_string *env_map)
|
||||
}
|
||||
key = strtok_r(pline, "=", &saveptr);
|
||||
value = strtok_r(NULL, "=", &saveptr);
|
||||
- if (key != NULL && value != NULL) {
|
||||
+ // value of an env varible is allowed to be empty
|
||||
+ value = value ? value : empty_str;
|
||||
+ if (key != NULL) {
|
||||
key = util_trim_space(key);
|
||||
value = util_trim_space(value);
|
||||
if ((size_t)(MAX_BUFFER_SIZE - 1) - strlen(key) < strlen(value)) {
|
||||
@@ -291,15 +294,14 @@ static int check_env_need_append(const oci_runtime_spec *oci_spec, const char *e
|
||||
{
|
||||
size_t i = 0;
|
||||
char *key = NULL;
|
||||
- char *value = NULL;
|
||||
char *saveptr = NULL;
|
||||
|
||||
for (i = 0; i < oci_spec->process->env_len; i++) {
|
||||
char *tmp_env = NULL;
|
||||
tmp_env = util_strdup_s(oci_spec->process->env[i]);
|
||||
key = strtok_r(tmp_env, "=", &saveptr);
|
||||
- value = strtok_r(NULL, "=", &saveptr);
|
||||
- if (key == NULL || value == NULL) {
|
||||
+ // value of an env varible is allowed to be empty
|
||||
+ if (key == NULL) {
|
||||
ERROR("Bad env format");
|
||||
free(tmp_env);
|
||||
tmp_env = NULL;
|
||||
diff --git a/src/utils/cutils/utils_string.c b/src/utils/cutils/utils_string.c
|
||||
index 64afb570..11a65f19 100644
|
||||
--- a/src/utils/cutils/utils_string.c
|
||||
+++ b/src/utils/cutils/utils_string.c
|
||||
@@ -534,6 +534,9 @@ static char *util_left_trim_space(char *str)
|
||||
{
|
||||
char *begin = str;
|
||||
char *tmp = str;
|
||||
+ if (strlen(str) == 0) {
|
||||
+ return str;
|
||||
+ }
|
||||
while (isspace(*begin)) {
|
||||
begin++;
|
||||
}
|
||||
--
|
||||
2.25.1
|
||||
|
||||
11
iSulad.spec
11
iSulad.spec
@ -1,5 +1,5 @@
|
||||
%global _version 2.1.5
|
||||
%global _release 7
|
||||
%global _release 8
|
||||
%global is_systemd 1
|
||||
%global enable_criv1 1
|
||||
%global enable_cdi 1
|
||||
@ -91,6 +91,9 @@ Patch0072: 0072-cdi-design-doc.patch
|
||||
Patch0073: 0073-bugfix-cdi-version-check.patch
|
||||
Patch0074: 0074-bugfix-of-background-execution-exec-error-command.patch
|
||||
Patch0075: 0075-bugfix-for-setting-cpu-rt-to-a-negative-value-when-e.patch
|
||||
Patch0076: 0076-cdi-add-UT.patch
|
||||
Patch0077: 0077-remove-extra-s-in-CreateContainerLogSymlink.patch
|
||||
Patch0078: 0078-allow-env-variable-has-an-empty-value.patch
|
||||
|
||||
%ifarch x86_64 aarch64
|
||||
Provides: libhttpclient.so()(64bit)
|
||||
@ -347,6 +350,12 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Apr 29 2024 zhongtao <zhongtao17@huawei.com> - 2.1.5-8
|
||||
- Type: update
|
||||
- ID: NA
|
||||
- SUG: NA
|
||||
- DESC: remove extra %s in CreateContainerLogSymlink and allow env variable has an empty value
|
||||
|
||||
* Thu Apr 25 2024 zhongtao <zhongtao17@huawei.com> - 2.1.5-7
|
||||
- Type: update
|
||||
- ID: NA
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user