etmem/0071-etmem-add-code-of-testcase.patch
liubo fe6d2a0135 etmem: sync source repo submission
Sync the features and bug fixed in the etmem
source repository.

Signed-off-by: liubo <liubo254@huawei.com>
(cherry picked from commit 07dd6a411bce9ed3d9f617a6f01ae076e24a3adf)
2022-10-12 10:10:23 +08:00

521 lines
20 KiB
Diff

From 6847808d04c18a76db6bbf38ac6e421a5fac8b7c Mon Sep 17 00:00:00 2001
From: liubo <liubo254@huawei.com>
Date: Mon, 24 Jan 2022 03:50:17 +0800
Subject: [PATCH 21/33] etmem: add code of testcase
add code of testcase of etmem socket functions.
Signed-off-by: liubo <liubo254@huawei.com>
---
etmem/test/conf/conf_cslide/task.config | 16 +-
etmem/test/etmem_migrate_ops_llt/CMakeLists.txt | 54 ++--
.../etmem_migrate_ops_llt/etmem_migrate_ops_llt.c | 5 +-
.../test/etmem_socket_ops_llt_test/CMakeLists.txt | 26 ++
.../etmem_socket_ops_llt.c | 356 +++++++++++++++++++++
5 files changed, 419 insertions(+), 38 deletions(-)
create mode 100644 etmem/test/etmem_socket_ops_llt_test/CMakeLists.txt
create mode 100644 etmem/test/etmem_socket_ops_llt_test/etmem_socket_ops_llt.c
diff --git a/etmem/test/conf/conf_cslide/task.config b/etmem/test/conf/conf_cslide/task.config
index 336be39..9719cb6 100644
--- a/etmem/test/conf/conf_cslide/task.config
+++ b/etmem/test/conf/conf_cslide/task.config
@@ -1,9 +1,9 @@
-[task]
-project=test
-engine=cslide
-name=background1
-type=pid
-value=1
-vm_flags=ht
-anon_only=no
+[task]
+project=test
+engine=cslide
+name=background1
+type=pid
+value=1
+vm_flags=ht
+anon_only=no
ign_host=yes
\ No newline at end of file
diff --git a/etmem/test/etmem_migrate_ops_llt/CMakeLists.txt b/etmem/test/etmem_migrate_ops_llt/CMakeLists.txt
index a9487af..d998af7 100644
--- a/etmem/test/etmem_migrate_ops_llt/CMakeLists.txt
+++ b/etmem/test/etmem_migrate_ops_llt/CMakeLists.txt
@@ -1,27 +1,27 @@
-# /******************************************************************************
-# * Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
-# * etmem is 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: liubo
-# * Create: 2021-12-10
-# * Description: CMakefileList for etmem_migrate_ops_llt to compile
-# ******************************************************************************/
-
-project(etmem)
-
-INCLUDE_DIRECTORIES(../../inc/etmem_inc)
-INCLUDE_DIRECTORIES(../../inc/etmemd_inc)
-INCLUDE_DIRECTORIES(${GLIB2_INCLUDE_DIRS})
-
-SET(EXE etmem_migrate_ops_llt)
-
-add_executable(${EXE} etmem_migrate_ops_llt.c)
-
-set_target_properties(${EXE} PROPERTIES LINK_FLAGS "-Wl,--wrap,get_mem_from_proc_file")
-target_link_libraries(${EXE} cunit ${BUILD_DIR}/lib/libetmemd.so pthread dl rt boundscheck numa ${GLIB2_LIBRARIES})
+# /******************************************************************************
+# * Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
+# * etmem is 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: liubo
+# * Create: 2021-12-10
+# * Description: CMakefileList for etmem_migrate_ops_llt to compile
+# ******************************************************************************/
+
+project(etmem)
+
+INCLUDE_DIRECTORIES(../../inc/etmem_inc)
+INCLUDE_DIRECTORIES(../../inc/etmemd_inc)
+INCLUDE_DIRECTORIES(${GLIB2_INCLUDE_DIRS})
+
+SET(EXE etmem_migrate_ops_llt)
+
+add_executable(${EXE} etmem_migrate_ops_llt.c)
+
+set_target_properties(${EXE} PROPERTIES LINK_FLAGS "-Wl,--wrap,get_mem_from_proc_file")
+target_link_libraries(${EXE} cunit ${BUILD_DIR}/lib/libetmemd.so pthread dl rt boundscheck numa ${GLIB2_LIBRARIES})
diff --git a/etmem/test/etmem_migrate_ops_llt/etmem_migrate_ops_llt.c b/etmem/test/etmem_migrate_ops_llt/etmem_migrate_ops_llt.c
index 2758680..5c9b0d4 100644
--- a/etmem/test/etmem_migrate_ops_llt/etmem_migrate_ops_llt.c
+++ b/etmem/test/etmem_migrate_ops_llt/etmem_migrate_ops_llt.c
@@ -65,8 +65,7 @@ static struct memory_grade *get_memory_grade(void)
memory_grade = (struct memory_grade *)calloc(1, sizeof(struct memory_grade));
CU_ASSERT_PTR_NOT_NULL(memory_grade);
- while (page_refs != NULL)
- {
+ while (page_refs != NULL) {
if ((page_refs)->count >= WATER_LINE_TEMP) {
page_refs = add_page_refs_into_memory_grade(page_refs, &memory_grade->hot_pages);
continue;
@@ -104,7 +103,7 @@ static void test_etmem_migrate_ok(void)
memory_grade = get_memory_grade();
CU_ASSERT_PTR_NOT_NULL(memory_grade);
- CU_ASSERT_EQUAL(etmemd_grade_migrate("1", memory_grade), -1);
+ CU_ASSERT_EQUAL(etmemd_grade_migrate("1", memory_grade), 0);
clean_memory_grade_unexpected(&memory_grade);
CU_ASSERT_PTR_NULL(memory_grade);
diff --git a/etmem/test/etmem_socket_ops_llt_test/CMakeLists.txt b/etmem/test/etmem_socket_ops_llt_test/CMakeLists.txt
new file mode 100644
index 0000000..7cc5343
--- /dev/null
+++ b/etmem/test/etmem_socket_ops_llt_test/CMakeLists.txt
@@ -0,0 +1,26 @@
+# /******************************************************************************
+# * Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
+# * etmem is 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: liubo
+# * Create: 2021-12-10
+# * Description: CMakefileList for etmem_log_ops_llt to compile
+# ******************************************************************************/
+
+project(etmem)
+
+INCLUDE_DIRECTORIES(../../inc/etmem_inc)
+INCLUDE_DIRECTORIES(../../inc/etmemd_inc)
+INCLUDE_DIRECTORIES(${GLIB2_INCLUDE_DIRS})
+
+SET(EXE etmem_socket_ops_llt)
+
+add_executable(${EXE} etmem_socket_ops_llt.c)
+
+target_link_libraries(${EXE} cunit ${BUILD_DIR}/lib/libetmemd.so pthread dl rt boundscheck numa ${GLIB2_LIBRARIES})
diff --git a/etmem/test/etmem_socket_ops_llt_test/etmem_socket_ops_llt.c b/etmem/test/etmem_socket_ops_llt_test/etmem_socket_ops_llt.c
new file mode 100644
index 0000000..387ffd1
--- /dev/null
+++ b/etmem/test/etmem_socket_ops_llt_test/etmem_socket_ops_llt.c
@@ -0,0 +1,356 @@
+/******************************************************************************
+ * Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
+ * etmem is 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: liubo
+ * Create: 2021-08-14
+ * Description: This is a source file of the unit test for rpc functions in etmem.
+ ******************************************************************************/
+
+#include <sys/file.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <pthread.h>
+#include <unistd.h>
+
+#include <CUnit/Basic.h>
+#include <CUnit/Automated.h>
+#include <CUnit/Console.h>
+
+#include "etmem_common.h"
+#include "etmem_rpc.h"
+#include "etmemd_rpc.h"
+#include "securec.h"
+#include "etmem.h"
+
+#define SOCK_NAME_MAX_LEN 108
+#define RPC_SEND_FILE_MAX 512
+#define SLEEP_TIME_ONE_T_US 1000
+
+static char *get_length_str(unsigned int length)
+{
+ char *result = NULL;
+ unsigned char i = 'a';
+ unsigned int j;
+ result = (char *)calloc(length + 1, sizeof(char));
+ if (result == NULL) {
+ return NULL;
+ }
+
+ for (j = 0; j < length; j++) {
+ result[j] = i;
+ }
+
+ return result;
+}
+
+static void test_sock_name_error(void)
+{
+ char *name = NULL;
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name(NULL), -1);
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name(""), -1);
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name("name"), 0);
+
+ name = get_length_str(SOCK_NAME_MAX_LEN - 1);
+ CU_ASSERT_PTR_NOT_NULL(name);
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name(name), -1);
+ free(name);
+
+ name = get_length_str(SOCK_NAME_MAX_LEN);
+ CU_ASSERT_PTR_NOT_NULL(name);
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name(name), -1);
+ free(name);
+
+ name = get_length_str(SOCK_NAME_MAX_LEN + 1);
+ CU_ASSERT_PTR_NOT_NULL(name);
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name(name), -1);
+ free(name);
+}
+
+static void test_sock_name_ok(void)
+{
+ char *name = NULL;
+
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name("name"), 0);
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name("n"), 0);
+
+ name = get_length_str(SOCK_NAME_MAX_LEN - 2);
+ CU_ASSERT_PTR_NOT_NULL(name);
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name(name), 0);
+ free(name);
+}
+
+void *etmemd_rpc_server_start(void *msg)
+{
+ char *socket_name = (char *)msg;
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name(socket_name), -1);
+ etmemd_rpc_server();
+}
+
+void *etmemd_rpc_server_start_ok(void *msg)
+{
+ char *socket_name = (char *)msg;
+ CU_ASSERT_EQUAL(etmemd_parse_sock_name(socket_name), 0);
+ etmemd_rpc_server();
+}
+
+static struct mem_proj *alloc_proj(int cmd, char *proj_name,
+ char *file_name, char *sock_name)
+{
+ struct mem_proj *proj = NULL;
+ proj = (struct mem_proj *)calloc(1, sizeof(struct mem_proj));
+ CU_ASSERT_PTR_NOT_NULL(proj);
+
+ proj->cmd = cmd;
+ proj->file_name = file_name;
+ proj->proj_name = proj_name;
+ proj->sock_name = sock_name;
+
+ return proj;
+}
+
+static int etmem_socket_client(int cmd, char *proj_name,
+ char *file_name, char *sock_name)
+{
+ int ret;
+ struct mem_proj *proj = NULL;
+ proj = alloc_proj(cmd, proj_name, file_name, sock_name);
+ ret = etmem_rpc_client(proj);
+ free(proj);
+ if (ret == 0) {
+ return 0;
+ }
+ return -1;
+}
+
+static void etmem_pro_add_error(void)
+{
+ char *file_name = NULL;
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, NULL, NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, NULL, "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, NULL, "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, NULL, file_name, ""), -1);
+ free(file_name);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, NULL, "file_name", "sock_name"), -1);
+
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "", NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "", "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "", "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "", file_name, ""), -1);
+ free(file_name);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "", "file_name", "sock_name"), -1);
+
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "test", NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "test", "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "test", "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "test", file_name, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "test", "file_name", "sock_name"), -1);
+ free(file_name);
+}
+
+static void etmem_pro_del_error(void)
+{
+ char *file_name = NULL;
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, NULL, NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, NULL, "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, NULL, "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, NULL, file_name, ""), -1);
+ free(file_name);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, NULL, "file_name", "sock_name"), -1);
+
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "", NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "", "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "", "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "", file_name, ""), -1);
+ free(file_name);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "", "file_name", "sock_name"), -1);
+
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "test", NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "test", "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "test", "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "test", file_name, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "test", "file_name", "sock_name"), -1);
+ free(file_name);
+}
+
+static void etmem_pro_start_error(void)
+{
+ char *file_name = NULL;
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, NULL, NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, NULL, "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, NULL, "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, NULL, file_name, ""), -1);
+ free(file_name);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, NULL, "file_name", "sock_name"), -1);
+
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "", NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "", "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "", "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "", file_name, ""), -1);
+ free(file_name);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "", "file_name", "sock_name"), -1);
+
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "test", NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "test", "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "test", "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "test", file_name, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "test", "file_name", "sock_name"), -1);
+ free(file_name);
+}
+
+static void etmem_pro_stop_error(void)
+{
+ char *file_name = NULL;
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, NULL, NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, NULL, "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, NULL, "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, NULL, file_name, ""), -1);
+ free(file_name);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, NULL, "file_name", "sock_name"), -1);
+
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "", NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "", "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "", "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "", file_name, ""), -1);
+ free(file_name);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "", "file_name", "sock_name"), -1);
+
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "test", NULL, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "test", "", ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "test", "file_name", ""), -1);
+ file_name = get_length_str(RPC_SEND_FILE_MAX);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "test", file_name, ""), -1);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "test", "file_name", "sock_name"), -1);
+ free(file_name);
+}
+
+static void test_socket_client_error(void)
+{
+ struct mem_proj *proj = NULL;
+ char *project_name = NULL;
+ char *file_name = NULL;
+ char *sock_name = NULL;
+ char *msg = "etmem_error_sock";
+
+ pthread_t etmem_socket_test;
+
+ CU_ASSERT_EQUAL(pthread_create(&etmem_socket_test, NULL, etmemd_rpc_server_start, NULL), EOK);
+ CU_ASSERT_EQUAL(pthread_create(&etmem_socket_test, NULL,
+ etmemd_rpc_server_start_ok, (void *)msg), EOK);
+ usleep(SLEEP_TIME_ONE_T_US);
+ etmem_pro_add_error();
+ etmem_pro_del_error();
+ etmem_pro_start_error();
+ etmem_pro_stop_error();
+
+ etmemd_handle_signal();
+}
+
+static void test_socket_client_ok(void)
+{
+ struct mem_proj *proj = NULL;
+ char *project_name = NULL;
+ char *file_name = NULL;
+ char *sock_name = NULL;
+ char *msg = "etmem_ok_sock";
+
+ pthread_t etmem_socket_test_ok;
+
+ CU_ASSERT_EQUAL(pthread_create(&etmem_socket_test_ok, NULL,
+ etmemd_rpc_server_start_ok, (void *)msg), EOK);
+ usleep(SLEEP_TIME_ONE_T_US);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_ADD, "test",
+ "../conf/conf_slide/config_file", msg), 0);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_SHOW, "test",
+ "../conf/conf_slide/config_file", msg), 0);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_START, "test",
+ "../conf/conf_slide/config_file", msg), 0);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_STOP, "test",
+ "../conf/conf_slide/config_file", msg), 0);
+ CU_ASSERT_EQUAL(etmem_socket_client(ETMEM_CMD_DEL, "test",
+ "../conf/conf_slide/config_file", msg), 0);
+
+ etmemd_handle_signal();
+}
+
+typedef enum {
+ CUNIT_SCREEN = 0,
+ CUNIT_XMLFILE,
+ CUNIT_CONSOLE
+} cu_run_mode;
+
+int main(int argc, const char **argv)
+{
+ CU_pSuite suite;
+ CU_pTest pTest;
+ unsigned int num_failures;
+ cu_run_mode cunit_mode = CUNIT_SCREEN;
+ int error_num;
+
+ if (argc > 1) {
+ cunit_mode = atoi(argv[1]);
+ }
+
+ if (CU_initialize_registry() != CUE_SUCCESS) {
+ return -CU_get_error();
+ }
+
+ suite = CU_add_suite("etmem_socket_ops", NULL, NULL);
+ if (suite == NULL) {
+ goto ERROR;
+ }
+
+ if (CU_ADD_TEST(suite, test_sock_name_error) == NULL ||
+ CU_ADD_TEST(suite, test_sock_name_ok) == NULL ||
+ CU_ADD_TEST(suite, test_socket_client_error) == NULL ||
+ CU_ADD_TEST(suite, test_socket_client_ok) == NULL) {
+ printf("CU_ADD_TEST fail. \n");
+ goto ERROR;
+ }
+
+ switch (cunit_mode) {
+ case CUNIT_SCREEN:
+ CU_basic_set_mode(CU_BRM_VERBOSE);
+ CU_basic_run_tests();
+ break;
+ case CUNIT_XMLFILE:
+ CU_set_output_filename("etmemd_rpc.c");
+ CU_automated_run_tests();
+ break;
+ case CUNIT_CONSOLE:
+ CU_console_run_tests();
+ break;
+ default:
+ printf("not support cunit mode, only support: "
+ "0 for CUNIT_SCREEN, 1 for CUNIT_XMLFILE, 2 for CUNIT_CONSOLE\n");
+ goto ERROR;
+ }
+
+ num_failures = CU_get_number_of_failures();
+ CU_cleanup_registry();
+ return num_failures;
+
+ERROR:
+ error_num = CU_get_error();
+ CU_cleanup_registry();
+ return -error_num;
+}
--
1.8.3.1