From 6c729f50d64a5a4c142c0be523db5b31c71f6200 Mon Sep 17 00:00:00 2001 From: Joakim Eriksson Date: Wed, 29 Nov 2017 22:44:41 +0100 Subject: [PATCH] added lwm2m-ipso test --- os/net/app-layer/coap/coap-uip.c | 2 + os/services/ipso-objects/ipso-leds-control.c | 2 +- os/services/lwm2m/lwm2m-rd-client.c | 3 + tests/18-coap-lwm2m/06-lwm2m-ipso-test.sh | 60 +++++++++++++++++ tests/18-coap-lwm2m/Makefile | 1 + tests/18-coap-lwm2m/pytests/test-device.py | 71 ++++++++++++++++++++ 6 files changed, 138 insertions(+), 1 deletion(-) create mode 100755 tests/18-coap-lwm2m/06-lwm2m-ipso-test.sh create mode 100644 tests/18-coap-lwm2m/Makefile create mode 100644 tests/18-coap-lwm2m/pytests/test-device.py diff --git a/os/net/app-layer/coap/coap-uip.c b/os/net/app-layer/coap/coap-uip.c index 70e720063..5ea982d93 100644 --- a/os/net/app-layer/coap/coap-uip.c +++ b/os/net/app-layer/coap/coap-uip.c @@ -216,9 +216,11 @@ int coap_endpoint_is_connected(const coap_endpoint_t *ep) { #if UIP_CONF_IPV6_RPL +#ifndef CONTIKI_TARGET_NATIVE if(rpl_get_any_dag() == NULL) { return 0; } +#endif #endif /* UIP_CONF_IPV6_RPL */ #ifdef WITH_DTLS diff --git a/os/services/ipso-objects/ipso-leds-control.c b/os/services/ipso-objects/ipso-leds-control.c index 74e599c14..8cfbdac41 100644 --- a/os/services/ipso-objects/ipso-leds-control.c +++ b/os/services/ipso-objects/ipso-leds-control.c @@ -72,11 +72,11 @@ static led_state_t leds_controls[LEDS_CONTROL_NUMBER]; static lwm2m_status_t set_value(ipso_control_t *control, uint8_t value) { +#if PLATFORM_HAS_LEDS led_state_t *state; state = (led_state_t *)control; -#if PLATFORM_HAS_LEDS if(value) { leds_on(state->led_value); } else { diff --git a/os/services/lwm2m/lwm2m-rd-client.c b/os/services/lwm2m/lwm2m-rd-client.c index 8118a9cb8..36d934323 100644 --- a/os/services/lwm2m/lwm2m-rd-client.c +++ b/os/services/lwm2m/lwm2m-rd-client.c @@ -176,9 +176,12 @@ static int has_network_access(void) { #if UIP_CONF_IPV6_RPL +/* NATIVE PLATFORM is not really running RPL */ +#ifndef CONTIKI_TARGET_NATIVE if(rpl_get_any_dag() == NULL) { return 0; } +#endif #endif /* UIP_CONF_IPV6_RPL */ return 1; } diff --git a/tests/18-coap-lwm2m/06-lwm2m-ipso-test.sh b/tests/18-coap-lwm2m/06-lwm2m-ipso-test.sh new file mode 100755 index 000000000..e3a4bfa45 --- /dev/null +++ b/tests/18-coap-lwm2m/06-lwm2m-ipso-test.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +# Contiki directory +CONTIKI=$1 +# Test basename +BASENAME=06-lwm2m-test + +IPADDR=fd00::302:304:506:708 + +echo "Enabling IPv6" +sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0 + +# Starting Contiki-NG native node +echo "Starting native node - lwm2m/ipso objects" +make -C $CONTIKI/examples/ipso-objects/example-ipso-objects > make.log 2> make.err +sudo $CONTIKI/examples/ipso-objects/example-ipso-objects.native > node.log 2> node.err & +CPID=$! +sleep 10 + +echo "Downloading leshan" +wget -nc https://joakimeriksson.github.io/resources/leshan-server-demo-1.0.0-SNAPSHOT-jar-with-dependencies.jar +echo "Starting leshan server" +java -jar leshan-server-demo-1.0.0-SNAPSHOT-jar-with-dependencies.jar >leshan.log 2>leshan.err & +LESHID=$! +sleep 50 + +echo "Closing native node" +sleep 1 +pgrep ipso | sudo xargs kill -9 + +echo "Closing leshan" +sleep 1 +pgrep java | sudo xargs kill -9 + + +if grep -q 'OK' leshan.err ; then + cp leshan.err $BASENAME.testlog; + printf "%-32s TEST OK\n" "$BASENAME" | tee $BASENAME.testlog; +else + echo "==== make.log ====" ; cat make.log; + echo "==== make.err ====" ; cat make.err; + echo "==== node.log ====" ; cat node.log; + echo "==== node.err ====" ; cat node.err; + echo "==== leshan.log ====" ; cat leshan.log; + echo "==== leshan.err ====" ; cat leshan.err; + echo "==== $BASENAME.log ====" ; cat $BASENAME.log; + + printf "%-32s TEST FAIL\n" "$BASENAME" | tee $BASENAME.testlog; +fi + +rm make.log +rm make.err +rm node.log +rm node.err +rm leshan.log +rm leshan.err + +# We do not want Make to stop -> Return 0 +# The Makefile will check if a log contains FAIL at the end +exit 0 diff --git a/tests/18-coap-lwm2m/Makefile b/tests/18-coap-lwm2m/Makefile new file mode 100644 index 000000000..c46e5271d --- /dev/null +++ b/tests/18-coap-lwm2m/Makefile @@ -0,0 +1 @@ +include ../Makefile.script-test diff --git a/tests/18-coap-lwm2m/pytests/test-device.py b/tests/18-coap-lwm2m/pytests/test-device.py new file mode 100644 index 000000000..84147d2f5 --- /dev/null +++ b/tests/18-coap-lwm2m/pytests/test-device.py @@ -0,0 +1,71 @@ +import unittest, array, time + +class TestDevice(unittest.TestCase): + global client + + def test_available_power_sources(self): + r = client.readTLV("3/0/6") + self.assertEqual(r.getCode().getName(), "CONTENT") + + def test_device_read_JSON(self): + r = client.readJSON("3/0/1") + self.assertEqual(r.getCode().getName(), "CONTENT") + + def test_manufacturer_read(self): + r = client.read("3/0/0") + self.assertEqual(r.getCode().getName(), "CONTENT") + + def test_manufacturer_readJSON(self): + r = client.readJSON("3/0/0") + self.assertEqual(r.getCode().getName(), "CONTENT") + + def test_manufacturer_write(self): + r = client.write(3, 0, 0, "abc"); + self.assertEqual(r.getCode().getName(), "METHOD_NOT_ALLOWED") + + def test_manufacturer_execute(self): + r = client.execute("3/0/0") + self.assertEqual(r.getCode().getName(), "METHOD_NOT_ALLOWED") + + def test_reboot_read(self): + r = client.read("3/0/4") + self.assertEqual(r.getCode().getName(), "METHOD_NOT_ALLOWED") + +# def test_opaque_read(self): +# r = client.readTLV("4711/0/11000") +# v = r.getContent().getValue(); + #print "Result:", v + #print "Type: ", type(v) + #print "Type code: ", v.typecode + #print "Data size: ", len(v) +# self.assertEqual(len(v), 900) + +# def test_object_with_opaque_read(self): +# r = client.readTLV("4711/0/") +# self.assertEqual(r.getCode().getName(), "CONTENT") + + def test_device_time_write(self): + r = client.write(3,0,13,1000) + self.assertEqual(r.getCode().getName(), "CHANGED") + time.sleep(4.9) + r = client.read("3/0/13") + v = r.getContent().getValue().getTime() + self.assertTrue(v > 1000) + print "Time: ", v + + + +print "----------------------------------------" +print "LWM2M Tester - name of client: ", client.endpoint +print "----------------------------------------" + +r = client.read("3/0/0"); +print "Code:", r.getCode(), r.getCode().getName() == "CONTENT" +print "Objects: ", client.links +print "Read Manufacturer => ", client.read("3/0/0") +print "Read Device => ", client.readTLV("3/0/") +print "Write Manufacturer => ", client.write(3, 0, 0, "abc") +print "Exe Manufacturer => ", client.execute("3/0/0") + +suite = unittest.TestLoader().loadTestsFromTestCase(TestDevice) +unittest.TextTestRunner(verbosity=2).run(suite)