diff --git a/src/services/execution/events/collector.h b/src/services/execution/events/collector.h index c806e0eb86f319caa8fe59707c73753e0e85ddbe..fed55d8f33fb444ab085f7fe610ec7d47c3388dc 100644 --- a/src/services/execution/events/collector.h +++ b/src/services/execution/events/collector.h @@ -21,6 +21,10 @@ #include "libisulad.h" #include "monitord.h" +#ifdef __cplusplus +extern "C" { +#endif + struct context_lists { pthread_mutex_t context_mutex; struct linked_list context_list; @@ -42,5 +46,9 @@ void free_event(struct isulad_events_format *event); int isulad_monitor_send_event(const char *name, runtime_state_t state, int pid, int exit_code); +#ifdef __cplusplus +} +#endif + #endif /* __COLLECTOR_H */ diff --git a/src/services/execution/spec/sysinfo.h b/src/services/execution/spec/sysinfo.h index 2831a53baced171ef656d4501752e4e6065c04d1..7832564d871bfe945ffb4ac66169e8f91281081c 100644 --- a/src/services/execution/spec/sysinfo.h +++ b/src/services/execution/spec/sysinfo.h @@ -22,6 +22,10 @@ #define etcOsRelease "/etc/os-release" #define altOsRelease "/usr/lib/os-release" +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { bool limit; bool swap; @@ -134,5 +138,9 @@ mountinfo_t *find_mount_info(mountinfo_t **minfos, const char *dir); void free_mounts_info(mountinfo_t **minfos); +#ifdef __cplusplus +} +#endif + #endif /* __SYSINFO_H */ diff --git a/src/services/execution/spec/verify.h b/src/services/execution/spec/verify.h index e1426b9dbdde5b6a85217c15b8bdcfa0f58f0792..6801a903d9f070ec229d7d55ecc24fdcf56d514b 100644 --- a/src/services/execution/spec/verify.h +++ b/src/services/execution/spec/verify.h @@ -17,6 +17,11 @@ #include "oci_runtime_spec.h" #include "host_config.h" +#include "container_config.h" + +#ifdef __cplusplus +extern "C" { +#endif int verify_container_settings(const oci_runtime_spec *container); @@ -28,6 +33,9 @@ int verify_host_config_settings(host_config *hostconfig, bool update); int verify_health_check_parameter(const container_config *container_spec); +#ifdef __cplusplus +} +#endif #endif /* __VERIFY_H */ diff --git a/test/mocks/collector_mock.cc b/test/mocks/collector_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..f1c8de571e670d08336cae299db783f511ca2bdc --- /dev/null +++ b/test/mocks/collector_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: jikui + * Create: 2020-02-25 + * Description: provide collector mock + ******************************************************************************/ + +#include "collector_mock.h" + +namespace { +MockCollector *g_collector_mock = NULL; +} + +void MockCollector_SetMock(MockCollector *mock) +{ + g_collector_mock = mock; +} + +int events_subscribe(const char *name, const types_timestamp_t *since, const types_timestamp_t *until, + const stream_func_wrapper *stream) +{ + if (g_collector_mock != nullptr) { + return g_collector_mock->EventsSubscribe(name, since, until, stream); + } + return 0; +} + +int add_monitor_client(char *name, const types_timestamp_t *since, const types_timestamp_t *until, + const stream_func_wrapper *stream) +{ + if (g_collector_mock != nullptr) { + return g_collector_mock->AddMonitorClient(name, since, until, stream); + } + return 0; +} diff --git a/test/mocks/collector_mock.h b/test/mocks/collector_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..350d5fccef158afd44caf92e56b53771e4140f1d --- /dev/null +++ b/test/mocks/collector_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: jikui + * Create: 2020-02-25 + * Description: provide collector mock + ******************************************************************************/ + +#ifndef COLLECTOR_MOCK_H_ +#define COLLECTOR_MOCK_H_ + +#include +#include "collector.h" + +class MockCollector { +public: + MOCK_METHOD4(EventsSubscribe, int(const char *name, const types_timestamp_t *since, const types_timestamp_t *until, + const stream_func_wrapper *stream)); + MOCK_METHOD4(AddMonitorClient, int(const char *name, const types_timestamp_t *since, const types_timestamp_t *until, + const stream_func_wrapper *stream)); +}; + +void MockCollector_SetMock(MockCollector* mock); + +#endif diff --git a/test/mocks/container_state_mock.cc b/test/mocks/container_state_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..0e88d4efd624f6df4c63c7f6dab0ea58a8f3ea45 --- /dev/null +++ b/test/mocks/container_state_mock.cc @@ -0,0 +1,86 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide container_state mock + ******************************************************************************/ + +#include "container_state_mock.h" + +namespace { +MockContainerState *g_container_state_mock = NULL; +} + +void MockContainerState_SetMock(MockContainerState *mock) +{ + g_container_state_mock = mock; +} + +bool is_running(container_state_t *s) +{ + if (g_container_state_mock != nullptr) { + return g_container_state_mock->IsRunning(s); + } + return true; +} + +bool is_restarting(container_state_t *s) +{ + if (g_container_state_mock != nullptr) { + return g_container_state_mock->IsRestarting(s); + } + return false; +} + +bool is_dead(container_state_t *s) +{ + if (g_container_state_mock != nullptr) { + return g_container_state_mock->IsDead(s); + } + return true; +} + +void container_state_set_error(container_state_t *s, const char *err) +{ + if (g_container_state_mock != nullptr) { + return g_container_state_mock->ContainerStateSetError(s, err); + } +} + +bool is_paused(container_state_t *s) +{ + if (g_container_state_mock != nullptr) { + return g_container_state_mock->IsPaused(s); + } + return true; +} + +void state_reset_paused(container_state_t *s) +{ + if (g_container_state_mock != nullptr) { + return g_container_state_mock->StateResetPaused(s); + } +} + +void state_set_paused(container_state_t *s) +{ + if (g_container_state_mock != nullptr) { + return g_container_state_mock->StateSetPaused(s); + } +} + +bool is_removal_in_progress(container_state_t *s) +{ + if (g_container_state_mock != nullptr) { + return g_container_state_mock->IsRemovalInProgress(s); + } + return true; +} diff --git a/test/mocks/container_state_mock.h b/test/mocks/container_state_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..f64b5bfccd1c53c1643136405d7a001f2455e15d --- /dev/null +++ b/test/mocks/container_state_mock.h @@ -0,0 +1,36 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide container_state mock + ******************************************************************************/ + +#ifndef CONTAINER_STATE_MOCK_H_ +#define CONTAINER_STATE_MOCK_H_ + +#include +#include "container_state.h" + +class MockContainerState { +public: + MOCK_METHOD1(IsRunning, bool(container_state_t *s)); + MOCK_METHOD1(IsPaused, bool(container_state_t *s)); + MOCK_METHOD1(IsRestarting, bool(container_state_t *s)); + MOCK_METHOD1(IsDead, bool(container_state_t *s)); + MOCK_METHOD1(StateResetPaused, void(container_state_t *s)); + MOCK_METHOD2(ContainerStateSetError, void(container_state_t *s, const char *err)); + MOCK_METHOD1(StateSetPaused, void(container_state_t *s)); + MOCK_METHOD1(IsRemovalInProgress, bool(container_state_t *s)); +}; + +void MockContainerState_SetMock(MockContainerState* mock); + +#endif diff --git a/test/mocks/container_unix_mock.cc b/test/mocks/container_unix_mock.cc index bfabfdc0c29091de36ec2f614efcbfdb013a6b7a..cd8374af3435dd0cb9b729601c7b99194c473763 100644 --- a/test/mocks/container_unix_mock.cc +++ b/test/mocks/container_unix_mock.cc @@ -46,3 +46,33 @@ int container_read_proc(uint32_t pid, container_pid_t *pid_info) { return 0; } + +int container_to_disk(const container_t *cont) +{ + if (g_container_unix_mock != nullptr) { + return g_container_unix_mock->ContainerToDisk(cont); + } + return 0; +} + +void container_unlock(container_t *cont) +{ + if (g_container_unix_mock != nullptr) { + return g_container_unix_mock->ContainerUnlock(cont); + } +} + +void container_lock(container_t *cont) +{ + if (g_container_unix_mock != nullptr) { + return g_container_unix_mock->ContainerLock(cont); + } +} + +void container_update_restart_manager(container_t *cont, const host_config_restart_policy *policy) +{ + if (g_container_unix_mock != nullptr) { + return g_container_unix_mock->ContainerUpdateRestartManager(cont, policy); + } +} + diff --git a/test/mocks/container_unix_mock.h b/test/mocks/container_unix_mock.h index 7939ddd72758449a204f5f773eb7a87c3c01465d..4197706d19b31876d0f8426a0419605695b50754 100644 --- a/test/mocks/container_unix_mock.h +++ b/test/mocks/container_unix_mock.h @@ -23,9 +23,13 @@ class MockContainerUnix { public: virtual ~MockContainerUnix() = default; MOCK_METHOD2(HasMountFor, bool(container_t *cont, const char *mpath)); + MOCK_METHOD1(ContainerToDisk, int(const container_t *cont)); + MOCK_METHOD1(ContainerUnlock, void(const container_t *cont)); + MOCK_METHOD1(ContainerLock, void(const container_t *cont)); MOCK_METHOD1(ContainerUnref, void(container_t *cont)); + MOCK_METHOD2(ContainerUpdateRestartManager, void(container_t *cont, const host_config_restart_policy *policy)); }; void MockContainerUnix_SetMock(MockContainerUnix* mock); -#endif // CONTAINER_UNIX_MOCK_H_ \ No newline at end of file +#endif // CONTAINER_UNIX_MOCK_H_ diff --git a/test/mocks/containers_gc_mock.cc b/test/mocks/containers_gc_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..74b8039270a4b57de795e4fcadf08ed569db6735 --- /dev/null +++ b/test/mocks/containers_gc_mock.cc @@ -0,0 +1,33 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide containers_gc mock + ******************************************************************************/ + +#include "containers_gc_mock.h" + +namespace { +MockContainersGc *g_containers_gc_mock = NULL; +} + +void MockContainersGc_SetMock(MockContainersGc *mock) +{ + g_containers_gc_mock = mock; +} + +bool gc_is_gc_progress(const char *id) +{ + if (g_containers_gc_mock != nullptr) { + return g_containers_gc_mock->GcIsGcProgress(id); + } + return true; +} diff --git a/test/mocks/containers_gc_mock.h b/test/mocks/containers_gc_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..c1ea541d8b217967469bb4156abf97a3d6d76bd5 --- /dev/null +++ b/test/mocks/containers_gc_mock.h @@ -0,0 +1,29 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide containers_gc mock + ******************************************************************************/ + +#ifndef CONTAINERS_GC_MOCK_H_ +#define CONTAINERS_GC_MOCK_H_ + +#include +#include "containers_gc.h" + +class MockContainersGc { +public: + MOCK_METHOD1(GcIsGcProgress, bool(const char *id)); +}; + +void MockContainersGc_SetMock(MockContainersGc* mock); + +#endif diff --git a/test/mocks/driver_mock.cc b/test/mocks/driver_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..75f23ee163a85ea31d3d34ace2b7e16d8b23dff6 --- /dev/null +++ b/test/mocks/driver_mock.cc @@ -0,0 +1,25 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide driver mock + ******************************************************************************/ + +#include "driver_mock.h" + +namespace { +MockDriver *g_driver_mock = NULL; +} + +void MockDriver_SetMock(MockDriver *mock) +{ + g_driver_mock = mock; +} diff --git a/test/mocks/driver_mock.h b/test/mocks/driver_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..856f85339bf355c1c2bacb79bd74f227f9064220 --- /dev/null +++ b/test/mocks/driver_mock.h @@ -0,0 +1,27 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide driver mock + ******************************************************************************/ + +#ifndef DRIVER_MOCK_H_ +#define DRIVER_MOCK_H_ + +#include +#include "driver.h" + +class MockDriver { +}; + +void MockDriver_SetMock(MockDriver* mock); + +#endif diff --git a/test/mocks/health_check_mock.cc b/test/mocks/health_check_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..51d84fcbc98b977d3ac5977916e86c2bb26a2cbc --- /dev/null +++ b/test/mocks/health_check_mock.cc @@ -0,0 +1,33 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide health_check mock + ******************************************************************************/ + +#include "health_check_mock.h" + +namespace { +MockHealthCheck *g_health_check_mock = NULL; +} + +void MockHealthCheck_SetMock(MockHealthCheck *mock) +{ + g_health_check_mock = mock; +} + +void update_health_monitor(const char *container_id) +{ + if (g_health_check_mock != nullptr) { + return g_health_check_mock->UpdateHealthMonitor(container_id); + } + return; +} diff --git a/test/mocks/health_check_mock.h b/test/mocks/health_check_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..fce65af0a160138fe5aa735c6df2b1f0db416cd0 --- /dev/null +++ b/test/mocks/health_check_mock.h @@ -0,0 +1,29 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide health_check mock + ******************************************************************************/ + +#ifndef HEALTH_CHECK_MOCK_H_ +#define HEALTH_CHECK_MOCK_H_ + +#include +#include "health_check.h" + +class MockHealthCheck { +public: + MOCK_METHOD1(UpdateHealthMonitor, void(const char *container_id)); +}; + +void MockHealthCheck_SetMock(MockHealthCheck* mock); + +#endif diff --git a/test/mocks/image_mock.cc b/test/mocks/image_mock.cc index 58b5d833e690cac81ba68840a9ca3be2a579df74..7d1cb7f5eb12ef0fba26df12f437bc96ffb0e185 100644 --- a/test/mocks/image_mock.cc +++ b/test/mocks/image_mock.cc @@ -40,3 +40,18 @@ void free_im_storage_status_response(im_storage_status_response *ptr) } return; } + +int im_container_export(const im_export_request *request) +{ + if (g_image_mock != nullptr) { + return g_image_mock->ImContainerExport(request); + } + return 0; +} + +void free_im_export_request(im_export_request *ptr) +{ + if (g_image_mock != nullptr) { + return g_image_mock->FreeImExportRequest(ptr); + } +} diff --git a/test/mocks/image_mock.h b/test/mocks/image_mock.h index 58c293a27ade64870d882f1fd1c0962e018a5b06..7f97e2ad4d2a31ece098cccd2222595acafea573 100644 --- a/test/mocks/image_mock.h +++ b/test/mocks/image_mock.h @@ -24,6 +24,8 @@ public: virtual ~MockImage() = default; MOCK_METHOD2(ImGetStorageStatus, int(const char *, im_storage_status_response **)); MOCK_METHOD1(FreeImStorageStatusResponse, void(im_storage_status_response *)); + MOCK_METHOD1(ImContainerExport, int(const im_export_request *request)); + MOCK_METHOD1(FreeImExportRequest, void(im_export_request *ptr)); }; void MockImage_SetMock(MockImage* mock); diff --git a/test/mocks/isulad_config_mock.cc b/test/mocks/isulad_config_mock.cc index 087dae34e267b009d2729b4cd84c6efbbb19029e..cdef765dc61d344a4286197ddf747ad94c5c737e 100644 --- a/test/mocks/isulad_config_mock.cc +++ b/test/mocks/isulad_config_mock.cc @@ -112,3 +112,19 @@ struct service_arguments *conf_get_server_conf() { return NULL; } + +int get_system_cpu_usage(uint64_t *val) +{ + if (g_isulad_conf_mock != nullptr) { + return g_isulad_conf_mock->GetSystemCpuUsage(val); + } + return 0; +} + +char *conf_get_isulad_storage_driver_backing_fs() +{ + if (g_isulad_conf_mock != nullptr) { + return g_isulad_conf_mock->ConfGetIsuladStorageDriverBackingFs(); + } + return nullptr; +} diff --git a/test/mocks/isulad_config_mock.h b/test/mocks/isulad_config_mock.h index f66c5b05d5f03b44d67145a5e9f4237d4bcd0916..1e1f4083c5bfca7d1c91be62dcab7cd1fc8f8d43 100644 --- a/test/mocks/isulad_config_mock.h +++ b/test/mocks/isulad_config_mock.h @@ -31,6 +31,9 @@ public: MOCK_METHOD0(GetUmask, char *(void)); MOCK_METHOD0(ConfGetGraphRootpath, char *(void)); MOCK_METHOD0(ConfGetIsuladStorageDriver, char *(void)); + MOCK_METHOD1(GetSystemCpuUsage, int(uint64_t *val)); + MOCK_METHOD0(ConfGetIsuladStorageDriverBackingFs, char*()); + }; void MockIsuladConf_SetMock(MockIsuladConf* mock); diff --git a/test/mocks/restartmanager_mock.cc b/test/mocks/restartmanager_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..73a183b1b476d274ece029648f21bf03b30e1b6c --- /dev/null +++ b/test/mocks/restartmanager_mock.cc @@ -0,0 +1,25 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide restartmanager mock + ******************************************************************************/ + +#include "restartmanager_mock.h" + +namespace { +MockRestartmanager *g_restartmanager_mock = NULL; +} + +void MockRestartmanager_SetMock(MockRestartmanager *mock) +{ + g_restartmanager_mock = mock; +} diff --git a/test/mocks/restartmanager_mock.h b/test/mocks/restartmanager_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..a1100e0a0a40ec51b62b11baab455276465ca5fb --- /dev/null +++ b/test/mocks/restartmanager_mock.h @@ -0,0 +1,28 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide restartmanager mock + ******************************************************************************/ + +#ifndef RESTARTMANAGER_MOCK_H_ +#define RESTARTMANAGER_MOCK_H_ + +#include +#include "restartmanager.h" + +class MockRestartmanager { +public: +}; + +void MockRestartmanager_SetMock(MockRestartmanager *mock); + +#endif diff --git a/test/mocks/runtime_mock.cc b/test/mocks/runtime_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..2995a56e7934dcf10b8312b4772061048aeeadfd --- /dev/null +++ b/test/mocks/runtime_mock.cc @@ -0,0 +1,74 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide runtime mock + ******************************************************************************/ + +#include "runtime_mock.h" + +namespace { +MockRuntime *g_runtime_mock = NULL; +} + +void MockRuntime_SetMock(MockRuntime *mock) +{ + g_runtime_mock = mock; +} + +int runtime_pause(const char *name, const char *runtime, const rt_pause_params_t *params) +{ + if (g_runtime_mock != nullptr) { + return g_runtime_mock->RuntimePause(name, runtime, params); + } + return 0; +} + +int runtime_resources_stats(const char *name, const char *runtime, const rt_stats_params_t *params, + struct engine_container_resources_stats_info *rs_stats) +{ + if (g_runtime_mock != nullptr) { + return g_runtime_mock->RuntimeResourcesStats(name, runtime, params, rs_stats); + } + return 0; +} + +int runtime_resume(const char *name, const char *runtime, const rt_resume_params_t *params) +{ + if (g_runtime_mock != nullptr) { + return g_runtime_mock->RuntimeResume(name, runtime, params); + } + return 0; +} + +int runtime_update(const char *name, const char *runtime, const rt_update_params_t *params) +{ + if (g_runtime_mock != nullptr) { + return g_runtime_mock->RuntimeUpdate(name, runtime, params); + } + return 0; +} + +int runtime_resize(const char *name, const char *runtime, const rt_resize_params_t *params) +{ + if (g_runtime_mock != nullptr) { + return g_runtime_mock->RuntimeResize(name, runtime, params); + } + return 0; +} + +int runtime_exec_resize(const char *name, const char *runtime, const rt_exec_resize_params_t *params) +{ + if (g_runtime_mock != nullptr) { + return g_runtime_mock->RuntimeExecResize(name, runtime, params); + } + return 0; +} diff --git a/test/mocks/runtime_mock.h b/test/mocks/runtime_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..99f9b2d373600f9eeccaf0029ed8d7ce5204b84b --- /dev/null +++ b/test/mocks/runtime_mock.h @@ -0,0 +1,35 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide runtime mock + ******************************************************************************/ + +#ifndef RUNTIME_MOCK_H_ +#define RUNTIME_MOCK_H_ + +#include +#include "runtime.h" + +class MockRuntime { +public: + MOCK_METHOD3(RuntimePause, int(const char *name, const char *runtime, const rt_pause_params_t *params)); + MOCK_METHOD3(RuntimeResume, int(const char *name, const char *runtime, const rt_resume_params_t *params)); + MOCK_METHOD3(RuntimeUpdate, int(const char *name, const char *runtime, const rt_update_params_t *params)); + MOCK_METHOD3(RuntimeResize, int(const char *name, const char *runtime, const rt_resize_params_t *params)); + MOCK_METHOD3(RuntimeExecResize, int(const char *name, const char *runtime, const rt_exec_resize_params_t *params)); + MOCK_METHOD4(RuntimeResourcesStats, int(const char *name, const char *runtime, const rt_stats_params_t *params, + struct engine_container_resources_stats_info *rs_stats)); +}; + +void MockRuntime_SetMock(MockRuntime* mock); + +#endif diff --git a/test/mocks/specs_mock.cc b/test/mocks/specs_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..a426c671573b5c5063859f037a58aa40bffc6e5a --- /dev/null +++ b/test/mocks/specs_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: jikui + * Create: 2020-02-25 + * Description: provide specs mock + ******************************************************************************/ + +#include "specs_mock.h" + +namespace { +MockSpecs *g_specs_mock = NULL; +} + +void MockSpecs_SetMock(MockSpecs *mock) +{ + g_specs_mock = mock; +} + +oci_runtime_spec *load_oci_config(const char *rootpath, const char *name) +{ + if (g_specs_mock != nullptr) { + return g_specs_mock->LoadOciConfig(rootpath, name); + } + return nullptr; +} + +int merge_conf_cgroup(oci_runtime_spec *oci_spec, const host_config *host_spec) +{ + if (g_specs_mock != nullptr) { + return g_specs_mock->MergeConfCgroup(oci_spec, host_spec); + } + return 0; +} + +int save_oci_config(const char *id, const char *rootpath, const oci_runtime_spec *oci_spec) +{ + if (g_specs_mock != nullptr) { + return g_specs_mock->SaveOciConfig(id, rootpath, oci_spec); + } + return 0; +} diff --git a/test/mocks/specs_mock.h b/test/mocks/specs_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..6b9849f8489a13b52d85f968a52ed8e3917602f3 --- /dev/null +++ b/test/mocks/specs_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: jikui + * Create: 2020-02-25 + * Description: provide specs mock + ******************************************************************************/ + +#ifndef SPECS_MOCK_H_ +#define SPECS_MOCK_H_ + +#include +#include "specs.h" + +class MockSpecs { +public: + MOCK_METHOD2(LoadOciConfig, oci_runtime_spec * (const char *rootpath, const char *name)); + MOCK_METHOD2(MergeConfCgroup, int(oci_runtime_spec *oci_spec, const host_config *host_spec)); + MOCK_METHOD3(SaveOciConfig, int(const char *id, const char *rootpath, const oci_runtime_spec *oci_spec)); +}; + +void MockSpecs_SetMock(MockSpecs* mock); + +#endif diff --git a/test/mocks/sysinfo_mock.cc b/test/mocks/sysinfo_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..cb1eff506fca231a6079155685e4d3e864adc04c --- /dev/null +++ b/test/mocks/sysinfo_mock.cc @@ -0,0 +1,63 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide sysinfo mock + ******************************************************************************/ + +#include "sysinfo_mock.h" + +namespace { +MockSysinfo *g_sysinfo_mock = NULL; +} + +void MockSysinfo_SetMock(MockSysinfo *mock) +{ + g_sysinfo_mock = mock; +} + +uint64_t get_default_total_mem_size(void) +{ + if (g_sysinfo_mock != nullptr) { + return g_sysinfo_mock->GetDefaultTotalMemSize(); + } + return 0; +} + +mountinfo_t *find_mount_info(mountinfo_t **minfos, const char *dir) +{ + if (g_sysinfo_mock != nullptr) { + return g_sysinfo_mock->FindMountInfo(minfos, dir); + } + return nullptr; +} + +void free_mounts_info(mountinfo_t **minfos) +{ + if (g_sysinfo_mock != nullptr) { + return g_sysinfo_mock->FreeMountsInfo(minfos); + } +} + +char *validate_hugetlb(const char *pagesize, uint64_t limit) +{ + if (g_sysinfo_mock != nullptr) { + return g_sysinfo_mock->ValidateHugetlb(pagesize, limit); + } + return nullptr; +} + +void free_sysinfo(sysinfo_t *sysinfo) +{ + if (g_sysinfo_mock != nullptr) { + return g_sysinfo_mock->FreeSysinfo(sysinfo); + } +} diff --git a/test/mocks/sysinfo_mock.h b/test/mocks/sysinfo_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..1c3d9b477ab59876428bc440b82111eee3d92c95 --- /dev/null +++ b/test/mocks/sysinfo_mock.h @@ -0,0 +1,33 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide sysinfo mock + ******************************************************************************/ + +#ifndef SYSINFO_MOCK_H_ +#define SYSINFO_MOCK_H_ + +#include +#include "sysinfo.h" + +class MockSysinfo { +public: + MOCK_METHOD0(GetDefaultTotalMemSize, uint64_t(void)); + MOCK_METHOD2(FindMountInfo, mountinfo_t*(mountinfo_t **minfos, const char *dir)); + MOCK_METHOD1(FreeMountsInfo, void(mountinfo_t **minfos)); + MOCK_METHOD2(ValidateHugetlb, char*(const char *pagesize, uint64_t limit)); + MOCK_METHOD1(FreeSysinfo, void(sysinfo_t *sysinfo)); +}; + +void MockSysinfo_SetMock(MockSysinfo* mock); + +#endif diff --git a/test/mocks/verify_mock.cc b/test/mocks/verify_mock.cc new file mode 100644 index 0000000000000000000000000000000000000000..6339687e9eb9b1c2d74407e3fbe5975ad70faf03 --- /dev/null +++ b/test/mocks/verify_mock.cc @@ -0,0 +1,33 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide verify mock + ******************************************************************************/ + +#include "verify_mock.h" + +namespace { +MockVerify *g_verify_mock = NULL; +} + +void MockVerify_SetMock(MockVerify *mock) +{ + g_verify_mock = mock; +} + +int verify_host_config_settings(host_config *hostconfig, bool update) +{ + if (g_verify_mock != nullptr) { + return g_verify_mock->VerifyHostConfigSettings(hostconfig, update); + } + return 0; +} diff --git a/test/mocks/verify_mock.h b/test/mocks/verify_mock.h new file mode 100644 index 0000000000000000000000000000000000000000..97a4ada9ac074a7d0c306170353e57c0c6556c5d --- /dev/null +++ b/test/mocks/verify_mock.h @@ -0,0 +1,29 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide verify mock + ******************************************************************************/ + +#ifndef VERIFY_MOCK_H_ +#define VERIFY_MOCK_H_ + +#include +#include "verify.h" + +class MockVerify { +public: + MOCK_METHOD2(VerifyHostConfigSettings, int(host_config *hostconfig, bool update)); +}; + +void MockVerify_SetMock(MockVerify* mock); + +#endif diff --git a/test/runtime/isula/isula_rt_ops_llt.cc b/test/runtime/isula/isula_rt_ops_llt.cc index 728ea2bb5d2d42708f66d24319bbcc33190161e2..ac42b452e91625f74996b92473f478d18268684b 100644 --- a/test/runtime/isula/isula_rt_ops_llt.cc +++ b/test/runtime/isula/isula_rt_ops_llt.cc @@ -127,6 +127,6 @@ TEST_F(IsulaRtOpsUnitTest, test_rt_isula_status) ASSERT_EQ(rt_isula_status("123", nullptr, nullptr, nullptr), -1); ASSERT_EQ(rt_isula_status("123", "kata-runtime", nullptr, nullptr), -1); ASSERT_EQ(rt_isula_status("123", "kata-runtime", ¶ms, nullptr), -1); - params.state="/var/run/isulad/kata-runtime"; + params.state = "/var/run/isulad/kata-runtime"; ASSERT_EQ(rt_isula_status("123", "kata-runtime", ¶ms, &status), -1); } diff --git a/test/services/execution/CMakeLists.txt b/test/services/execution/CMakeLists.txt index a5a75e50696443de9fe110835bf1050ffd3bbbf1..724c02e94df30eae4986da5ce9927791d515d726 100644 --- a/test/services/execution/CMakeLists.txt +++ b/test/services/execution/CMakeLists.txt @@ -1,3 +1,4 @@ project(iSulad_LLT) add_subdirectory(spec) +add_subdirectory(execute) diff --git a/test/services/execution/execute/CMakeLists.txt b/test/services/execution/execute/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..a03abafb88a3220d4fb0f77fcd4d591b12c0b03b --- /dev/null +++ b/test/services/execution/execute/CMakeLists.txt @@ -0,0 +1,3 @@ +project(iSulad_LLT) + +add_subdirectory(execution_extend) diff --git a/test/services/execution/execute/execution_extend/CMakeLists.txt b/test/services/execution/execute/execution_extend/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..f156984693505249f77951953bdc50433fc8137c --- /dev/null +++ b/test/services/execution/execute/execution_extend/CMakeLists.txt @@ -0,0 +1,82 @@ +project(iSulad_LLT) + +SET(EXE execution_extend_llt) + +add_executable(${EXE} + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/log.c + + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/utils_string.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/utils.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/utils_array.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/utils_file.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/utils_convert.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/utils_verify.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/util_atomic.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/utils_regex.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/sha256/sha256.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/error.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/path.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/mainloop.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/filters.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/libisulad.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/console/console.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/utils.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils/utils_verify.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/map/map.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/map/rb_tree.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/services/execution/execute/execution_extend.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/json/oci_runtime_hooks.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/json/schema/src/read_file.c + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/runtime_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/containers_store_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/collector_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/containers_gc_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/container_unix_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/health_check_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/image_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/isulad_config_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/sysinfo_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/container_state_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/verify_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/engine_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/driver_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/restartmanager_mock.cc + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks/specs_mock.cc + ${CMAKE_BINARY_DIR}/json/container_inspect.c + ${CMAKE_BINARY_DIR}/json/oci_runtime_spec.c + ${CMAKE_BINARY_DIR}/json/json_common.c + ${CMAKE_BINARY_DIR}/json/container_stats_request.c + ${CMAKE_BINARY_DIR}/json/container_info.c + ${CMAKE_BINARY_DIR}/json/host_config.c + ${CMAKE_BINARY_DIR}/json/oci_runtime_config_linux.c + ${CMAKE_BINARY_DIR}/json/defs.c + ${CMAKE_BINARY_DIR}/json/docker_types_mount_point.c + execution_extend_llt.cc) + +target_include_directories(${EXE} PUBLIC + ${GTEST_INCLUDE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../include + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/runtime + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cmd + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/sha256 + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/map + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/json + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/engines + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/console + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/config + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/cutils + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/image + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/image/oci + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/services + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/services/execution/manager + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/services/execution/spec + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/services/execution/events + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/services/execution/execute + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/services/graphdriver + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../src/json/schema/src + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../conf + ${CMAKE_CURRENT_SOURCE_DIR}/../../../../mocks + ${CMAKE_BINARY_DIR}/json + ) +target_link_libraries(${EXE} ${GTEST_BOTH_LIBRARIES} ${GMOCK_LIBRARY} ${GMOCK_MAIN_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} -lgrpc++ -lprotobuf -lcrypto -lyajl -lsecurec -lz) diff --git a/test/services/execution/execute/execution_extend/execution_extend_llt.cc b/test/services/execution/execute/execution_extend/execution_extend_llt.cc new file mode 100644 index 0000000000000000000000000000000000000000..fe8ed963f8abba8b7ef426d663dae02538a12518 --- /dev/null +++ b/test/services/execution/execute/execution_extend/execution_extend_llt.cc @@ -0,0 +1,246 @@ +/****************************************************************************** + * 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: jikui + * Create: 2020-02-25 + * Description: provide execution_extend llt test + ******************************************************************************/ + +#include "execution_extend.h" +#include +#include +#include "runtime_mock.h" +#include "containers_store_mock.h" +#include "container_state_mock.h" +#include "sysinfo_mock.h" +#include "health_check_mock.h" +#include "collector_mock.h" +#include "container_unix_mock.h" +#include "image_mock.h" +#include "isulad_config_mock.h" +#include "containers_gc_mock.h" +#include "engine_mock.h" +#include "driver_mock.h" +#include "restartmanager_mock.h" +#include "verify_mock.h" +#include "specs_mock.h" +#include "callback.h" +#include "utils.h" + +using ::testing::Args; +using ::testing::ByRef; +using ::testing::SetArgPointee; +using ::testing::DoAll; +using ::testing::NiceMock; +using ::testing::Return; +using ::testing::NotNull; +using ::testing::AtLeast; +using ::testing::Invoke; +using ::testing::_; + +using namespace std; + +class ExecutionExtendUnitTest : public testing::Test { +public: + void SetUp() override + { + MockRuntime_SetMock(&m_runtime); + MockContainersStore_SetMock(&m_containersStore); + MockCollector_SetMock(&m_collector); + MockContainersGc_SetMock(&m_containersGc); + MockContainerUnix_SetMock(&m_containerUnix); + MockHealthCheck_SetMock(&m_healthCheck); + MockIsuladConf_SetMock(&m_isuladConf); + MockImage_SetMock(&m_image); + MockSysinfo_SetMock(&m_sysinfo); + MockEngine_SetMock(&m_engine); + MockDriver_SetMock(&m_driver); + MockVerify_SetMock(&m_verify); + MockRestartmanager_SetMock(&m_restartmanager); + MockContainerState_SetMock(&m_containerState); + MockSpecs_SetMock(&m_specs); + ::testing::Mock::AllowLeak(&m_runtime); + ::testing::Mock::AllowLeak(&m_containersStore); + ::testing::Mock::AllowLeak(&m_collector); + ::testing::Mock::AllowLeak(&m_containersGc); + ::testing::Mock::AllowLeak(&m_containerUnix); + ::testing::Mock::AllowLeak(&m_healthCheck); + ::testing::Mock::AllowLeak(&m_image); + ::testing::Mock::AllowLeak(&m_isuladConf); + ::testing::Mock::AllowLeak(&m_sysinfo); + ::testing::Mock::AllowLeak(&m_engine); + ::testing::Mock::AllowLeak(&m_driver); + ::testing::Mock::AllowLeak(&m_restartmanager); + ::testing::Mock::AllowLeak(&m_containerState); + ::testing::Mock::AllowLeak(&m_verify); + ::testing::Mock::AllowLeak(&m_specs); + } + void TearDown() override + { + MockRuntime_SetMock(nullptr); + MockContainersStore_SetMock(nullptr); + MockCollector_SetMock(nullptr); + MockContainersGc_SetMock(nullptr); + MockContainerUnix_SetMock(nullptr); + MockHealthCheck_SetMock(nullptr); + MockImage_SetMock(nullptr); + MockIsuladConf_SetMock(nullptr); + MockSysinfo_SetMock(nullptr); + MockEngine_SetMock(nullptr); + MockDriver_SetMock(nullptr); + MockRestartmanager_SetMock(nullptr); + MockContainerState_SetMock(nullptr); + MockVerify_SetMock(nullptr); + MockSpecs_SetMock(nullptr); + } + + NiceMock m_runtime; + NiceMock m_containersStore; + NiceMock m_collector; + NiceMock m_containersGc; + NiceMock m_containerUnix; + NiceMock m_healthCheck; + NiceMock m_image; + NiceMock m_isuladConf; + NiceMock m_sysinfo; + NiceMock m_engine; + NiceMock m_driver; + NiceMock m_restartmanager; + NiceMock m_containerState; + NiceMock m_verify; + NiceMock m_specs; +}; + +int invokeRuntimePause(const char *name, const char *runtime, const rt_pause_params_t *params) +{ + return 0; +} + +int invokeRuntimeResume(const char *name, const char *runtime, const rt_resume_params_t *params) +{ + return 0; +} + +container_t *invokeContainersStoreGet(const char *id_or_name) +{ + if (id_or_name == nullptr) { + return nullptr; + } + container_t *cont = (container_t *)util_common_calloc_s(sizeof(container_t)); + cont->common_config = (container_config_v2_common_config *)util_common_calloc_s(sizeof( + container_config_v2_common_config)); + return cont; +} + +bool invokeGcIsGcProgress(const char *id) +{ + return false; +} + +int invokeContainerToDisk(const container_t *cont) +{ + return 0; +} + +void invokeContainerUnlock(container_t *cont) +{ + return; +} + +void invokeContainerLock(container_t *cont) +{ + return; +} + +void invokeContainerUnref(container_t *cont) +{ + return; +} + +void invokeUpdateHealthMonitor(const char *container_id) +{ + return; +} + +bool invokeIsRunning(container_state_t *s) +{ + return true; +} + +bool invokeIsPaused(container_state_t *s) +{ + return false; +} + +void invokeStateResetPaused(container_state_t *s) +{ + return; +} + +bool invokeIsRestarting(container_state_t *s) +{ + return false; +} + +void invokeContainerStateSetError(container_state_t *s, const char *err) +{ + return; +} + +void invokeStateSetPaused(container_state_t *s) +{ + return; +} + +TEST_F(ExecutionExtendUnitTest, test_container_extend_callback_init_pause) +{ + service_container_callback_t cb; + container_pause_request *request = (container_pause_request*)util_common_calloc_s(sizeof(container_pause_request)); + container_pause_response *response = (container_pause_response*)util_common_calloc_s(sizeof(container_pause_response)); + request->id = util_strdup_s("64ff21ebf4e4"); + + EXPECT_CALL(m_runtime, RuntimePause(_, _, _)).WillRepeatedly(Invoke(invokeRuntimePause)); + EXPECT_CALL(m_containersStore, ContainersStoreGet(_)).WillRepeatedly(Invoke(invokeContainersStoreGet)); + EXPECT_CALL(m_containerState, IsRunning(_)).WillRepeatedly(Invoke(invokeIsRunning)); + EXPECT_CALL(m_containersGc, GcIsGcProgress(_)).WillRepeatedly(Invoke(invokeGcIsGcProgress)); + EXPECT_CALL(m_containerState, IsPaused(_)).WillRepeatedly(Invoke(invokeIsPaused)); + EXPECT_CALL(m_containerState, IsRestarting(_)).WillRepeatedly(Invoke(invokeIsRestarting)); + EXPECT_CALL(m_containerUnix, ContainerToDisk(_)).WillRepeatedly(Invoke(invokeContainerToDisk)); + container_extend_callback_init(&cb); + ASSERT_EQ(cb.pause(request, &response), 0); + testing::Mock::VerifyAndClearExpectations(&m_runtime); + testing::Mock::VerifyAndClearExpectations(&m_containersStore); + testing::Mock::VerifyAndClearExpectations(&m_containerState); + testing::Mock::VerifyAndClearExpectations(&m_containersGc); + testing::Mock::VerifyAndClearExpectations(&m_containerUnix); +} + +TEST_F(ExecutionExtendUnitTest, test_container_extend_callback_init_resume) +{ + service_container_callback_t cb; + container_resume_request *request = (container_resume_request*)util_common_calloc_s(sizeof(container_resume_request)); + container_resume_response *response = (container_resume_response*)util_common_calloc_s(sizeof( + container_resume_response)); + request->id = util_strdup_s("64ff21ebf4e4"); + + EXPECT_CALL(m_runtime, RuntimeResume(_, _, _)).WillRepeatedly(Invoke(invokeRuntimeResume)); + EXPECT_CALL(m_containersStore, ContainersStoreGet(_)).WillRepeatedly(Invoke(invokeContainersStoreGet)); + EXPECT_CALL(m_containerState, IsRunning(_)).WillRepeatedly(Invoke(invokeIsRunning)); + EXPECT_CALL(m_containersGc, GcIsGcProgress(_)).WillRepeatedly(Invoke(invokeGcIsGcProgress)); + EXPECT_CALL(m_containerState, IsPaused(_)).WillOnce(Return(true)); + EXPECT_CALL(m_containerUnix, ContainerToDisk(_)).WillRepeatedly(Invoke(invokeContainerToDisk)); + container_extend_callback_init(&cb); + ASSERT_EQ(cb.resume(request, &response), 0); + testing::Mock::VerifyAndClearExpectations(&m_runtime); + testing::Mock::VerifyAndClearExpectations(&m_containersStore); + testing::Mock::VerifyAndClearExpectations(&m_containerState); + testing::Mock::VerifyAndClearExpectations(&m_containersGc); + testing::Mock::VerifyAndClearExpectations(&m_containerUnix); +}