From fc7d18d35f0512a2443c4518e171b0297018ca07 Mon Sep 17 00:00:00 2001 From: LiFeng Date: Sun, 16 Feb 2020 23:29:09 -0500 Subject: [PATCH] iSulad: fix testcases fail Signed-off-by: LiFeng --- src/namespace.h | 8 ++ .../image/oci/oci_config_merge/CMakeLists.txt | 12 +- test/mocks/container_unix_mock.cc | 43 ++++++ test/mocks/container_unix_mock.h | 31 ++++ test/mocks/containers_store_mock.cc | 132 ++++++++++++++++++ test/mocks/containers_store_mock.h | 42 ++++++ test/mocks/namespace_mock.cc | 49 +++++++ test/mocks/namespace_mock.h | 32 +++++ 8 files changed, 347 insertions(+), 2 deletions(-) create mode 100644 test/mocks/container_unix_mock.cc create mode 100644 test/mocks/container_unix_mock.h create mode 100644 test/mocks/containers_store_mock.cc create mode 100644 test/mocks/containers_store_mock.h create mode 100644 test/mocks/namespace_mock.cc create mode 100644 test/mocks/namespace_mock.h diff --git a/src/namespace.h b/src/namespace.h index c684982..6eb6a39 100644 --- a/src/namespace.h +++ b/src/namespace.h @@ -18,6 +18,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + #define SHARE_NAMESPACE_PREFIX "container:" #define SHARE_NAMESPACE_HOST "host" #define SHARE_NAMESPACE_NONE "none" @@ -81,5 +85,9 @@ char *connected_container(const char *mode); char *get_share_namespace_path(const char *type, const char *src_path); +#ifdef __cplusplus +} +#endif + #endif diff --git a/test/image/oci/oci_config_merge/CMakeLists.txt b/test/image/oci/oci_config_merge/CMakeLists.txt index 14d964a..fd42c47 100644 --- a/test/image/oci/oci_config_merge/CMakeLists.txt +++ b/test/image/oci/oci_config_merge/CMakeLists.txt @@ -15,7 +15,6 @@ add_executable(${EXE} ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/sha256/sha256.c ${CMAKE_BINARY_DIR}/json/json_common.c ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/path.c - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/services/execution/spec/specs_mount.c ${CMAKE_BINARY_DIR}/json/host_config.c ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/services/execution/spec/specs_extend.c ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/libisulad.c @@ -31,6 +30,10 @@ add_executable(${EXE} ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/json/schema/src/read_file.c ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/cmd/isulad/arguments.c ${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/image/oci/oci_llt_common.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/containers_store_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/namespace_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks/container_unix_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/services/execution/spec/specs_mount.c ${CMAKE_BINARY_DIR}/json/imagetool_image.c ${CMAKE_BINARY_DIR}/json/oci_image_spec.c oci_config_merge_llt.cc) @@ -41,8 +44,12 @@ target_include_directories(${EXE} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/image/oci ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/cutils ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/map + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/engines ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/json ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/services/execution/spec + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/services/execution/manager + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/services/execution/events ${CMAKE_BINARY_DIR}/json ${CMAKE_BINARY_DIR}/conf ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/sha256 @@ -52,7 +59,8 @@ target_include_directories(${EXE} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/json/schema/src ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/console ${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/image/oci + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../test/mocks ) set_target_properties(${EXE} PROPERTIES LINK_FLAGS "-Wl,--wrap,util_common_calloc_s -Wl,--wrap,util_smart_calloc_s -Wl,--wrap,merge_env") -target_link_libraries(${EXE} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} -lyajl -lz) +target_link_libraries(${EXE} ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIBRARY} ${GMOCK_MAIN_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} -lgrpc++ -lprotobuf -lcrypto -lyajl -lz) diff --git a/test/mocks/container_unix_mock.cc b/test/mocks/container_unix_mock.cc new file mode 100644 index 0000000..51e6fbc --- /dev/null +++ b/test/mocks/container_unix_mock.cc @@ -0,0 +1,43 @@ +/****************************************************************************** + * Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. + * iSulad licensed under the Mulan PSL v1. + * You can use this software according to the terms and conditions of the Mulan PSL v1. + * You may obtain a copy of Mulan PSL v1 at: + * http://license.coscl.org.cn/MulanPSL + * 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 v1 for more details. + * Author: lifeng + * Create: 2020-02-14 + * Description: provide container unix mock + ******************************************************************************/ + +#include "container_unix_mock.h" + +namespace { +MockContainerUnix *g_container_unix_mock = NULL; +} + +void MockContainerUnix_SetMock(MockContainerUnix* mock) +{ + g_container_unix_mock = mock; +} + + +/* container unref */ +void container_unref(container_t *cont) +{ + if (g_container_unix_mock != nullptr) { + return g_container_unix_mock->ContainerUnref(cont); + } + return; +} + +bool has_mount_for(container_t *cont, const char *mpath) +{ + if (g_container_unix_mock != nullptr) { + return g_container_unix_mock->HasMountFor(cont, mpath); + } + return false; +} diff --git a/test/mocks/container_unix_mock.h b/test/mocks/container_unix_mock.h new file mode 100644 index 0000000..7939ddd --- /dev/null +++ b/test/mocks/container_unix_mock.h @@ -0,0 +1,31 @@ +/****************************************************************************** + * Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. + * iSulad licensed under the Mulan PSL v1. + * You can use this software according to the terms and conditions of the Mulan PSL v1. + * You may obtain a copy of Mulan PSL v1 at: + * http://license.coscl.org.cn/MulanPSL + * 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 v1 for more details. + * Author: lifeng + * Create: 2020-02-14 + * Description: provide container unix mock + ******************************************************************************/ + +#ifndef CONTAINER_UNIX_MOCK_H_ +#define CONTAINER_UNIX_MOCK_H_ + +#include +#include "container_unix.h" + +class MockContainerUnix { +public: + virtual ~MockContainerUnix() = default; + MOCK_METHOD2(HasMountFor, bool(container_t *cont, const char *mpath)); + MOCK_METHOD1(ContainerUnref, void(container_t *cont)); +}; + +void MockContainerUnix_SetMock(MockContainerUnix* mock); + +#endif // CONTAINER_UNIX_MOCK_H_ \ No newline at end of file diff --git a/test/mocks/containers_store_mock.cc b/test/mocks/containers_store_mock.cc new file mode 100644 index 0000000..65022f5 --- /dev/null +++ b/test/mocks/containers_store_mock.cc @@ -0,0 +1,132 @@ +/****************************************************************************** + * Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. + * iSulad licensed under the Mulan PSL v1. + * You can use this software according to the terms and conditions of the Mulan PSL v1. + * You may obtain a copy of Mulan PSL v1 at: + * http://license.coscl.org.cn/MulanPSL + * 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 v1 for more details. + * Author: wujing + * Create: 2020-02-14 + * Description: provide containers store mock + ******************************************************************************/ + +#include "containers_store_mock.h" + +namespace { +MockContainersStore *g_containers_store_mock = NULL; +} + +void MockContainersStore_SetMock(MockContainersStore* mock) +{ + g_containers_store_mock = mock; +} + + +int containers_store_init(void) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->ContainersStoreInit(); + } + return -1; +} + +bool containers_store_add(const char *id, container_t *cont) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->ContainersStoreAdd(id, cont); + } + return false; +} + +container_t *containers_store_get(const char *id_or_name) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->ContainersStoreGet(id_or_name); + } + return nullptr; +} + +container_t *containers_store_get_by_prefix(const char *prefix) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->ContainersStoreGetByPrefix(prefix); + } + return nullptr; +} + +bool containers_store_remove(const char *id) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->ContainersStoreRemove(id); + } + return false; +} + +int containers_store_list(container_t ***out, size_t *size) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->ContainersStoreList(out, size); + } + return -1; +} + +char **containers_store_list_ids(void) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->ContainersStoreListIds(); + } + return nullptr; +} + + +int name_index_init(void) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->NameIndexInit(); + } + return -1; +} + +bool name_index_remove(const char *name) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->NameIndexRemove(name); + } + return false; +} + +char *name_index_get(const char *name) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->NameIndexGet(name); + } + return nullptr; +} + + +bool name_index_add(const char *name, const char *id) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->NameIndexAdd(name, id); + } + return false; +} + +map_t *name_index_get_all(void) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->NameIndexGetAll(); + } + return nullptr; +} + +bool name_index_rename(const char *new_name, const char *old_name, const char *id) +{ + if (g_containers_store_mock != nullptr) { + return g_containers_store_mock->NameIndexRename(new_name, old_name, id); + } + return false; +} diff --git a/test/mocks/containers_store_mock.h b/test/mocks/containers_store_mock.h new file mode 100644 index 0000000..3d0f16b --- /dev/null +++ b/test/mocks/containers_store_mock.h @@ -0,0 +1,42 @@ +/****************************************************************************** + * Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. + * iSulad licensed under the Mulan PSL v1. + * You can use this software according to the terms and conditions of the Mulan PSL v1. + * You may obtain a copy of Mulan PSL v1 at: + * http://license.coscl.org.cn/MulanPSL + * 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 v1 for more details. + * Author: wujing + * Create: 2020-02-14 + * Description: provide containers store mock + ******************************************************************************/ + +#ifndef CONTAINERS_STORE_MOCK_H_ +#define CONTAINERS_STORE_MOCK_H_ + +#include +#include "containers_store.h" + +class MockContainersStore { +public: + virtual ~MockContainersStore() = default; + MOCK_METHOD0(ContainersStoreInit, int(void)); + MOCK_METHOD2(ContainersStoreAdd, bool(const char *id, container_t *cont)); + MOCK_METHOD1(ContainersStoreGet, container_t *(const char *id_or_name)); + MOCK_METHOD1(ContainersStoreGetByPrefix, container_t *(const char *prefix)); + MOCK_METHOD1(ContainersStoreRemove, bool(const char *id)); + MOCK_METHOD2(ContainersStoreList, int(container_t ***out, size_t *size)); + MOCK_METHOD0(ContainersStoreListIds, char **(void)); + MOCK_METHOD0(NameIndexInit, int(void)); + MOCK_METHOD1(NameIndexRemove, bool(const char *name)); + MOCK_METHOD1(NameIndexGet, char *(const char *name)); + MOCK_METHOD2(NameIndexAdd, bool(const char *name, const char *id)); + MOCK_METHOD0(NameIndexGetAll, map_t * (void)); + MOCK_METHOD3(NameIndexRename, bool(const char *new_name, const char *old_name, const char *id)); +}; + +void MockContainersStore_SetMock(MockContainersStore* mock); + +#endif // CONTAINERS_STORE_MOCK_H_ \ No newline at end of file diff --git a/test/mocks/namespace_mock.cc b/test/mocks/namespace_mock.cc new file mode 100644 index 0000000..33041ff --- /dev/null +++ b/test/mocks/namespace_mock.cc @@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. + * iSulad licensed under the Mulan PSL v1. + * You can use this software according to the terms and conditions of the Mulan PSL v1. + * You may obtain a copy of Mulan PSL v1 at: + * http://license.coscl.org.cn/MulanPSL + * 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 v1 for more details. + * Author: wujing + * Create: 2020-02-14 + * Description: provide namespace mock + ******************************************************************************/ + +#include "namespace_mock.h" + +namespace { +MockNamespace *g_namespace_mock = NULL; +} + +void MockNamespace_SetMock(MockNamespace* mock) +{ + g_namespace_mock = mock; +} + +char *connected_container(const char *mode) +{ + if (g_namespace_mock != nullptr) { + return g_namespace_mock->ConnectedContainer(mode); + } + return nullptr; +} + +char *get_share_namespace_path(const char *type, const char *src_path) +{ + if (g_namespace_mock != nullptr) { + return g_namespace_mock->GetShareNamespacePath(type, src_path); + } + return nullptr; +} + +char *get_container_process_label(const char *path) +{ + if (g_namespace_mock != nullptr) { + return g_namespace_mock->GetContainerProcessLabel(path); + } + return nullptr; +} diff --git a/test/mocks/namespace_mock.h b/test/mocks/namespace_mock.h new file mode 100644 index 0000000..85f7c85 --- /dev/null +++ b/test/mocks/namespace_mock.h @@ -0,0 +1,32 @@ +/****************************************************************************** + * Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved. + * iSulad licensed under the Mulan PSL v1. + * You can use this software according to the terms and conditions of the Mulan PSL v1. + * You may obtain a copy of Mulan PSL v1 at: + * http://license.coscl.org.cn/MulanPSL + * 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 v1 for more details. + * Author: wujing + * Create: 2020-02-14 + * Description: provide namespace mock + ******************************************************************************/ + +#ifndef NAMESPACE_MOCK_H_ +#define NAMESPACE_MOCK_H_ + +#include +#include "namespace.h" + +class MockNamespace { +public: + virtual ~MockNamespace() = default; + MOCK_METHOD1(ConnectedContainer, char *(const char *mode)); + MOCK_METHOD2(GetShareNamespacePath, char *(const char *type, const char *src_path)); + MOCK_METHOD1(GetContainerProcessLabel, char *(const char *path)); +}; + +void MockNamespace_SetMock(MockNamespace* mock); + +#endif // NAMESPACE_MOCK_H_ -- GitLab