From d6172935b5e766422a91fdb9875a083926631d2c Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 13 Nov 2013 15:27:40 +0100 Subject: ping01: New test --- Makefile | 12 ++ freebsd-to-rtems.py | 1 + .../include/rtems/bsd/test/default-network-init.h | 190 +++++++++++++++++++++ testsuite/ping01/test_main.c | 70 ++++++++ 4 files changed, 273 insertions(+) create mode 100644 testsuite/include/rtems/bsd/test/default-network-init.h create mode 100644 testsuite/ping01/test_main.c diff --git a/Makefile b/Makefile index 70dd0b96..5d12e0da 100644 --- a/Makefile +++ b/Makefile @@ -786,6 +786,18 @@ LIB_C_FILES += freebsd/usr.bin/netstat/pfkey.c LIB_C_FILES += freebsd/usr.bin/netstat/sctp.c LIB_C_FILES += freebsd/usr.bin/netstat/unix.c +TEST_PING01 = testsuite/ping01/ping01.exe +TEST_PING01_O_FILES = +TEST_PING01_D_FILES = +TEST_PING01_O_FILES += testsuite/ping01/test_main.o +TEST_PING01_D_FILES += testsuite/ping01/test_main.d +$(TEST_PING01): $(TEST_PING01_O_FILES) $(LIB) + $(LINK.c) -Wl,-Map,testsuite/ping01/ping01.map $^ -lm -lz -o $@ +NET_TESTS += $(TEST_PING01) +O_FILES += $(TEST_PING01_O_FILES) +D_FILES += $(TEST_PING01_D_FILES) +RUN_NET_TESTS += $(TEST_PING01) + TEST_SELECTPOLLKQUEUE01 = testsuite/selectpollkqueue01/selectpollkqueue01.exe TEST_SELECTPOLLKQUEUE01_O_FILES = TEST_SELECTPOLLKQUEUE01_D_FILES = diff --git a/freebsd-to-rtems.py b/freebsd-to-rtems.py index b83d2a62..f472006b 100755 --- a/freebsd-to-rtems.py +++ b/freebsd-to-rtems.py @@ -2417,6 +2417,7 @@ in_cksum.addCPUDependentSourceFiles( ) tests = Module('tests') +tests.addTest('ping01', ['test_main'], netTest = True) tests.addTest('selectpollkqueue01', ['test_main']) tests.addTest('rwlock01', ['test_main']) tests.addTest('sleep01', ['test_main']) diff --git a/testsuite/include/rtems/bsd/test/default-network-init.h b/testsuite/include/rtems/bsd/test/default-network-init.h new file mode 100644 index 00000000..334d1a9b --- /dev/null +++ b/testsuite/include/rtems/bsd/test/default-network-init.h @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include + +#include + +#include +#include +#include +#include + +#define DEFAULT_NETWORK_ARGC(x) (RTEMS_ARRAY_SIZE(x) - 1) + +static void +default_network_set_self_prio(rtems_task_priority prio) +{ + rtems_status_code sc; + + sc = rtems_task_set_priority(RTEMS_SELF, prio, &prio); + assert(sc == RTEMS_SUCCESSFUL); +} + +static void +default_network_ifconfig_lo0(void) +{ + int exit_code; + char *lo0[] = { + "ifconfig", + "lo0", + "inet", + "127.0.0.1", + "netmask", + "255.255.255.0", + NULL + }; + char *lo0_inet6[] = { + "ifconfig", + "lo0", + "inet6", + "::1", + "prefixlen", + "128", + NULL + }; + + exit_code = rtems_bsd_command_ifconfig(DEFAULT_NETWORK_ARGC(lo0), lo0); + assert(exit_code == EX_OK); + + exit_code = rtems_bsd_command_ifconfig(DEFAULT_NETWORK_ARGC(lo0_inet6), lo0_inet6); + assert(exit_code == EX_OK); +} + +static void +default_network_ifconfig_interface_0(void) +{ + int exit_code; + char *iface0[] = { + "ifconfig", + NET_CFG_INTERFACE_0, + "inet", + NET_CFG_SELF_IP, + "netmask", + NET_CFG_NETMASK, + NULL + }; + + exit_code = rtems_bsd_command_ifconfig(DEFAULT_NETWORK_ARGC(iface0), iface0); + assert(exit_code == EX_OK); +} + +static void +default_network_route(void) +{ + int exit_code; + char *dflt_route[] = { + "route", + "add", + "-host", + NET_CFG_GATEWAY_IP, + "-iface", + NET_CFG_INTERFACE_0, + NULL + }; + char *dflt_route2[] = { + "route", + "add", + "default", + NET_CFG_GATEWAY_IP, + NULL + }; + + exit_code = rtems_bsd_command_route(ARGC(dflt_route), dflt_route); + assert(exit_code == EXIT_SUCCESS); + + exit_code = rtems_bsd_command_route(ARGC(dflt_route2), dflt_route2); + assert(exit_code == EXIT_SUCCESS); +} + +static void +default_network_on_exit(int exit_code, void *arg) +{ + rtems_stack_checker_report_usage_with_plugin(NULL, + rtems_printf_plugin); + + if (exit_code == 0) { + puts("*** END OF TEST " TEST_NAME " ***"); + } +} + +static void +Init(rtems_task_argument arg) +{ + rtems_status_code sc; + + puts("*** " TEST_NAME " TEST ***"); + + on_exit(default_network_on_exit, NULL); + + /* Let other tasks run to complete background work */ + default_network_set_self_prio(RTEMS_MAXIMUM_PRIORITY - 1); + + rtems_bsd_initialize_with_interrupt_server(); + + /* Let the callout timer allocate its resources */ + sc = rtems_task_wake_after(2); + assert(sc == RTEMS_SUCCESSFUL); + + default_network_ifconfig_lo0(); + default_network_ifconfig_interface_0(); + default_network_route(); + + test_main(); + + assert(0); +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM + +#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 32 + +#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1 + +#define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 32 +#define CONFIGURE_UNLIMITED_OBJECTS +#define CONFIGURE_UNIFIED_WORK_AREAS + +#define CONFIGURE_STACK_CHECKER_ENABLED + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024) +#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES + +#define CONFIGURE_INIT + +#include diff --git a/testsuite/ping01/test_main.c b/testsuite/ping01/test_main.c new file mode 100644 index 00000000..0eb99a2d --- /dev/null +++ b/testsuite/ping01/test_main.c @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2013 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include + +#include + +#include + +#define TEST_NAME "LIBBSD PING 1" + +#define ARGC(x) (RTEMS_ARRAY_SIZE(x) - 1) + +static void +test_ping(void) +{ + int exit_code; + char *ping[] = { + "ping", + "-c", + "3", + NET_CFG_PEER_IP, + NULL + }; + + exit_code = rtems_bsd_command_ping(ARGC(ping), ping); + assert(exit_code == EXIT_SUCCESS); +} + +static void +test_main(void) +{ + test_ping(); + + exit(0); +} + +#include -- cgit v1.2.3