diff options
Diffstat (limited to 'extras/libmemif/test')
-rw-r--r-- | extras/libmemif/test/CMakeLists.txt | 37 | ||||
-rw-r--r-- | extras/libmemif/test/main_test.c | 945 | ||||
-rw-r--r-- | extras/libmemif/test/main_test.h | 25 | ||||
-rw-r--r-- | extras/libmemif/test/socket_test.c | 658 | ||||
-rw-r--r-- | extras/libmemif/test/socket_test.h | 25 | ||||
-rw-r--r-- | extras/libmemif/test/suite_main/CMakeLists.txt | 18 | ||||
-rw-r--r-- | extras/libmemif/test/suite_main/memif_main_test.c | 388 | ||||
-rw-r--r-- | extras/libmemif/test/suite_socket/CMakeLists.txt | 18 | ||||
-rw-r--r-- | extras/libmemif/test/suite_socket/memif_socket_test.c | 401 | ||||
-rw-r--r-- | extras/libmemif/test/unit_test.c | 63 | ||||
-rw-r--r-- | extras/libmemif/test/unit_test.h | 39 |
11 files changed, 827 insertions, 1790 deletions
diff --git a/extras/libmemif/test/CMakeLists.txt b/extras/libmemif/test/CMakeLists.txt index 79754a2f8b7..cdb0b87f958 100644 --- a/extras/libmemif/test/CMakeLists.txt +++ b/extras/libmemif/test/CMakeLists.txt @@ -1,35 +1,2 @@ -# Copyright (c) 2017 Cisco and/or its affiliates. -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at: -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -cmake_minimum_required(VERSION 3.5 FATAL_ERROR) - -set(HEADERS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) -set(TEST_NAME libmemif-test) -set(TEST_LIBS m rt) - -find_package(Subunit QUIET) -if (NOT SUBUNIT_LIBRARY) - set(SUBUNIT_LIBRARY "") -endif () - -set(SOURCE_FILES - main_test.c - socket_test.c - unit_test.c -) - -add_executable(${TEST_NAME} ${SOURCE_FILES}) -target_include_directories(${TEST_NAME} PRIVATE $<BUILD_INTERFACE:${HEADERS_DIR}>) -target_link_libraries(${TEST_NAME} memif ${CHECK_LIBRARY} ${SUBUNIT_LIBRARY} ${TEST_LIBS} ${CMAKE_THREAD_LIBS_INIT}) - -add_test(unit_test unit-test) +add_subdirectory(suite_socket) +add_subdirectory(suite_main) diff --git a/extras/libmemif/test/main_test.c b/extras/libmemif/test/main_test.c deleted file mode 100644 index 8ad9961157f..00000000000 --- a/extras/libmemif/test/main_test.c +++ /dev/null @@ -1,945 +0,0 @@ -/* - *------------------------------------------------------------------ - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------ - */ -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> - -#include <main_test.h> - -#include <memif_private.h> - -#define SOCKET_FILENAME "/run/vpp/memif.sock" - -uint8_t ready_called; -#define read_call (1 << 0) -#define write_call (1 << 1) -#define error_call (1 << 2) - -int -read_fn (memif_connection_t * c) -{ - ready_called |= read_call; - return 0; -} - -int -write_fn (memif_connection_t * c) -{ - ready_called |= write_call; - return 0; -} - -int -error_fn (memif_connection_t * c) -{ - ready_called |= error_call; - return 0; -} - -static void -register_fd_ready_fn (memif_connection_t * c, - memif_fn * read_fn, memif_fn * write_fn, - memif_fn * error_fn) -{ - c->read_fn = read_fn; - c->write_fn = write_fn; - c->error_fn = error_fn; -} - -START_TEST (test_init) -{ - int err; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - libmemif_main_t *lm = &libmemif_main; - - ck_assert_ptr_ne (lm, NULL); - ck_assert_ptr_ne (lm->control_fd_update, NULL); - ck_assert_int_gt (lm->timerfd, 2); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; -} - -END_TEST -START_TEST (test_init_epoll) -{ - int err; - - if ((err = - memif_init (NULL, TEST_APP_NAME, NULL, NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - libmemif_main_t *lm = &libmemif_main; - - ck_assert_ptr_ne (lm, NULL); - ck_assert_ptr_ne (lm->control_fd_update, NULL); - ck_assert_int_gt (lm->timerfd, 2); - ck_assert_int_gt (lm->epfd, -1); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; -} - -END_TEST -START_TEST (test_create) -{ - int err; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - ck_assert_ptr_ne (c, NULL); - - ck_assert_uint_eq (c->args.interface_id, args.interface_id); - ck_assert_uint_eq (c->args.is_master, args.is_master); - ck_assert_uint_eq (c->args.mode, args.mode); - - ck_assert_uint_eq (c->args.num_s2m_rings, MEMIF_DEFAULT_TX_QUEUES); - ck_assert_uint_eq (c->args.num_m2s_rings, MEMIF_DEFAULT_RX_QUEUES); - ck_assert_uint_eq (c->args.buffer_size, MEMIF_DEFAULT_BUFFER_SIZE); - ck_assert_uint_eq (c->args.log2_ring_size, MEMIF_DEFAULT_LOG2_RING_SIZE); - - ck_assert_ptr_eq (c->msg_queue, NULL); - ck_assert_ptr_eq (c->regions, NULL); - ck_assert_ptr_eq (c->tx_queues, NULL); - ck_assert_ptr_eq (c->rx_queues, NULL); - - ck_assert_int_eq (c->fd, -1); - - ck_assert_ptr_ne (c->on_connect, NULL); - ck_assert_ptr_ne (c->on_disconnect, NULL); - ck_assert_ptr_ne (c->on_interrupt, NULL); - - ck_assert_str_eq ((char *)c->args.interface_name, (char *)args.interface_name); - - struct itimerspec timer; - timerfd_gettime (lm->timerfd, &timer); - - ck_assert_msg (timer.it_interval.tv_sec == lm->arm.it_interval.tv_sec, - "timerfd not armed!"); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_create_master) -{ - int err, rv; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - args.is_master = 1; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - ck_assert_ptr_ne (c, NULL); - - ck_assert_uint_eq (c->args.interface_id, args.interface_id); - ck_assert_uint_eq (c->args.is_master, args.is_master); - ck_assert_uint_eq (c->args.mode, args.mode); - - ck_assert_uint_eq (c->args.num_s2m_rings, MEMIF_DEFAULT_TX_QUEUES); - ck_assert_uint_eq (c->args.num_m2s_rings, MEMIF_DEFAULT_RX_QUEUES); - ck_assert_uint_eq (c->args.buffer_size, MEMIF_DEFAULT_BUFFER_SIZE); - ck_assert_uint_eq (c->args.log2_ring_size, MEMIF_DEFAULT_LOG2_RING_SIZE); - - ck_assert_ptr_eq (c->msg_queue, NULL); - ck_assert_ptr_eq (c->regions, NULL); - ck_assert_ptr_eq (c->tx_queues, NULL); - ck_assert_ptr_eq (c->rx_queues, NULL); - - ck_assert_int_eq (c->fd, -1); - - ck_assert_ptr_ne (c->on_connect, NULL); - ck_assert_ptr_ne (c->on_disconnect, NULL); - ck_assert_ptr_ne (c->on_interrupt, NULL); - - ck_assert_str_eq ((char *)c->args.interface_name, (char *)args.interface_name); - - struct stat file_stat; - - rv = stat (SOCKET_FILENAME, &file_stat); - ck_assert_int_eq (rv, 0); - - ck_assert (S_ISSOCK (file_stat.st_mode)); - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_create_mult) -{ - int err; - memif_conn_handle_t conn = NULL; - memif_conn_handle_t conn1 = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - args.interface_id = 1; - - if ((err = memif_create (&conn1, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - memif_connection_t *c1 = (memif_connection_t *) conn1; - - ck_assert_ptr_ne (c, NULL); - ck_assert_ptr_ne (c1, NULL); - - ck_assert_uint_eq (c->args.interface_id, 0); - ck_assert_uint_eq (c->args.is_master, args.is_master); - ck_assert_uint_eq (c->args.mode, args.mode); - ck_assert_uint_eq (c1->args.interface_id, 1); - ck_assert_uint_eq (c1->args.is_master, args.is_master); - ck_assert_uint_eq (c1->args.mode, args.mode); - - ck_assert_uint_eq (c->args.num_s2m_rings, MEMIF_DEFAULT_TX_QUEUES); - ck_assert_uint_eq (c->args.num_m2s_rings, MEMIF_DEFAULT_RX_QUEUES); - ck_assert_uint_eq (c->args.buffer_size, MEMIF_DEFAULT_BUFFER_SIZE); - ck_assert_uint_eq (c->args.log2_ring_size, MEMIF_DEFAULT_LOG2_RING_SIZE); - ck_assert_uint_eq (c1->args.num_s2m_rings, MEMIF_DEFAULT_TX_QUEUES); - ck_assert_uint_eq (c1->args.num_m2s_rings, MEMIF_DEFAULT_RX_QUEUES); - ck_assert_uint_eq (c1->args.buffer_size, MEMIF_DEFAULT_BUFFER_SIZE); - ck_assert_uint_eq (c1->args.log2_ring_size, MEMIF_DEFAULT_LOG2_RING_SIZE); - - ck_assert_ptr_eq (c->msg_queue, NULL); - ck_assert_ptr_eq (c->regions, NULL); - ck_assert_ptr_eq (c->tx_queues, NULL); - ck_assert_ptr_eq (c->rx_queues, NULL); - ck_assert_ptr_eq (c1->msg_queue, NULL); - ck_assert_ptr_eq (c1->regions, NULL); - ck_assert_ptr_eq (c1->tx_queues, NULL); - ck_assert_ptr_eq (c1->rx_queues, NULL); - - ck_assert_int_eq (c->fd, -1); - ck_assert_int_eq (c1->fd, -1); - - ck_assert_ptr_ne (c->on_connect, NULL); - ck_assert_ptr_ne (c->on_disconnect, NULL); - ck_assert_ptr_ne (c->on_interrupt, NULL); - ck_assert_ptr_ne (c1->on_connect, NULL); - ck_assert_ptr_ne (c1->on_disconnect, NULL); - ck_assert_ptr_ne (c1->on_interrupt, NULL); - - ck_assert_str_eq ((char *)c->args.interface_name, (char *)args.interface_name); - ck_assert_str_eq ((char *)c1->args.interface_name, (char *)args.interface_name); - - struct itimerspec timer; - timerfd_gettime (lm->timerfd, &timer); - - ck_assert_msg (timer.it_interval.tv_sec == lm->arm.it_interval.tv_sec, - "timerfd not armed!"); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_control_fd_handler) -{ - int err; - ready_called = 0; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - args.num_s2m_rings = 2; - args.num_m2s_rings = 2; - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - if ((err = - memif_control_fd_handler (lm->timerfd, - MEMIF_FD_EVENT_READ)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_NO_FILE, "err code: %u, err msg: %s", err, - memif_strerror (err)); - - register_fd_ready_fn (c, read_fn, write_fn, error_fn); - c->fd = 69; - lm->control_list[0].key = c->fd; - lm->control_list[0].data_struct = c; - - if ((err = - memif_control_fd_handler (c->fd, - MEMIF_FD_EVENT_READ)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert (ready_called & read_call); - - if ((err = - memif_control_fd_handler (c->fd, - MEMIF_FD_EVENT_WRITE)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert (ready_called & write_call); - - if ((err = - memif_control_fd_handler (c->fd, - MEMIF_FD_EVENT_ERROR)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert (ready_called & error_call); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_buffer_alloc) -{ - int err, i; - uint8_t qid; - uint16_t buf; - memif_buffer_t *bufs; - uint16_t max_buf = 10; - ready_called = 0; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - args.num_s2m_rings = 2; - args.num_m2s_rings = 2; - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - c->run_args.num_s2m_rings = 2; - c->run_args.num_m2s_rings = 2; - c->run_args.log2_ring_size = 10; - c->run_args.buffer_size = 2048; - - if ((err = memif_init_regions_and_queues (c)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - c->fd = 69; - - /* test buffer allocation qid 0 (positive) */ - - bufs = malloc (sizeof (memif_buffer_t) * max_buf); - - qid = 0; - if ((err = - memif_buffer_alloc (conn, qid, bufs, max_buf, - &buf, - MEMIF_DEFAULT_BUFFER_SIZE)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_uint_eq (buf, max_buf); - for (i = 0; i < max_buf; i++) - ck_assert_uint_eq (bufs[i].len, MEMIF_DEFAULT_BUFFER_SIZE); - - /* test buffer allocation qid 1 (positive) */ - free (bufs); - bufs = malloc (sizeof (memif_buffer_t) * max_buf); - - qid = 1; - if ((err = - memif_buffer_alloc (conn, qid, bufs, max_buf, - &buf, - MEMIF_DEFAULT_BUFFER_SIZE)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_uint_eq (buf, max_buf); - for (i = 0; i < max_buf; i++) - ck_assert_uint_eq (bufs[i].len, MEMIF_DEFAULT_BUFFER_SIZE); - - /* test buffer allocation qid 2 (negative) */ - - free (bufs); - bufs = malloc (sizeof (memif_buffer_t) * max_buf); - - qid = 2; - if ((err = - memif_buffer_alloc (conn, qid, bufs, max_buf, - &buf, - MEMIF_DEFAULT_BUFFER_SIZE)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_QID, "err code: %u, err msg: %s", err, - memif_strerror (err)); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - - free (bufs); - bufs = NULL; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_tx_burst) -{ - int err, i; - uint16_t max_buf = 10, buf, tx; - uint8_t qid; - memif_buffer_t *bufs; - ready_called = 0; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - args.num_s2m_rings = 2; - args.num_m2s_rings = 2; - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - c->run_args.num_s2m_rings = 2; - c->run_args.num_m2s_rings = 2; - c->run_args.log2_ring_size = 10; - c->run_args.buffer_size = 2048; - - if ((err = memif_init_regions_and_queues (c)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - c->fd = 69; - - /* test transmit qid 0 (positive) */ - - bufs = malloc (sizeof (memif_buffer_t) * max_buf); - qid = 0; - if ((err = - memif_buffer_alloc (conn, qid, bufs, max_buf, - &buf, - MEMIF_DEFAULT_BUFFER_SIZE)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_uint_eq (buf, max_buf); - for (i = 0; i < max_buf; i++) - ck_assert_uint_eq (bufs[i].len, MEMIF_DEFAULT_BUFFER_SIZE); - - if ((err = - memif_tx_burst (conn, qid, bufs, max_buf, &tx)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_uint_eq (tx, max_buf); - for (i = 0; i < max_buf; i++) - ck_assert_ptr_eq (bufs[i].data, NULL); - - /* test transmit qid 1 (positive) */ - free (bufs); - bufs = malloc (sizeof (memif_buffer_t) * max_buf); - qid = 1; - if ((err = - memif_buffer_alloc (conn, qid, bufs, max_buf, - &buf, - MEMIF_DEFAULT_BUFFER_SIZE)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_uint_eq (buf, max_buf); - for (i = 0; i < max_buf; i++) - ck_assert_uint_eq (bufs[i].len, MEMIF_DEFAULT_BUFFER_SIZE); - - if ((err = - memif_tx_burst (conn, qid, bufs, max_buf, &tx)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_uint_eq (tx, max_buf); - for (i = 0; i < max_buf; i++) - ck_assert_ptr_eq (bufs[i].data, NULL); - - /* test transmit qid 2 (negative) */ - free (bufs); - bufs = malloc (sizeof (memif_buffer_t) * max_buf); - qid = 2; - if ((err = - memif_tx_burst (conn, qid, bufs, max_buf, &tx)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_QID, "err code: %u, err msg: %s", err, - memif_strerror (err)); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - free (bufs); - bufs = NULL; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_rx_burst) -{ - int err, i; - uint16_t max_buf = 10, rx; - uint8_t qid; - memif_buffer_t *bufs; - memif_queue_t *mq; - memif_ring_t *ring; - ready_called = 0; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - args.num_s2m_rings = 2; - args.num_m2s_rings = 2; - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - c->run_args.num_s2m_rings = 2; - c->run_args.num_m2s_rings = 2; - c->run_args.log2_ring_size = 10; - c->run_args.buffer_size = 2048; - - if ((err = memif_init_regions_and_queues (c)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - c->fd = 69; - - /* test receive qid 0 (positive) */ - qid = 0; - mq = &c->rx_queues[qid]; - ring = mq->ring; - ring->tail += max_buf; - - bufs = malloc (sizeof (memif_buffer_t) * max_buf); - - if ((err = - memif_rx_burst (conn, qid, bufs, max_buf, &rx)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_uint_eq (rx, max_buf); - for (i = 0; i < max_buf; i++) - ck_assert_ptr_ne (bufs[i].data, NULL); - - /* test receive qid 1 (positive) */ - qid = 1; - mq = &c->rx_queues[qid]; - ring = mq->ring; - ring->tail += max_buf; - - free (bufs); - bufs = malloc (sizeof (memif_buffer_t) * max_buf); - - if ((err = - memif_rx_burst (conn, qid, bufs, max_buf, &rx)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_uint_eq (rx, max_buf); - for (i = 0; i < max_buf; i++) - ck_assert_ptr_ne (bufs[i].data, NULL); - - /* test receive qid 2 (negative) */ - free (bufs); - bufs = malloc (sizeof (memif_buffer_t) * max_buf); - - if ((err = - memif_rx_burst (conn, qid, bufs, max_buf, &rx)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_QID, "err code: %u, err msg: %s", err, - memif_strerror (err)); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - free (bufs); - bufs = NULL; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_get_details) -{ - int err, i; - ready_called = 0; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - args.num_s2m_rings = 2; - args.num_m2s_rings = 2; - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - c->run_args.num_s2m_rings = 2; - c->run_args.num_m2s_rings = 2; - c->run_args.log2_ring_size = 10; - c->run_args.buffer_size = 2048; - - if ((err = memif_init_regions_and_queues (c)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_details_t md; - memset (&md, 0, sizeof (md)); - ssize_t buflen = 2048; - char *buf = malloc (buflen); - memset (buf, 0, buflen); - - if ((err = memif_get_details (conn, &md, buf, buflen)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_str_eq ((char *)md.if_name, (char *)c->args.interface_name); - ck_assert_str_eq ((char *)md.remote_if_name, (char *)c->remote_if_name); - ck_assert_str_eq ((char *)md.remote_inst_name, (char *)c->remote_name); - ck_assert_str_eq ((char *)md.secret, (char *)c->args.secret); - - ck_assert_uint_eq (md.id, c->args.interface_id); - ck_assert_uint_ne (md.role, c->args.is_master); - ck_assert_uint_eq (md.mode, c->args.mode); - for (i = 0; i < md.rx_queues_num; i++) - { - ck_assert_uint_eq (md.rx_queues[i].qid, i); - ck_assert_uint_eq (md.rx_queues[i].ring_size, - (1 << c->args.log2_ring_size)); - ck_assert_uint_eq (md.rx_queues[i].buffer_size, c->args.buffer_size); - } - for (i = 0; i < md.tx_queues_num; i++) - { - ck_assert_uint_eq (md.tx_queues[i].qid, i); - ck_assert_uint_eq (md.tx_queues[i].ring_size, - (1 << c->args.log2_ring_size)); - ck_assert_uint_eq (md.tx_queues[i].buffer_size, c->args.buffer_size); - } - ck_assert_uint_eq (md.link_up_down, 0); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_init_regions_and_queues) -{ - int err; - ready_called = 0; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - args.num_s2m_rings = 2; - args.num_m2s_rings = 2; - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - c->run_args.num_s2m_rings = 2; - c->run_args.num_m2s_rings = 2; - c->run_args.log2_ring_size = 10; - c->run_args.buffer_size = 2048; - - if ((err = memif_init_regions_and_queues (c)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_ptr_ne (c->regions, NULL); - ck_assert_ptr_ne (c->tx_queues, NULL); - ck_assert_ptr_ne (c->rx_queues, NULL); - - ck_assert_ptr_ne (c->regions->addr, NULL); - ck_assert_ptr_ne (c->tx_queues->ring, NULL); - ck_assert_ptr_ne (c->rx_queues->ring, NULL); - - ck_assert_int_ne (c->regions->fd, -1); - ck_assert_uint_eq (c->tx_queues->ring->cookie, MEMIF_COOKIE); - ck_assert_uint_eq (c->rx_queues->ring->cookie, MEMIF_COOKIE); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_connect1) -{ - int err; - ready_called = 0; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - args.num_s2m_rings = 2; - args.num_m2s_rings = 2; - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - c->run_args.num_s2m_rings = 2; - c->run_args.num_m2s_rings = 2; - c->run_args.log2_ring_size = 10; - c->run_args.buffer_size = 2048; - - if ((err = memif_init_regions_and_queues (c)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - if ((err = memif_connect1 (c)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST -START_TEST (test_disconnect_internal) -{ - int err; - ready_called = 0; - memif_conn_handle_t conn = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - args.num_s2m_rings = 2; - args.num_m2s_rings = 2; - - libmemif_main_t *lm = &libmemif_main; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - strncpy ((char *) args.interface_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_create (&conn, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *c = (memif_connection_t *) conn; - - c->run_args.num_s2m_rings = 2; - c->run_args.num_m2s_rings = 2; - c->run_args.log2_ring_size = 10; - c->run_args.buffer_size = 2048; - - if ((err = memif_init_regions_and_queues (c)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - if ((err = memif_disconnect_internal (c)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_int_eq (c->fd, -1); - - ck_assert_ptr_eq (c->tx_queues, NULL); - ck_assert_ptr_eq (c->rx_queues, NULL); - ck_assert_ptr_eq (c->regions, NULL); - ck_assert_ptr_eq (c->msg_queue, NULL); - - struct itimerspec timer; - timerfd_gettime (lm->timerfd, &timer); - - ck_assert_msg (timer.it_interval.tv_sec == lm->arm.it_interval.tv_sec, - "timerfd not armed!"); - - if (lm->timerfd > 0) - close (lm->timerfd); - lm->timerfd = -1; - - memif_delete (&conn); - ck_assert_ptr_eq (conn, NULL); -} - -END_TEST Suite * -main_suite () -{ - Suite *s; - - TCase *tc_api; - TCase *tc_internal; - - /* create main test suite */ - s = suite_create ("Libmemif main"); - - /* create api test case */ - tc_api = tcase_create ("Api calls"); - /* add tests to test case */ - tcase_add_test (tc_api, test_init); - tcase_add_test (tc_api, test_init_epoll); - tcase_add_test (tc_api, test_create); - tcase_add_test (tc_api, test_create_master); - tcase_add_test (tc_api, test_create_mult); - tcase_add_test (tc_api, test_control_fd_handler); - tcase_add_test (tc_api, test_buffer_alloc); - tcase_add_test (tc_api, test_tx_burst); - tcase_add_test (tc_api, test_rx_burst); - tcase_add_test (tc_api, test_get_details); - - /* create internal test case */ - tc_internal = tcase_create ("Internal"); - /* add tests to test case */ - tcase_add_test (tc_internal, test_init_regions_and_queues); - tcase_add_test (tc_internal, test_connect1); - tcase_add_test (tc_internal, test_disconnect_internal); - - /* add test cases to test suite */ - suite_add_tcase (s, tc_api); - suite_add_tcase (s, tc_internal); - - /* return main test suite to test runner */ - return s; -} diff --git a/extras/libmemif/test/main_test.h b/extras/libmemif/test/main_test.h deleted file mode 100644 index 300d8a8e46b..00000000000 --- a/extras/libmemif/test/main_test.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - *------------------------------------------------------------------ - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------ - */ - -#ifndef _MAIN_TEST_H_ -#define _MAIN_TEST_H_ - -#include <unit_test.h> - -Suite *main_suite (); - -#endif /* _MAIN_TEST_H_ */ diff --git a/extras/libmemif/test/socket_test.c b/extras/libmemif/test/socket_test.c deleted file mode 100644 index 2d229383c20..00000000000 --- a/extras/libmemif/test/socket_test.c +++ /dev/null @@ -1,658 +0,0 @@ -/* - *------------------------------------------------------------------ - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------ - */ - -#include <socket_test.h> - -#include <memif_private.h> -#include <socket.h> - -static int -get_queue_len (memif_msg_queue_elt_t * q) -{ - int r = 0; - memif_msg_queue_elt_t *c = q; - while (c != NULL) - { - r++; - c = c->next; - } - return r; -} - -static void -queue_free (memif_msg_queue_elt_t ** e) -{ - if (*e == NULL) - return; - queue_free (&(*e)->next); - free (*e); - *e = NULL; - return; -} - -START_TEST (test_msg_queue) -{ - int err; - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t conn; - conn.msg_queue = NULL; - conn.fd = -1; - - - int i, len = 10; - - for (i = 0; i < len; i++) - { - if (i % 2) - memif_msg_enq_ack (&conn); - else - memif_msg_enq_init (&conn); - } - - ck_assert_int_eq (len, get_queue_len (conn.msg_queue)); - - int pop = 6; - - for (i = 0; i < pop; i++) - { - if (i % 2) - { - ck_assert_uint_eq (conn.msg_queue->msg.type, MEMIF_MSG_TYPE_ACK); - } - else - { - ck_assert_uint_eq (conn.msg_queue->msg.type, MEMIF_MSG_TYPE_INIT); - } - conn.flags |= MEMIF_CONNECTION_FLAG_WRITE; - /* function will return -1 because no socket is created */ - memif_conn_fd_write_ready (&conn); - } - - ck_assert_int_eq ((len - pop), get_queue_len (conn.msg_queue)); - - queue_free (&conn.msg_queue); -} - -END_TEST -START_TEST (test_enq_ack) -{ - int err; - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - memif_connection_t conn; - conn.msg_queue = NULL; - - if ((err = memif_msg_enq_ack (&conn)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - memif_msg_queue_elt_t *e = conn.msg_queue; - - ck_assert_uint_eq (e->msg.type, MEMIF_MSG_TYPE_ACK); - ck_assert_int_eq (e->fd, -1); - queue_free (&conn.msg_queue); -} - -END_TEST -START_TEST (test_enq_init) -{ - int err; - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - memif_connection_t conn; - conn.msg_queue = NULL; - - conn.args.interface_id = 69; - conn.args.mode = 0; - - strncpy ((char *) conn.args.secret, TEST_SECRET, strlen (TEST_SECRET)); - - if ((err = memif_msg_enq_init (&conn)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_msg_queue_elt_t *e = conn.msg_queue; - - ck_assert_uint_eq (e->msg.type, MEMIF_MSG_TYPE_INIT); - ck_assert_int_eq (e->fd, -1); - - memif_msg_init_t *i = &e->msg.init; - - ck_assert_uint_eq (i->version, MEMIF_VERSION); - ck_assert_uint_eq (i->id, conn.args.interface_id); - ck_assert_uint_eq (i->mode, conn.args.mode); - ck_assert_str_eq ((char *)i->secret, (char *)conn.args.secret); - queue_free (&conn.msg_queue); -} - -END_TEST -START_TEST (test_enq_add_region) -{ - int err; - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - memif_connection_t conn; - conn.msg_queue = NULL; - conn.regions = (memif_region_t *) malloc (sizeof (memif_region_t)); - memif_region_t *mr = conn.regions; - mr->fd = 5; - mr->region_size = 2048; - uint8_t region_index = 0; - - if ((err = - memif_msg_enq_add_region (&conn, region_index)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_msg_queue_elt_t *e = conn.msg_queue; - - ck_assert_uint_eq (e->msg.type, MEMIF_MSG_TYPE_ADD_REGION); - ck_assert_int_eq (e->fd, mr->fd); - - memif_msg_add_region_t *ar = &e->msg.add_region; - - ck_assert_uint_eq (ar->index, region_index); - ck_assert_uint_eq (ar->size, mr->region_size); - - free (conn.regions); - conn.regions = NULL; - mr = NULL; - queue_free (&conn.msg_queue); -} - -END_TEST -START_TEST (test_enq_add_ring) -{ - int err; - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t conn; - conn.msg_queue = NULL; - conn.rx_queues = (memif_queue_t *) malloc (sizeof (memif_queue_t)); - conn.tx_queues = (memif_queue_t *) malloc (sizeof (memif_queue_t)); - - memif_queue_t *mq = conn.tx_queues; - uint8_t dir = MEMIF_RING_S2M; - mq->int_fd = 5; - mq->offset = 0; - mq->log2_ring_size = 10; - - if ((err = memif_msg_enq_add_ring (&conn, 0, dir)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_msg_queue_elt_t *e = conn.msg_queue; - - ck_assert_uint_eq (e->msg.type, MEMIF_MSG_TYPE_ADD_RING); - ck_assert_int_eq (e->fd, mq->int_fd); - - memif_msg_add_ring_t *ar = &e->msg.add_ring; - - ck_assert_uint_eq (ar->index, 0); - ck_assert_uint_eq (ar->offset, mq->offset); - ck_assert_uint_eq (ar->log2_ring_size, mq->log2_ring_size); - ck_assert (ar->flags & MEMIF_MSG_ADD_RING_FLAG_S2M); - - dir = MEMIF_RING_M2S; - if ((err = memif_msg_enq_add_ring (&conn, 0, dir)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - queue_free (&conn.msg_queue); -} - -END_TEST -START_TEST (test_enq_connect) -{ - int err; - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - memif_connection_t conn; - conn.msg_queue = NULL; - memset (conn.args.interface_name, 0, sizeof (conn.args.interface_name)); - strncpy ((char *) conn.args.interface_name, TEST_IF_NAME, - strlen (TEST_IF_NAME)); - - if ((err = memif_msg_enq_connect (&conn)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_msg_queue_elt_t *e = conn.msg_queue; - - ck_assert_uint_eq (e->msg.type, MEMIF_MSG_TYPE_CONNECT); - ck_assert_int_eq (e->fd, -1); - ck_assert_str_eq ((char *)e->msg.connect.if_name, TEST_IF_NAME); - queue_free (&conn.msg_queue); -} - -END_TEST -START_TEST (test_enq_connected) -{ - int err; - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - memif_connection_t conn; - conn.msg_queue = NULL; - memset (conn.args.interface_name, 0, sizeof (conn.args.interface_name)); - strncpy ((char *) conn.args.interface_name, TEST_IF_NAME, - strlen (TEST_IF_NAME)); - - if ((err = memif_msg_enq_connected (&conn)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_msg_queue_elt_t *e = conn.msg_queue; - - ck_assert_uint_eq (e->msg.type, MEMIF_MSG_TYPE_CONNECTED); - ck_assert_int_eq (e->fd, -1); - ck_assert_str_eq ((char *)e->msg.connect.if_name, TEST_IF_NAME); - queue_free (&conn.msg_queue); -} - -END_TEST -START_TEST (test_send) -{ - int err; - int fd = -1, afd = 5; - memif_msg_t msg; - memset (&msg, 0, sizeof (msg)); - - if ((err = memif_msg_send (fd, &msg, afd)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_BAD_FD, - "err code: %u, err msg: %s", err, memif_strerror (err)); -} - -END_TEST -START_TEST (test_send_hello) -{ - int err; - memif_connection_t conn; - conn.fd = -1; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - conn.args.socket = libmemif_main.default_socket; - - if ((err = memif_msg_send_hello (get_libmemif_main (conn.args.socket), conn.fd)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_BAD_FD, - "err code: %u, err msg: %s", err, memif_strerror (err)); -} - -END_TEST -START_TEST (test_send_disconnect) -{ - int err; - memif_connection_t conn; - conn.fd = -1; - - /* only possible fail if memif_msg_send fails... */ - /* obsolete without socket */ - if ((err = - memif_msg_send_disconnect (conn.fd, (uint8_t *)"unit_test_dc", - 0)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_BAD_FD, "err code: %u, err msg: %s", err, - memif_strerror (err)); -} - -END_TEST -START_TEST (test_recv_hello) -{ - int err; - memif_connection_t conn; - memif_msg_t msg; - - memif_msg_hello_t *h = &msg.hello; - - msg.type = MEMIF_MSG_TYPE_HELLO; - - h->min_version = MEMIF_VERSION; - h->max_version = MEMIF_VERSION; - h->max_s2m_ring = 1; - h->max_m2s_ring = 1; - h->max_log2_ring_size = 14; - strncpy ((char *) h->name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - memset (conn.remote_name, 0, sizeof (conn.remote_name)); - - conn.args.num_s2m_rings = 4; - conn.args.num_m2s_rings = 6; - conn.args.log2_ring_size = 10; - - if ((err = memif_msg_receive_hello (&conn, &msg)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_uint_eq (conn.run_args.num_s2m_rings, 2); - ck_assert_uint_eq (conn.run_args.num_m2s_rings, 2); - ck_assert_uint_eq (conn.run_args.log2_ring_size, 10); - ck_assert_str_eq ((char *)conn.remote_name, TEST_IF_NAME); - - h->max_version = 9; - if ((err = memif_msg_receive_hello (&conn, &msg)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_PROTO, - "err code: %u, err msg: %s", err, memif_strerror (err)); -} - -END_TEST -START_TEST (test_recv_init) -{ - int err; - memif_connection_t conn; - - conn.args.interface_id = 69; - conn.args.is_master = 1; - conn.fd = -1; - conn.args.mode = 0; - memset (conn.args.secret, '\0', 24); - strncpy ((char *) conn.args.secret, TEST_SECRET, strlen (TEST_SECRET)); - - memif_msg_t msg; - - memif_msg_init_t *i = &msg.init; - - msg.type = MEMIF_MSG_TYPE_INIT; - - i->version = MEMIF_VERSION; - i->id = 69; - i->mode = 0; - memset (i->name, '\0', 32); - memset (i->secret, '\0', 24); - strncpy ((char *) i->name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - strncpy ((char *) i->secret, TEST_SECRET, strlen (TEST_SECRET)); - - memif_socket_t ms; - ms.interface_list_len = 1; - ms.interface_list = malloc (sizeof (memif_list_elt_t)); - memif_list_elt_t elt; - elt.key = 69; - elt.data_struct = &conn; - add_list_elt (get_libmemif_main (conn.args.socket), &elt, &ms.interface_list, &ms.interface_list_len); - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - if ((err = memif_msg_receive_init (&ms, -1, &msg)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - i->version = 9; - if ((err = memif_msg_receive_init (&ms, -1, &msg)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_PROTO, - "err code: %u, err msg: %s", err, memif_strerror (err)); - i->version = MEMIF_VERSION; - - i->id = 78; - if ((err = memif_msg_receive_init (&ms, -1, &msg)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_ID, - "err code: %u, err msg: %s", err, memif_strerror (err)); - i->id = 69; - - i->mode = 1; - if ((err = memif_msg_receive_init (&ms, -1, &msg)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_MODE, - "err code: %u, err msg: %s", err, memif_strerror (err)); - i->mode = 0; - - i->secret[0] = '\0'; - if ((err = memif_msg_receive_init (&ms, -1, &msg)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_SECRET, - "err code: %u, err msg: %s", err, memif_strerror (err)); - strncpy ((char *) i->secret, TEST_SECRET, strlen (TEST_SECRET)); - - conn.args.is_master = 0; - if ((err = memif_msg_receive_init (&ms, -1, &msg)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_ACCSLAVE, - "err code: %u, err msg: %s", err, memif_strerror (err)); - conn.args.is_master = 1; - - conn.fd = 5; - if ((err = memif_msg_receive_init (&ms, -1, &msg)) != MEMIF_ERR_SUCCESS) - ck_assert_msg ((err == MEMIF_ERR_ALRCONN) || (err == MEMIF_ERR_BAD_FD), - "err code: %u, err msg: %s", err, memif_strerror (err)); -} - -END_TEST -START_TEST (test_recv_add_region) -{ - int err; - memif_connection_t conn; - conn.regions = NULL; - memif_msg_t msg; - msg.type = MEMIF_MSG_TYPE_ADD_REGION; - msg.add_region.size = 2048; - msg.add_region.index = 0; - - int fd = 5; - - if ((err = - memif_msg_receive_add_region (&conn, &msg, fd)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_region_t *mr = conn.regions; - - ck_assert_uint_eq (mr->fd, fd); - ck_assert_uint_eq (mr->region_size, 2048); - ck_assert_ptr_eq (mr->addr, NULL); -} - -END_TEST -START_TEST (test_recv_add_ring) -{ - int err; - memif_connection_t conn; - int fd = 5; - memif_msg_t msg; - conn.args.num_s2m_rings = 2; - conn.args.num_m2s_rings = 2; - conn.rx_queues = NULL; - conn.tx_queues = NULL; - - msg.type = MEMIF_MSG_TYPE_ADD_RING; - memif_msg_add_ring_t *ar = &msg.add_ring; - - ar->log2_ring_size = 10; - ar->region = 0; - ar->offset = 0; - ar->flags = 0; - ar->flags |= MEMIF_MSG_ADD_RING_FLAG_S2M; - ar->index = 1; - - if ((err = - memif_msg_receive_add_ring (&conn, &msg, fd)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - - ar->offset = 2048; - ar->flags &= ~MEMIF_MSG_ADD_RING_FLAG_S2M; - - if ((err = - memif_msg_receive_add_ring (&conn, &msg, fd)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - -} - -END_TEST -START_TEST (test_recv_connect) -{ - int err; - memif_conn_handle_t c = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - - args.interface_id = 0; - args.is_master = 0; - args.mode = 0; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - if ((err = memif_create (&c, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *conn = (memif_connection_t *) c; - - conn->run_args.num_s2m_rings = 1; - conn->run_args.num_m2s_rings = 1; - conn->run_args.log2_ring_size = 10; - conn->run_args.buffer_size = 2048; - - if ((err = memif_init_regions_and_queues (conn)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_msg_t msg; - memset (&msg, 0, sizeof (msg)); - msg.type = MEMIF_MSG_TYPE_CONNECT; - - memset (msg.connect.if_name, 0, sizeof (msg.connect.if_name)); - strncpy ((char *) msg.connect.if_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_msg_receive_connect (conn, &msg)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_str_eq ((char *)conn->remote_if_name, TEST_IF_NAME); -} - -END_TEST -START_TEST (test_recv_connected) -{ - int err; - memif_conn_handle_t c = NULL; - memif_conn_args_t args; - memset (&args, 0, sizeof (args)); - - args.interface_id = 0; - args.is_master = 0; - args.mode = 0; - - if ((err = - memif_init (control_fd_update, TEST_APP_NAME, NULL, - NULL, NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - if ((err = memif_create (&c, &args, on_connect, - on_disconnect, on_interrupt, - NULL)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_connection_t *conn = (memif_connection_t *) c; - - conn->run_args.num_s2m_rings = 1; - conn->run_args.num_m2s_rings = 1; - conn->run_args.log2_ring_size = 10; - conn->run_args.buffer_size = 2048; - - if ((err = memif_init_regions_and_queues (conn)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - memif_msg_t msg; - memset (&msg, 0, sizeof (msg)); - msg.type = MEMIF_MSG_TYPE_CONNECT; - - memset (msg.connect.if_name, 0, sizeof (msg.connect.if_name)); - strncpy ((char *) msg.connect.if_name, TEST_IF_NAME, strlen (TEST_IF_NAME)); - - if ((err = memif_msg_receive_connected (conn, &msg)) != MEMIF_ERR_SUCCESS) - ck_abort_msg ("err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_str_eq ((char *)conn->remote_if_name, TEST_IF_NAME); -} - -END_TEST -START_TEST (test_recv_disconnect) -{ - int err; - memif_connection_t conn; - memif_msg_t msg; - msg.type = MEMIF_MSG_TYPE_DISCONNECT; - memset (msg.disconnect.string, 0, sizeof (msg.disconnect.string)); - strncpy ((char *) msg.disconnect.string, "unit_test_dc", 12); - - if ((err = memif_msg_receive_disconnect (&conn, &msg)) != MEMIF_ERR_SUCCESS) - ck_assert_msg (err == MEMIF_ERR_DISCONNECT, - "err code: %u, err msg: %s", err, memif_strerror (err)); - - ck_assert_str_eq ((char *)conn.remote_disconnect_string, "unit_test_dc"); -} - -END_TEST Suite * -socket_suite () -{ - Suite *s; - TCase *tc_msg_queue; - TCase *tc_msg_enq; - TCase *tc_msg_send; - TCase *tc_msg_recv; - - /* create socket test suite */ - s = suite_create ("Socket messaging"); - - /* create msg queue test case */ - tc_msg_queue = tcase_create ("Message queue"); - /* add tests to test case */ - tcase_add_test (tc_msg_queue, test_msg_queue); - - /* create msg enq test case */ - tc_msg_enq = tcase_create ("Message enqueue"); - /* add tests to test case */ - tcase_add_test (tc_msg_enq, test_enq_ack); - tcase_add_test (tc_msg_enq, test_enq_init); - tcase_add_test (tc_msg_enq, test_enq_add_region); - tcase_add_test (tc_msg_enq, test_enq_add_ring); - tcase_add_test (tc_msg_enq, test_enq_connect); - tcase_add_test (tc_msg_enq, test_enq_connected); - - /* create msg send test case */ - tc_msg_send = tcase_create ("Message send"); - /* add tests to test case */ - tcase_add_test (tc_msg_send, test_send); - tcase_add_test (tc_msg_send, test_send_hello); - tcase_add_test (tc_msg_send, test_send_disconnect); - - /* create msg recv test case */ - tc_msg_recv = tcase_create ("Message receive"); - /* add tests to test case */ - tcase_add_test (tc_msg_recv, test_recv_hello); - tcase_add_test (tc_msg_recv, test_recv_init); - tcase_add_test (tc_msg_recv, test_recv_add_region); - tcase_add_test (tc_msg_recv, test_recv_add_ring); - tcase_add_test (tc_msg_recv, test_recv_connect); - tcase_add_test (tc_msg_recv, test_recv_connected); - tcase_add_test (tc_msg_recv, test_recv_disconnect); - - /* add test cases to test suite */ - suite_add_tcase (s, tc_msg_queue); - suite_add_tcase (s, tc_msg_enq); - suite_add_tcase (s, tc_msg_send); - suite_add_tcase (s, tc_msg_recv); - - /* return socket test suite to test runner */ - return s; -} diff --git a/extras/libmemif/test/socket_test.h b/extras/libmemif/test/socket_test.h deleted file mode 100644 index 02ec69cfbd7..00000000000 --- a/extras/libmemif/test/socket_test.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - *------------------------------------------------------------------ - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------ - */ - -#ifndef _SOCKET_TEST_H_ -#define _SOCKET_TEST_H_ - -#include <unit_test.h> - -Suite *socket_suite (); - -#endif /* _SOCKET_TEST_H_ */ diff --git a/extras/libmemif/test/suite_main/CMakeLists.txt b/extras/libmemif/test/suite_main/CMakeLists.txt new file mode 100644 index 00000000000..7a2940098e0 --- /dev/null +++ b/extras/libmemif/test/suite_main/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.0) + +set (This MemifMainTest) + +set (Sources + memif_main_test.c) + +add_executable(${This} ${Sources}) + +target_link_libraries(${This} PUBLIC + unity + memif +) + +add_test( + NAME ${This} + COMMAND ${This} +) diff --git a/extras/libmemif/test/suite_main/memif_main_test.c b/extras/libmemif/test/suite_main/memif_main_test.c new file mode 100644 index 00000000000..d6b2e792de2 --- /dev/null +++ b/extras/libmemif/test/suite_main/memif_main_test.c @@ -0,0 +1,388 @@ +#include <main.c> +#include <unity_fixture.h> +#include <memif_private.h> +#include <stdlib.h> + +#define MEMIF_VERSION_STR "2.0" +#define MEMIF_BUFFER_SIZE 2048 +#define MEMIF_INTERFACE_NAME "memif0/0" +#define MEMIF_LOG_RING_SIZE 10 +#define MEMIF_SECRET "psst" + +#undef malloc +#undef calloc +#undef realloc +#undef free + +static memif_socket_handle_t socket_handler; +static memif_conn_handle_t conn; + +static memif_socket_args_t memif_socket_args; +static memif_conn_args_t memif_conn_args; + +static int dummy_on_connect (void *, void *); +static int dummy_on_disconnect (void *, void *); +static int dummy_on_interrupt (void *, void *, uint16_t); + +static int +dummy_on_connect (void *a, void *b) +{ +} +static int +dummy_on_disconnect (void *a, void *b) +{ +} +static int +dummy_on_interrupt (void *a, void *b, uint16_t c) +{ +} + +static void +init_conn_args () +{ + memif_connection_t *c = (memif_connection_t *) conn; + memset (c, 0, sizeof (memif_connection_t)); + c->args = (memif_conn_args_t){ .buffer_size = MEMIF_BUFFER_SIZE, + .interface_id = 0, + .interface_name = MEMIF_INTERFACE_NAME, + .is_master = 0, + .log2_ring_size = MEMIF_LOG_RING_SIZE, + .mode = 0, + .num_m2s_rings = 1, + .num_s2m_rings = 1, + .secret = MEMIF_SECRET, + .socket = &socket_handler }; +} + +static void +init_connection () +{ + conn = malloc (sizeof (memif_connection_t)); + memif_connection_t *c = (memif_connection_t *) conn; + init_conn_args (); +} + +static void +init_socket () +{ + memif_socket_t *ms = malloc (sizeof (memif_socket_t)); + socket_handler = ms; + /* default values */ + memset (ms, 0, sizeof (memif_socket_t)); + ms->epfd = 3; + ms->listener_fd = 4; + ms->poll_cancel_fd = 5; + ms->timer_fd = -1; + + TAILQ_INIT (&ms->master_interfaces); + TAILQ_INIT (&ms->slave_interfaces); +} + +static void +init_socket_args () +{ + strncpy (memif_socket_args.app_name, MEMIF_DEFAULT_APP_NAME, + strlen (MEMIF_DEFAULT_APP_NAME)); + strncpy (memif_socket_args.path, MEMIF_DEFAULT_SOCKET_PATH, + strlen (MEMIF_DEFAULT_SOCKET_PATH)); +} + +static void +delete_connection () +{ + free (conn); +} + +TEST_GROUP (MemifMain); + +TEST_SETUP (MemifMain) {} + +TEST_TEAR_DOWN (MemifMain) {} + +TEST (MemifMain, MemifGetVersion) +{ + TEST_ASSERT_EQUAL_UINT16 (MEMIF_VERSION, memif_get_version ()); +} + +TEST (MemifMain, MemifGetVersionStr) +{ + TEST_ASSERT_EQUAL_STRING (MEMIF_VERSION_STR, memif_get_version_str ()); +} + +TEST (MemifMain, MemifStrError) +{ + for (size_t i = 0; i < ERRLIST_LEN; i++) + { + TEST_ASSERT_EQUAL_STRING (memif_strerror (i), memif_errlist[i]); + } + TEST_ASSERT_EQUAL_STRING (memif_strerror (ERRLIST_LEN + 1), + MEMIF_ERR_UNDEFINED); +} + +TEST (MemifMain, MemifGetDetails) +{ + init_socket (); + init_connection (); + memif_details_t md; + ssize_t buflen = 2048; + char buf[buflen]; + memif_get_details (conn, &md, buf, buflen); + + TEST_ASSERT_EQUAL_STRING (MEMIF_INTERFACE_NAME, md.if_name); + TEST_ASSERT_EQUAL_UINT32 (0, md.id); + TEST_ASSERT_EQUAL_STRING (MEMIF_SECRET, md.secret); + TEST_ASSERT_EQUAL_UINT8 (1, md.role); + TEST_ASSERT_EQUAL_UINT8 (0, md.mode); + TEST_ASSERT_EQUAL_UINT8 (0, md.link_up_down); +} + +TEST (MemifMain, MemifControl_fd_update_add_del_epoll_fd) +{ + init_socket_args (); + memif_create_socket (&socket_handler, &memif_socket_args, NULL); + memif_fd_event_t fde; + memif_fd_event_data_t *fdata; + void *ctx; + memif_socket_t *ms = (memif_socket_t *) socket_handler; + + fdata = ms->args.alloc (sizeof (*fdata)); + fdata->event_handler = memif_poll_cancel_handler; + fdata->private_ctx = ms; + + fde.fd = eventfd (0, EFD_NONBLOCK); + fde.private_ctx = fdata; + fde.type = MEMIF_FD_EVENT_READ; + ctx = ms->epfd != -1 ? ms : ms->private_ctx; + TEST_ASSERT_EQUAL_INT (0, memif_control_fd_update (fde, ctx)); + fde.type = MEMIF_FD_EVENT_DEL; + TEST_ASSERT_EQUAL_INT (0, memif_control_fd_update (fde, ctx)); +} + +TEST (MemifMain, MemifSetConnectionRequestTimer) +{ + memif_socket_handle_t msh = + (memif_socket_handle_t) malloc (sizeof (memif_socket_t)); + memif_socket_t *ms = (memif_socket_t *) msh; + struct itimerspec timer; + memif_fd_event_t fde; + memif_fd_event_data_t *fdata; + int i, err = MEMIF_ERR_SUCCESS; + void *ctx; + memset (ms, 0, sizeof (memif_socket_t)); + ms->epfd = -1; + ms->listener_fd = -1; + ms->poll_cancel_fd = -1; + + TAILQ_INIT (&ms->master_interfaces); + TAILQ_INIT (&ms->slave_interfaces); + ms->timer_fd = -1; + ms->args.alloc = malloc; + ms->args.free = free; + ms->args.realloc = realloc; + + if (ms->args.on_control_fd_update == NULL) + { + ms->epfd = epoll_create (1); + memif_control_fd_update_register (ms, memif_control_fd_update); + ms->poll_cancel_fd = eventfd (0, EFD_NONBLOCK); + + fdata = ms->args.alloc (sizeof (*fdata)); + fdata->event_handler = memif_poll_cancel_handler; + fdata->private_ctx = ms; + + fde.fd = ms->poll_cancel_fd; + fde.type = MEMIF_FD_EVENT_READ; + fde.private_ctx = fdata; + ctx = ms->epfd != -1 ? ms : ms->private_ctx; + ms->args.on_control_fd_update (fde, ctx); + } + + timer.it_value.tv_sec = 2; + timer.it_value.tv_nsec = 0; + timer.it_interval.tv_sec = 2; + timer.it_value.tv_nsec = 0; + memif_set_connection_request_timer (msh, timer); + + TEST_ASSERT_NOT_EQUAL_INT (-1, ms->timer_fd); + memif_delete_socket (&msh); +} + +TEST (MemifMain, MemifSetConnectionRequestTimerNoTimer) +{ + memif_socket_handle_t msh = + (memif_socket_handle_t) malloc (sizeof (memif_socket_t)); + memif_socket_t *ms = (memif_socket_t *) msh; + struct itimerspec timer; + memif_fd_event_t fde; + memif_fd_event_data_t *fdata; + int i, err = MEMIF_ERR_SUCCESS; + void *ctx; + memset (ms, 0, sizeof (memif_socket_t)); + ms->epfd = -1; + ms->listener_fd = -1; + ms->poll_cancel_fd = -1; + + TAILQ_INIT (&ms->master_interfaces); + TAILQ_INIT (&ms->slave_interfaces); + ms->timer_fd = -1; + ms->args.alloc = malloc; + ms->args.free = free; + ms->args.realloc = realloc; + + if (ms->args.on_control_fd_update == NULL) + { + ms->epfd = epoll_create (1); + /* register default fd update callback */ + memif_control_fd_update_register (ms, memif_control_fd_update); + ms->poll_cancel_fd = eventfd (0, EFD_NONBLOCK); + if (ms->poll_cancel_fd < 0) + { + err = errno; + DBG ("eventfd: %s", strerror (err)); + // return memif_syscall_error_handler (err); + } + /* add interrupt fd to epfd */ + fdata = ms->args.alloc (sizeof (*fdata)); + fdata->event_handler = memif_poll_cancel_handler; + fdata->private_ctx = ms; + + fde.fd = ms->poll_cancel_fd; + fde.type = MEMIF_FD_EVENT_READ; + fde.private_ctx = fdata; + ctx = ms->epfd != -1 ? ms : ms->private_ctx; + ms->args.on_control_fd_update (fde, ctx); + } + memset (&timer, 0, sizeof (struct itimerspec)); + memif_set_connection_request_timer (msh, timer); + + TEST_ASSERT_EQUAL_INT (-1, ms->timer_fd); + memif_delete_socket (msh); + memif_delete_socket (&msh); +} + +TEST_GROUP (MemifInterface); + +TEST_SETUP (MemifInterface) +{ + socket_handler = NULL; + conn = NULL; + memset (&memif_socket_args, 0, sizeof (memif_socket_args_t)); + memset (&memif_conn_args, 0, sizeof (memif_conn_args_t)); + + memif_socket_args = (memif_socket_args_t){ + .app_name = "TEST", + .path = "@memif.sock", + }; + int err = memif_create_socket (&socket_handler, &memif_socket_args, NULL); + if (err) + exit (EXIT_FAILURE); + memif_conn_args.socket = socket_handler; + memif_conn_args.interface_id = 0; + strncpy (memif_conn_args.interface_name, MEMIF_INTERFACE_NAME, + sizeof (memif_conn_args.interface_name)); +} + +TEST_TEAR_DOWN (MemifInterface) +{ + memif_delete (&conn); + memif_delete_socket (&socket_handler); + memset (&memif_socket_args, 0, sizeof (memif_socket_args_t)); + memset (&memif_conn_args, 0, sizeof (memif_conn_args_t)); + memif_delete (&conn); +} + +TEST (MemifInterface, MemifCreateMaster) +{ + memif_conn_args.is_master = 1; + int err = memif_create (&conn, &memif_conn_args, dummy_on_connect, + dummy_on_disconnect, dummy_on_interrupt, NULL); + + TEST_ASSERT_EQUAL_INT (MEMIF_ERR_SUCCESS, err); + + memif_socket_t *ms = (memif_socket_t *) socket_handler; + memif_connection_t *mc = conn; + + TEST_ASSERT_NULL (ms->slave_interfaces.tqh_first); + TEST_ASSERT_NOT_NULL (ms->master_interfaces.tqh_first); + TEST_ASSERT_NOT_NULL (mc->args.socket); + TEST_ASSERT_EQUAL_INT (mc->args.buffer_size, MEMIF_DEFAULT_BUFFER_SIZE); + TEST_ASSERT_EQUAL_UINT8 (mc->args.log2_ring_size, + MEMIF_DEFAULT_LOG2_RING_SIZE); + TEST_ASSERT_EQUAL_UINT8 (mc->args.num_m2s_rings, 1); + TEST_ASSERT_EQUAL_UINT8 (mc->args.num_s2m_rings, 1); +} +TEST (MemifInterface, MemifCreateSlave) +{ + memif_conn_args.is_master = 0; + + int err = memif_create (&conn, &memif_conn_args, dummy_on_connect, + dummy_on_disconnect, dummy_on_interrupt, NULL); + + memif_socket_t *ms = (memif_socket_t *) socket_handler; + memif_connection_t *mc = conn; + + TEST_ASSERT_EQUAL_INT (MEMIF_ERR_SUCCESS, err); + TEST_ASSERT_NULL (ms->master_interfaces.tqh_first); + TEST_ASSERT_NOT_NULL (ms->slave_interfaces.tqh_first); + TEST_ASSERT_NOT_NULL (mc->args.socket); + TEST_ASSERT_EQUAL_INT (mc->args.buffer_size, MEMIF_DEFAULT_BUFFER_SIZE); + TEST_ASSERT_EQUAL_UINT8 (mc->args.log2_ring_size, + MEMIF_DEFAULT_LOG2_RING_SIZE); + TEST_ASSERT_EQUAL_UINT8 (mc->args.num_m2s_rings, 1); + TEST_ASSERT_EQUAL_UINT8 (mc->args.num_s2m_rings, 1); +} + +TEST (MemifInterface, MemifDelete) +{ + memif_conn_args.is_master = 0; + + memif_create (&conn, &memif_conn_args, dummy_on_connect, dummy_on_disconnect, + dummy_on_interrupt, NULL); + + int err = memif_delete (&conn); + + TEST_ASSERT_EQUAL_INT (MEMIF_ERR_SUCCESS, err); + TEST_ASSERT_NULL (conn); +} + +TEST (MemifMain, MemifPollEvent) +{ + init_socket_args (); + memif_create_socket (&socket_handler, &memif_socket_args, NULL); + memif_socket_t *ms = (memif_socket_t *) socket_handler; + uint64_t buf = 1; + int ret = write (ms->poll_cancel_fd, &buf, sizeof (buf)); + TEST_ASSERT_EQUAL (8, ret); + TEST_ASSERT_EQUAL (MEMIF_ERR_POLL_CANCEL, + memif_poll_event (socket_handler, -1)); +} + +TEST_GROUP_RUNNER (MemifMain){ + RUN_TEST_CASE (MemifMain, MemifGetVersion) + RUN_TEST_CASE (MemifMain, MemifGetVersionStr) + RUN_TEST_CASE (MemifMain, MemifStrError) + RUN_TEST_CASE (MemifMain, MemifGetDetails) + RUN_TEST_CASE (MemifMain, MemifControl_fd_update_add_del_epoll_fd) + RUN_TEST_CASE (MemifMain, MemifSetConnectionRequestTimer) + RUN_TEST_CASE (MemifMain, MemifSetConnectionRequestTimerNoTimer) + RUN_TEST_CASE (MemifMain, MemifPollEvent) +} + +TEST_GROUP_RUNNER (MemifInterface) +{ + RUN_TEST_CASE (MemifInterface, MemifCreateMaster); + RUN_TEST_CASE (MemifInterface, MemifCreateSlave); + RUN_TEST_CASE (MemifInterface, MemifDelete); +} +static void +RunAllTests (void) +{ + RUN_TEST_GROUP (MemifMain); + RUN_TEST_GROUP (MemifInterface); +} + +int +main (int argc, const char *argv[]) +{ + return UnityMain (argc, argv, RunAllTests); +} diff --git a/extras/libmemif/test/suite_socket/CMakeLists.txt b/extras/libmemif/test/suite_socket/CMakeLists.txt new file mode 100644 index 00000000000..5ac66a06cfa --- /dev/null +++ b/extras/libmemif/test/suite_socket/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.0) + +set (This MemifSocketTest) + +set (Sources + memif_socket_test.c) + +add_executable(${This} ${Sources}) + +target_link_libraries(${This} PUBLIC + unity + memif +) + +add_test( + NAME ${This} + COMMAND ${This} +) diff --git a/extras/libmemif/test/suite_socket/memif_socket_test.c b/extras/libmemif/test/suite_socket/memif_socket_test.c new file mode 100644 index 00000000000..4e12314d48a --- /dev/null +++ b/extras/libmemif/test/suite_socket/memif_socket_test.c @@ -0,0 +1,401 @@ +#include <main.c> +#include <socket.c> + +#include <unity_fixture.h> +#include <libmemif.h> +#include <memif_private.h> +#include <stdlib.h> + +#define TEST_APP_NAME "unit_test_app" +#define MEMIF_TEST_IF_NAME "unit_test_if" +#define MEMIF_TEST_SECRET "psst" +#define TEST_IF_ID 0 +#define TEST_SOCKET_PATH "@memif.sock" + +#undef malloc +#undef calloc +#undef realloc +#undef free + +static int err; +static memif_socket_handle_t memif_socket; +static memif_socket_args_t memif_socket_args; +static memif_control_channel_t *cc; + +static void +init_socket_args () +{ + strncpy (memif_socket_args.app_name, MEMIF_DEFAULT_APP_NAME, + strlen (MEMIF_DEFAULT_APP_NAME)); + sprintf (memif_socket_args.path, "%s", MEMIF_DEFAULT_SOCKET_PATH); +} + +TEST_GROUP (MemifSocket); + +TEST_SETUP (MemifSocket) +{ + memif_socket = NULL; + static int err = 0; +} + +TEST_TEAR_DOWN (MemifSocket) {} + +TEST (MemifSocket, CreateSocket) +{ + + memif_socket_args_t memif_socket_args = { + .app_name = TEST_APP_NAME, + .path = TEST_SOCKET_PATH, + }; + err = memif_create_socket (&memif_socket, &memif_socket_args, NULL); + + TEST_ASSERT_EQUAL_INT (0, err); + TEST_ASSERT_NOT_NULL (memif_socket); + + memif_socket_t *ms = (memif_socket_t *) memif_socket; + + TEST_ASSERT_EQUAL_STRING (ms->args.app_name, TEST_APP_NAME); + TEST_ASSERT_EQUAL_STRING (ms->args.path, TEST_SOCKET_PATH); + TEST_ASSERT_EQUAL_PTR (ms->args.on_control_fd_update, + memif_control_fd_update); + TEST_ASSERT_EQUAL_PTR (ms->args.alloc, malloc); + TEST_ASSERT_EQUAL_PTR (ms->args.realloc, realloc); + TEST_ASSERT_EQUAL_PTR (ms->args.free, free); + + TEST_ASSERT_NOT_EQUAL_INT (ms->epfd, -1); + TEST_ASSERT_NOT_EQUAL_INT (ms->poll_cancel_fd, -1); + + memif_delete_socket (&memif_socket); +} + +TEST (MemifSocket, DeleteSocket) +{ + + memif_socket_args_t memif_socket_args = { + .app_name = TEST_APP_NAME, + .path = TEST_SOCKET_PATH, + }; + memif_create_socket (&memif_socket, &memif_socket_args, NULL); + + memif_socket_t *ms = (memif_socket_t *) memif_socket; + err = memif_delete_socket (&memif_socket); + TEST_ASSERT_EQUAL_INT (MEMIF_ERR_SUCCESS, err); + TEST_ASSERT_NULL (memif_socket); +} + +TEST_GROUP (MemifControlChannel); + +TEST_SETUP (MemifControlChannel) +{ + memif_socket = NULL; + static int err = 0; + init_socket_args (); + memif_create_socket (&memif_socket, &memif_socket_args, NULL); + cc = (memif_control_channel_t *) malloc (sizeof (memif_control_channel_t)); +} + +TEST_TEAR_DOWN (MemifControlChannel) { free (cc); } + +TEST (MemifControlChannel, EnqAck) +{ + memif_connection_t conn; + memif_msg_queue_elt_t *e; + cc->fd = 5; + cc->conn = NULL; + cc->sock = memif_socket; + + TAILQ_INIT (&cc->msg_queue); + memif_msg_enq_ack (cc); + + e = TAILQ_FIRST (&cc->msg_queue); + + TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_ACK, e->msg.type); + TEST_ASSERT_EQUAL_INT (-1, e->fd); +} + +TEST (MemifControlChannel, EnqHello) +{ + memif_connection_t conn; + memif_msg_queue_elt_t *e; + cc->fd = 5; + cc->conn = NULL; + cc->sock = memif_socket; + TAILQ_INIT (&cc->msg_queue); + + memif_msg_enq_hello (cc); + + e = TAILQ_FIRST (&cc->msg_queue); + + TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_HELLO, e->msg.type); + TEST_ASSERT_EQUAL_INT (-1, e->fd); + memif_msg_hello_t h = e->msg.hello; + TEST_ASSERT_EQUAL_INT (MEMIF_MAX_LOG2_RING_SIZE, h.max_log2_ring_size); + TEST_ASSERT_EQUAL_INT (MEMIF_VERSION, h.min_version); + TEST_ASSERT_EQUAL_INT (MEMIF_VERSION, h.max_version); + TEST_ASSERT_EQUAL_INT (MEMIF_MAX_S2M_RING, h.max_s2m_ring); + TEST_ASSERT_EQUAL_INT (MEMIF_MAX_M2S_RING, h.max_m2s_ring); + TEST_ASSERT_EQUAL_INT (MEMIF_MAX_REGION, h.max_region); +} + +TEST (MemifControlChannel, EnqInit) +{ + memif_msg_queue_elt_t *e; + memif_connection_t conn; + cc->fd = 5; + cc->conn = &conn; + cc->sock = memif_socket; + TAILQ_INIT (&cc->msg_queue); + + conn.args.interface_id = 11; + conn.args.mode = 1; + strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET, + sizeof (MEMIF_TEST_SECRET)); + + memif_socket_t *ms = (memif_socket_t *) memif_socket; + + memif_msg_enq_init (cc); + + e = TAILQ_FIRST (&cc->msg_queue); + + TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_INIT, e->msg.type); + TEST_ASSERT_EQUAL_INT (-1, e->fd); + memif_msg_init_t h = e->msg.init; + + TEST_ASSERT_EQUAL_INT (11, h.id); + TEST_ASSERT_EQUAL_INT (1, h.mode); + TEST_ASSERT_EQUAL_STRING (MEMIF_DEFAULT_APP_NAME, h.name); + TEST_ASSERT_EQUAL_STRING (MEMIF_TEST_SECRET, h.secret); + TEST_ASSERT_EQUAL_INT (MEMIF_VERSION, h.version); +} + +TEST (MemifControlChannel, EnqAddRegion) +{ + memif_msg_queue_elt_t *e; + memif_connection_t conn; + memset (cc, 0, sizeof (memif_msg_queue_elt_t)); + memset (&conn, 0, sizeof (memif_connection_t)); + + cc->fd = 5; + cc->conn = &conn; + cc->sock = memif_socket; + TAILQ_INIT (&cc->msg_queue); + + conn.args.interface_id = 11; + conn.args.mode = 1; + conn.args.socket = memif_socket; + strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET, + sizeof (MEMIF_TEST_SECRET)); + + memif_socket_t *ms = (memif_socket_t *) memif_socket; + + conn.run_args.num_s2m_rings = 1; + conn.run_args.num_m2s_rings = 1; + conn.run_args.log2_ring_size = MEMIF_DEFAULT_LOG2_RING_SIZE; + conn.run_args.buffer_size = MEMIF_DEFAULT_BUFFER_SIZE; + + memif_add_region (&conn, 1); + + memif_msg_enq_add_region (cc, 0); + + e = TAILQ_FIRST (&cc->msg_queue); + memif_msg_add_region_t h = e->msg.add_region; + + TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_ADD_REGION, e->msg.type); + TEST_ASSERT_EQUAL_INT (conn.regions[0].fd, e->fd); + + TEST_ASSERT_EQUAL_INT (0, h.index); + TEST_ASSERT_EQUAL_INT (conn.regions[0].region_size, h.size); + + close (conn.regions[0].fd); +} + +TEST (MemifControlChannel, EnqAddRing) +{ + memif_msg_queue_elt_t *e; + memif_connection_t conn; + memset (cc, 0, sizeof (memif_msg_queue_elt_t)); + memset (&conn, 0, sizeof (memif_connection_t)); + + cc->fd = 5; + cc->conn = &conn; + cc->sock = memif_socket; + TAILQ_INIT (&cc->msg_queue); + + conn.args.interface_id = 11; + conn.args.mode = 1; + conn.args.socket = memif_socket; + strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET, + sizeof (MEMIF_TEST_SECRET)); + + memif_socket_t *ms = (memif_socket_t *) memif_socket; + + conn.run_args.num_s2m_rings = 1; + conn.run_args.num_m2s_rings = 1; + conn.run_args.log2_ring_size = MEMIF_DEFAULT_LOG2_RING_SIZE; + conn.run_args.buffer_size = MEMIF_DEFAULT_BUFFER_SIZE; + + memif_add_region (&conn, 1); + memif_init_queues (&conn); + memif_msg_enq_add_ring (cc, 0, MEMIF_RING_M2S); + + e = TAILQ_FIRST (&cc->msg_queue); + memif_msg_add_ring_t h = e->msg.add_ring; + + TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_ADD_RING, e->msg.type); + TEST_ASSERT_EQUAL_INT (conn.rx_queues[0].int_fd, e->fd); + + TEST_ASSERT_EQUAL_INT (0, h.flags); + TEST_ASSERT_EQUAL_INT (0, h.index); + TEST_ASSERT_EQUAL_INT (conn.rx_queues[0].region, h.region); + TEST_ASSERT_EQUAL_INT (conn.rx_queues[0].offset, h.offset); + TEST_ASSERT_EQUAL_INT (conn.rx_queues[0].log2_ring_size, h.log2_ring_size); + TEST_ASSERT_EQUAL_INT (0, h.private_hdr_size); + + close (conn.regions[0].fd); +} +TEST (MemifControlChannel, EnqConnect) +{ + memif_msg_queue_elt_t *e; + memif_connection_t conn; + memset (cc, 0, sizeof (memif_msg_queue_elt_t)); + memset (&conn, 0, sizeof (memif_connection_t)); + + cc->fd = 5; + cc->conn = &conn; + cc->sock = memif_socket; + TAILQ_INIT (&cc->msg_queue); + + conn.args.interface_id = 11; + conn.args.mode = 1; + conn.args.socket = memif_socket; + strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET, + sizeof (MEMIF_TEST_SECRET)); + strlcpy ((char *) conn.args.interface_name, MEMIF_TEST_IF_NAME, + sizeof (MEMIF_TEST_IF_NAME)); + + memif_socket_t *ms = (memif_socket_t *) memif_socket; + + conn.run_args.num_s2m_rings = 1; + conn.run_args.num_m2s_rings = 1; + conn.run_args.log2_ring_size = MEMIF_DEFAULT_LOG2_RING_SIZE; + conn.run_args.buffer_size = MEMIF_DEFAULT_BUFFER_SIZE; + + memif_add_region (&conn, 1); + memif_init_queues (&conn); + memif_msg_enq_connect (cc); + + e = TAILQ_FIRST (&cc->msg_queue); + memif_msg_connect_t h = e->msg.connect; + + TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_CONNECT, e->msg.type); + TEST_ASSERT_EQUAL_INT (-1, e->fd); + + TEST_ASSERT_EQUAL_STRING (MEMIF_TEST_IF_NAME, h.if_name); + + close (conn.regions[0].fd); +} + +TEST (MemifControlChannel, EnqConnected) +{ + memif_msg_queue_elt_t *e; + memif_connection_t conn; + memset (cc, 0, sizeof (memif_msg_queue_elt_t)); + memset (&conn, 0, sizeof (memif_connection_t)); + + cc->fd = 5; + cc->conn = &conn; + cc->sock = memif_socket; + TAILQ_INIT (&cc->msg_queue); + + conn.args.interface_id = 11; + conn.args.mode = 1; + conn.args.socket = memif_socket; + strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET, + sizeof (MEMIF_TEST_SECRET)); + strlcpy ((char *) conn.args.interface_name, MEMIF_TEST_IF_NAME, + sizeof (MEMIF_TEST_IF_NAME)); + + memif_socket_t *ms = (memif_socket_t *) memif_socket; + + conn.run_args.num_s2m_rings = 1; + conn.run_args.num_m2s_rings = 1; + conn.run_args.log2_ring_size = MEMIF_DEFAULT_LOG2_RING_SIZE; + conn.run_args.buffer_size = MEMIF_DEFAULT_BUFFER_SIZE; + + memif_add_region (&conn, 1); + memif_init_queues (&conn); + memif_msg_enq_connect (cc); + + e = TAILQ_FIRST (&cc->msg_queue); + memif_msg_connected_t h = e->msg.connected; + + TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_CONNECT, e->msg.type); + TEST_ASSERT_EQUAL_INT (-1, e->fd); + + TEST_ASSERT_EQUAL_STRING (MEMIF_TEST_IF_NAME, h.if_name); + + close (conn.regions[0].fd); +} + +TEST (MemifControlChannel, EnqDisconnect) +{ + memif_msg_queue_elt_t *e; + memif_connection_t conn; + memset (cc, 0, sizeof (memif_msg_queue_elt_t)); + memset (&conn, 0, sizeof (memif_connection_t)); + + cc->fd = 5; + cc->conn = &conn; + cc->sock = memif_socket; + TAILQ_INIT (&cc->msg_queue); + + conn.args.interface_id = 11; + conn.args.mode = 1; + conn.args.socket = memif_socket; + strlcpy ((char *) conn.args.secret, MEMIF_TEST_SECRET, + sizeof (MEMIF_TEST_SECRET)); + strlcpy ((char *) conn.args.interface_name, MEMIF_TEST_IF_NAME, + sizeof (MEMIF_TEST_IF_NAME)); + + memif_socket_t *ms = (memif_socket_t *) memif_socket; + memif_msg_enq_disconnect (cc, "TEST", 5); + + e = TAILQ_FIRST (&cc->msg_queue); + memif_msg_disconnect_t h = e->msg.disconnect; + + TEST_ASSERT_EQUAL_UINT16 (MEMIF_MSG_TYPE_DISCONNECT, e->msg.type); + TEST_ASSERT_EQUAL_INT (-1, e->fd); + + TEST_ASSERT_EQUAL_INT (5, h.code); + TEST_ASSERT_EQUAL_STRING ("TEST", h.string); +} + +TEST_GROUP_RUNNER (MemifSocket){ RUN_TEST_CASE (MemifSocket, CreateSocket) + RUN_TEST_CASE (MemifSocket, DeleteSocket) + +} + +TEST_GROUP_RUNNER (MemifControlChannel) +{ + RUN_TEST_CASE (MemifControlChannel, EnqAck) + RUN_TEST_CASE (MemifControlChannel, EnqHello) + RUN_TEST_CASE (MemifControlChannel, EnqInit) + RUN_TEST_CASE (MemifControlChannel, EnqAddRegion) + RUN_TEST_CASE (MemifControlChannel, EnqAddRing) + RUN_TEST_CASE (MemifControlChannel, EnqConnect) + RUN_TEST_CASE (MemifControlChannel, EnqConnected) + RUN_TEST_CASE (MemifControlChannel, EnqDisconnect) +} + +static void +RunAllTests (void) +{ + RUN_TEST_GROUP (MemifSocket); + RUN_TEST_GROUP (MemifControlChannel); +} + +int +main (int argc, const char *argv[]) +{ + return UnityMain (argc, argv, RunAllTests); +} diff --git a/extras/libmemif/test/unit_test.c b/extras/libmemif/test/unit_test.c deleted file mode 100644 index 0ae045b9573..00000000000 --- a/extras/libmemif/test/unit_test.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - *------------------------------------------------------------------ - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------ - */ - -#include <main_test.h> -#include <socket_test.h> - -int -on_connect (memif_conn_handle_t conn, void *ctx) -{ - return 0; -} - -int -on_disconnect (memif_conn_handle_t conn, void *ctx) -{ - return 0; -} - -int -on_interrupt (memif_conn_handle_t conn, void *ctx, uint16_t qid) -{ - return 0; -} - -int -control_fd_update (int fd, uint8_t events, void *ctx) -{ - return 0; -} - -int -main (void) -{ - int num_fail; - Suite *mains, *socket; - SRunner *sr; - - mains = main_suite (); - socket = socket_suite (); - - sr = srunner_create (mains); - - srunner_add_suite (sr, socket); - - srunner_run_all (sr, CK_VERBOSE); - num_fail = srunner_ntests_failed (sr); - srunner_free (sr); - return (num_fail == 0) ? EXIT_SUCCESS : EXIT_FAILURE; -} diff --git a/extras/libmemif/test/unit_test.h b/extras/libmemif/test/unit_test.h deleted file mode 100644 index 3182c77e6e6..00000000000 --- a/extras/libmemif/test/unit_test.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - *------------------------------------------------------------------ - * Copyright (c) 2017 Cisco and/or its affiliates. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------ - */ - -#ifndef _UNIT_TEST_H_ -#define _UNIT_TEST_H_ - -#include <stdlib.h> -#include <check.h> - -#include <memif.h> -#include <libmemif.h> - -#define TEST_APP_NAME "unit_test_app" -#define TEST_IF_NAME "unit_test_if" -#define TEST_SECRET "psst" - -int on_connect (memif_conn_handle_t conn, void *ctx); - -int on_disconnect (memif_conn_handle_t conn, void *ctx); - -int on_interrupt (memif_conn_handle_t conn, void *ctx, uint16_t qid); - -int control_fd_update (int fd, uint8_t events, void *ctx); - -#endif /* _UNIT_TEST_H_ */ |