summaryrefslogtreecommitdiff
path: root/src/ipcpd/shim-udp/tests
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2016-04-17 12:08:49 +0200
committerdimitri staessens <[email protected]>2016-04-18 22:25:34 +0200
commit21b304b46a347772c1338b22fba6a15291bb2945 (patch)
treeeb8d0980ded5216b282a7932ecce38fd09473210 /src/ipcpd/shim-udp/tests
parentd8e9019fcb56a49c6730bbe7d47e5e1cec682a2d (diff)
downloadouroboros-21b304b46a347772c1338b22fba6a15291bb2945.tar.gz
ouroboros-21b304b46a347772c1338b22fba6a15291bb2945.zip
ipcpd: initial IPC processes
Basic functions for implementation of IPC processes, and implementation of core functions of the shim IPCP over UDP. Updates to the build system to compile these IPC processes, as well as some fixes in the irmd (rudimentary capturing exit signals) and some fixes in the library, mainly relating to the messaging. Basic implementation of creation / bootstrapping / deletion of the shim UDP. Placeholders for other functions.
Diffstat (limited to 'src/ipcpd/shim-udp/tests')
-rw-r--r--src/ipcpd/shim-udp/tests/CMakeLists.txt33
-rw-r--r--src/ipcpd/shim-udp/tests/shim_udp_test.c103
2 files changed, 136 insertions, 0 deletions
diff --git a/src/ipcpd/shim-udp/tests/CMakeLists.txt b/src/ipcpd/shim-udp/tests/CMakeLists.txt
new file mode 100644
index 00000000..bdd7defb
--- /dev/null
+++ b/src/ipcpd/shim-udp/tests/CMakeLists.txt
@@ -0,0 +1,33 @@
+get_filename_component(PARENT_SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY)
+get_filename_component(PARENT_BINARY_PATH ${CMAKE_CURRENT_BINARY_DIR} DIRECTORY)
+get_filename_component(PARENT_DIR ${PARENT_SOURCE_PATH} NAME)
+
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+include_directories(${PARENT_SOURCE_PATH})
+include_directories(${PARENT_BINARY_PATH})
+
+include_directories(${CMAKE_SOURCE_DIR}/include)
+include_directories(${CMAKE_BINARY_DIR}/include)
+
+create_test_sourcelist(${PARENT_DIR}_tests test_suite.c
+ # Add new tests here
+ shim_udp_test.c
+)
+
+add_executable(${PARENT_DIR}_test EXCLUDE_FROM_ALL ${IPCP_SOURCES} ${${PARENT_DIR}_tests})
+target_link_libraries(${PARENT_DIR}_test ouroboros)
+
+include(MacroAddCompileFlags)
+MACRO_ADD_COMPILE_FLAGS(${PARENT_DIR}_test -DMAKE_CHECK)
+
+add_dependencies(check ${PARENT_DIR}_test)
+
+set(tests_to_run ${${PARENT_DIR}_tests})
+remove(tests_to_run test_suite.c)
+
+foreach(test ${tests_to_run})
+ get_filename_component(test_name ${test} NAME_WE)
+ add_test(${test_name} ${C_TEST_PATH}/${PARENT_DIR}_test ${test_name})
+endforeach(test)
diff --git a/src/ipcpd/shim-udp/tests/shim_udp_test.c b/src/ipcpd/shim-udp/tests/shim_udp_test.c
new file mode 100644
index 00000000..427d0e1e
--- /dev/null
+++ b/src/ipcpd/shim-udp/tests/shim_udp_test.c
@@ -0,0 +1,103 @@
+/*
+ * Ouroboros - Copyright (C) 2016
+ *
+ * Test of the Shim UDP IPCP Daemon
+ *
+ * Dimitri Staessens <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <ouroboros/config.h>
+#include <ouroboros/dif_config.h>
+#include <ouroboros/utils.h>
+#include <ouroboros/shm_du_map.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include "main.c"
+
+#include <ouroboros/logs.h>
+
+struct ipcp * _ipcp;
+
+int shim_udp_test(int argc, char ** argv)
+{
+ /* argument 1: pid of irmd ? */
+ /* argument 2: ap name */
+ /* argument 3: instance id */
+ struct shm_du_map * dum;
+ char * ipcp_name = "test-shim-ipcp";
+ char * i_id = "1";
+ int i = 0;
+
+ char bogus[15];
+ memset (&bogus, 0, 15);
+
+ struct dif_config conf;
+ memset (&conf, 0, sizeof conf);
+ conf.dif_name = strdup("test-dif");
+ conf.type = IPCP_SHIM_UDP;
+ conf.ip_addr = 0;
+
+ dum = shm_du_map_create();
+ if (dum == NULL) {
+ LOG_ERR("Failed to create shared memory.");
+ exit(1);
+ }
+
+ _ipcp = ipcp_udp_create(ipcp_name, i_id);
+ if (_ipcp == NULL) {
+ LOG_ERR("Could not instantiate shim IPCP.");
+ shm_du_map_close(dum);
+ exit(1);
+ }
+
+ if (ipcp_udp_bootstrap (&conf)) {
+ LOG_ERR("Could not bootstrap.");
+ }
+
+ if(ipcp_udp_ap_reg("bogus ap", 1865)) {
+ LOG_ERR("Failed to register application.");
+ shm_du_map_close(dum);
+ exit(1);
+ }
+
+ if (ipcp_udp_ap_unreg(1865)) {
+ LOG_ERR("Failed to unregister application.");
+ shm_du_map_close(dum);
+ exit(1);
+ }
+
+ for (i = 0; i < 1000; ++i) {
+ sprintf (bogus, "bogus ap %4d", i);
+ if(ipcp_udp_ap_reg(bogus, i)) {
+ LOG_ERR("Failed to register application %s.", bogus);
+ shm_du_map_close(dum);
+ exit(1);
+ }
+ }
+
+ for (i = 0; i < 1000; ++i) {
+ if(ipcp_udp_ap_unreg(i)) {
+ LOG_ERR("Failed to unregister application %d.", i);
+ shm_du_map_close(dum);
+ exit(1);
+ }
+ }
+
+ shm_du_map_close(dum);
+
+ exit(0);
+}