From 8b77c5ef4ccb7d818fafa87cbbe26fc39aa367d6 Mon Sep 17 00:00:00 2001 From: Yasuyuki Tanaka Date: Fri, 10 Feb 2017 16:57:04 +0100 Subject: [PATCH] TSCH: add a regression test for tsch_queue_flush_nbr_queue() --- .../27-tsch/01-cooja-flush-nbr-queue.csc | 147 ++++++++++++++++++ regression-tests/27-tsch/Makefile | 1 + regression-tests/27-tsch/code/Makefile | 11 ++ regression-tests/27-tsch/code/common.c | 54 +++++++ regression-tests/27-tsch/code/common.h | 39 +++++ regression-tests/27-tsch/code/project-conf.h | 63 ++++++++ .../27-tsch/code/test-flush-nbr-queue.c | 105 +++++++++++++ regression-tests/27-tsch/js/unit-test.js | 27 ++++ 8 files changed, 447 insertions(+) create mode 100644 regression-tests/27-tsch/01-cooja-flush-nbr-queue.csc create mode 100644 regression-tests/27-tsch/Makefile create mode 100644 regression-tests/27-tsch/code/Makefile create mode 100644 regression-tests/27-tsch/code/common.c create mode 100644 regression-tests/27-tsch/code/common.h create mode 100644 regression-tests/27-tsch/code/project-conf.h create mode 100644 regression-tests/27-tsch/code/test-flush-nbr-queue.c create mode 100644 regression-tests/27-tsch/js/unit-test.js diff --git a/regression-tests/27-tsch/01-cooja-flush-nbr-queue.csc b/regression-tests/27-tsch/01-cooja-flush-nbr-queue.csc new file mode 100644 index 000000000..948822670 --- /dev/null +++ b/regression-tests/27-tsch/01-cooja-flush-nbr-queue.csc @@ -0,0 +1,147 @@ + + + [APPS_DIR]/mrm + [APPS_DIR]/mspsim + [APPS_DIR]/avrora + [APPS_DIR]/serial_socket + [APPS_DIR]/collect-view + [APPS_DIR]/powertracker + + My simulation + 123456 + 1000000 + + org.contikios.cooja.radiomediums.UDGM + 50.0 + 100.0 + 1.0 + 1.0 + + + 40000 + + + org.contikios.cooja.contikimote.ContikiMoteType + mtype476 + Cooja Mote Type #1 + [CONTIKI_DIR]/regression-tests/27-tsch/code/test-flush-nbr-queue.c + make test-flush-nbr-queue.cooja TARGET=cooja + org.contikios.cooja.interfaces.Position + org.contikios.cooja.interfaces.Battery + org.contikios.cooja.contikimote.interfaces.ContikiVib + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + org.contikios.cooja.contikimote.interfaces.ContikiRS232 + org.contikios.cooja.contikimote.interfaces.ContikiBeeper + org.contikios.cooja.interfaces.RimeAddress + org.contikios.cooja.contikimote.interfaces.ContikiIPAddress + org.contikios.cooja.contikimote.interfaces.ContikiRadio + org.contikios.cooja.contikimote.interfaces.ContikiButton + org.contikios.cooja.contikimote.interfaces.ContikiPIR + org.contikios.cooja.contikimote.interfaces.ContikiClock + org.contikios.cooja.contikimote.interfaces.ContikiLED + org.contikios.cooja.contikimote.interfaces.ContikiCFS + org.contikios.cooja.contikimote.interfaces.ContikiEEPROM + org.contikios.cooja.interfaces.Mote2MoteRelations + org.contikios.cooja.interfaces.MoteAttributes + false + + + + org.contikios.cooja.interfaces.Position + 38.79981729133275 + 97.05367953429746 + 0.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiMoteID + 1 + + + org.contikios.cooja.contikimote.interfaces.ContikiRadio + 250.0 + + + org.contikios.cooja.contikimote.interfaces.ContikiEEPROM + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + mtype476 + + + + org.contikios.cooja.plugins.SimControl + 280 + 4 + 160 + 400 + 0 + + + org.contikios.cooja.plugins.Visualizer + + true + org.contikios.cooja.plugins.skins.IDVisualizerSkin + org.contikios.cooja.plugins.skins.GridVisualizerSkin + org.contikios.cooja.plugins.skins.TrafficVisualizerSkin + org.contikios.cooja.plugins.skins.UDGMVisualizerSkin + 0.9090909090909091 0.0 0.0 0.9090909090909091 158.72743882606113 84.76938224154777 + + 400 + 3 + 400 + 1 + 1 + + + org.contikios.cooja.plugins.LogListener + + + + + + 1320 + 2 + 240 + 400 + 160 + + + org.contikios.cooja.plugins.TimeLine + + 0 + + + + 500.0 + + 1720 + 1 + 166 + 0 + 957 + + + org.contikios.cooja.plugins.Notes + + Enter notes here + true + + 1040 + 0 + 160 + 680 + 0 + + + org.contikios.cooja.plugins.ScriptRunner + + [CONTIKI_DIR]/regression-tests/27-tsch/js/unit-test.js + true + + 495 + 0 + 525 + 663 + 105 + + + diff --git a/regression-tests/27-tsch/Makefile b/regression-tests/27-tsch/Makefile new file mode 100644 index 000000000..272bc7da1 --- /dev/null +++ b/regression-tests/27-tsch/Makefile @@ -0,0 +1 @@ +include ../Makefile.simulation-test diff --git a/regression-tests/27-tsch/code/Makefile b/regression-tests/27-tsch/code/Makefile new file mode 100644 index 000000000..5c3708798 --- /dev/null +++ b/regression-tests/27-tsch/code/Makefile @@ -0,0 +1,11 @@ +all: + +CFLAGS += -D PROJECT_CONF_H=\"project-conf.h\" +APPS += unit-test +MODULES += core/net/mac/tsch core/net/mac/tsch/sixtop + +PROJECT_SOURCEFILES += common.c + +CONTIKI = ../../.. +CONTIKI_WITH_IPV6 = 1 +include $(CONTIKI)/Makefile.include diff --git a/regression-tests/27-tsch/code/common.c b/regression-tests/27-tsch/code/common.c new file mode 100644 index 000000000..51fd1fbfb --- /dev/null +++ b/regression-tests/27-tsch/code/common.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2017, Yasuyuki Tanaka + * All rights reserved. + * + * 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. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 + * COPYRIGHT HOLDER 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 "unit-test.h" +#include "common.h" + +#include "lib/simEnvChange.h" +#include "sys/cooja_mt.h" + +void +test_print_report(const unit_test_t *utp) +{ + printf("=check-me= "); + if(utp->result == unit_test_failure) { + printf("FAILED - %s: exit at L%u\n", utp->descr, utp->exit_line); + } else { + printf("SUCCEEDED - %s\n", utp->descr); + } + + /* give up the CPU so that the mote can output messages in the serial buffer */ + simProcessRunValue = 1; + cooja_mt_yield(); +} diff --git a/regression-tests/27-tsch/code/common.h b/regression-tests/27-tsch/code/common.h new file mode 100644 index 000000000..5b7f1f645 --- /dev/null +++ b/regression-tests/27-tsch/code/common.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2017, Yasuyuki Tanaka + * All rights reserved. + * + * 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. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 + * COPYRIGHT HOLDER 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. + */ + +#ifndef _COMMON_H +#define _COMMON_H + +#include "unit-test.h" + +void test_print_report(const unit_test_t *utp); + +#endif /* !_COMMON_H */ diff --git a/regression-tests/27-tsch/code/project-conf.h b/regression-tests/27-tsch/code/project-conf.h new file mode 100644 index 000000000..e15264432 --- /dev/null +++ b/regression-tests/27-tsch/code/project-conf.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2017, Yasuyuki Tanaka + * All rights reserved. + * + * 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. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 + * COPYRIGHT HOLDER 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. + */ + +#ifndef _PROJECT_CONF_H_ +#define _PROJECT_CONF_H_ + +#define UNIT_TEST_PRINT_FUNCTION test_print_report + +/* Set the minimum value of QUEUEBUF_CONF_NUM for the flush_nbr_queue test */ +#undef QUEUEBUF_CONF_NUM +#define QUEUEBUF_CONF_NUM 1 + +#undef TSCH_LOG_CONF_LEVEL +#define TSCH_LOG_CONF_LEVEL 2 + +#undef TSCH_CONF_AUTOSTART +#define TSCH_CONF_AUTOSTART 1 + +#undef NETSTACK_CONF_MAC +#define NETSTACK_CONF_MAC tschmac_driver + +#undef NETSTACK_CONF_RDC +#define NETSTACK_CONF_RDC nordc_driver + +#undef NETSTACK_CONF_FRAMER +#define NETSTACK_CONF_FRAMER framer_802154 + +#undef FRAME802154_CONF_VERSION +#define FRAME802154_CONF_VERSION FRAME802154_IEEE802154E_2012 + +#if CONTIKI_TARGET_COOJA +#define COOJA_CONF_SIMULATE_TURNAROUND 0 +#endif /* CONTIKI_TARGET_COOJA */ + +#endif /* __PROJECT_CONF_H__ */ diff --git a/regression-tests/27-tsch/code/test-flush-nbr-queue.c b/regression-tests/27-tsch/code/test-flush-nbr-queue.c new file mode 100644 index 000000000..6af9c156c --- /dev/null +++ b/regression-tests/27-tsch/code/test-flush-nbr-queue.c @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2017, Yasuyuki Tanaka + * All rights reserved. + * + * 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. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 + * COPYRIGHT HOLDER 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 "contiki.h" +#include "contiki-net.h" +#include "contiki-lib.h" +#include "lib/assert.h" + +#include "net/linkaddr.h" +#include "net/mac/tsch/tsch.h" +#include "net/mac/tsch/tsch-queue.h" + +#include "unit-test.h" +#include "common.h" + +PROCESS(test_process, "tsch_queue_flush_nbr_queue() test"); +AUTOSTART_PROCESSES(&test_process); + +static linkaddr_t test_nbr_addr = {{ 0x01 }}; +#define TEST_PEER_ADDR &test_nbr_addr + +UNIT_TEST_REGISTER(test, + "flush_nbr_queue() should delete all the packet in the queue"); +UNIT_TEST(test) +{ + struct tsch_packet *packet; + struct tsch_neighbor *nbr; + + UNIT_TEST_BEGIN(); + + packet = tsch_queue_add_packet(TEST_PEER_ADDR, NULL, NULL); + UNIT_TEST_ASSERT(packet != NULL); + + nbr = tsch_queue_get_nbr(TEST_PEER_ADDR); + UNIT_TEST_ASSERT(nbr != NULL); + + /* + * QUEUEBUF_CONF_NUM is set with 1; so another addition should fail due to + * lack of memory. + */ + packet = tsch_queue_add_packet(TEST_PEER_ADDR, NULL, NULL); + UNIT_TEST_ASSERT(packet == NULL); + + /* tsch_queue_flush_nbr_queue() is called inside of tsch_queue_reset(). */ + tsch_queue_reset(); + + /* After flushing the nbr queue, we should be able to add a new packet */ + packet = tsch_queue_add_packet(TEST_PEER_ADDR, NULL, NULL); + UNIT_TEST_ASSERT(packet != NULL); + + UNIT_TEST_END(); +} + +PROCESS_THREAD(test_process, ev, data) +{ + static struct etimer et; + + PROCESS_BEGIN(); + + tsch_set_coordinator(1); + + etimer_set(&et, CLOCK_SECOND); + while(tsch_is_associated == 0) { + PROCESS_YIELD_UNTIL(etimer_expired(&et)); + etimer_reset(&et); + } + + printf("Run unit-test\n"); + printf("---\n"); + + UNIT_TEST_RUN(test); + + printf("=check-me= DONE\n"); + PROCESS_END(); +} diff --git a/regression-tests/27-tsch/js/unit-test.js b/regression-tests/27-tsch/js/unit-test.js new file mode 100644 index 000000000..015d3b63b --- /dev/null +++ b/regression-tests/27-tsch/js/unit-test.js @@ -0,0 +1,27 @@ +TIMEOUT(10000, log.testFailed()); + +var failed = false; +var done = 0; + +while(done < sim.getMotes().length) { + YIELD(); + + log.log(time + " " + "node-" + id + " "+ msg + "\n"); + + if(msg.contains("=check-me=") == false) { + continue; + } + + if(msg.contains("FAILED")) { + failed = true; + } + + if(msg.contains("DONE")) { + done++; + } +} +if(failed) { + log.testFailed(); +} +log.testOK(); +