From 45689fd8799186fd6be0b308745aef428ab50dcc Mon Sep 17 00:00:00 2001 From: Joachim Lindborg Date: Fri, 30 Aug 2013 02:29:52 +0200 Subject: First implementation of the xep_0323 and xep_325 used in IoT systems. Tests are added for stanza and streams --- tests/test_stream_xep_0325.py | 365 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 365 insertions(+) create mode 100644 tests/test_stream_xep_0325.py (limited to 'tests/test_stream_xep_0325.py') diff --git a/tests/test_stream_xep_0325.py b/tests/test_stream_xep_0325.py new file mode 100644 index 00000000..4b3250fc --- /dev/null +++ b/tests/test_stream_xep_0325.py @@ -0,0 +1,365 @@ +# -*- coding: utf-8 -*- +""" + SleekXMPP: The Sleek XMPP Library + Implementation of xeps for Internet of Things + http://wiki.xmpp.org/web/Tech_pages/IoT_systems + Copyright (C) 2013 Sustainable Innovation, Joachim.lindborg@sust.se, bjorn.westrom@consoden.se + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" + +import sys +import datetime +import time +import threading + +from sleekxmpp.test import * +from sleekxmpp.xmlstream import ElementBase +from sleekxmpp.plugins.xep_0325.device import Device + + +class TestStreamControl(SleekTest): + + """ + Test using the XEP-0325 plugin. + """ + def setUp(self): + pass + + def _time_now(self): + return datetime.datetime.now().replace(microsecond=0).isoformat(); + + def tearDown(self): + self.stream_close() + + def testRequestSetOk(self): + self.stream_start(mode='component', + plugins=['xep_0030', + 'xep_0325']) + + myDevice = Device("Device22"); + myDevice._add_control_field(name="Temperature", typename="int", value="15"); + + self.xmpp['xep_0325'].register_node(nodeId="Device22", device=myDevice, commTimeout=0.5); + + self.recv(""" + + + + + + """) + + self.send(""" + + + + """) + + self.assertEqual(myDevice._get_field_value("Temperature"), "17"); + + def testRequestSetMulti(self): + self.stream_start(mode='component', + plugins=['xep_0030', + 'xep_0325']) + + myDevice = Device("Device22"); + myDevice._add_control_field(name="Temperature", typename="int", value="15"); + myDevice._add_control_field(name="Startup", typename="date", value="2013-01-03"); + + myDevice2 = Device("Device23"); + myDevice2._add_control_field(name="Temperature", typename="int", value="19"); + myDevice2._add_control_field(name="Startup", typename="date", value="2013-01-09"); + + self.xmpp['xep_0325'].register_node(nodeId="Device22", device=myDevice, commTimeout=0.5); + self.xmpp['xep_0325'].register_node(nodeId="Device23", device=myDevice2, commTimeout=0.5); + + self.recv(""" + + + + + + + """) + + self.send(""" + + + + """) + + self.assertEqual(myDevice._get_field_value("Temperature"), "17"); + self.assertEqual(myDevice2._get_field_value("Temperature"), "19"); + + self.recv(""" + + + + + + + + + """) + + self.send(""" + + + + """) + + self.assertEqual(myDevice._get_field_value("Temperature"), "20"); + self.assertEqual(myDevice2._get_field_value("Temperature"), "20"); + self.assertEqual(myDevice._get_field_value("Startup"), "2013-02-01"); + self.assertEqual(myDevice2._get_field_value("Startup"), "2013-02-01"); + + def testRequestSetFail(self): + self.stream_start(mode='component', + plugins=['xep_0030', + 'xep_0325']) + + myDevice = Device("Device23"); + myDevice._add_control_field(name="Temperature", typename="int", value="15"); + + self.xmpp['xep_0325'].register_node(nodeId="Device23", device=myDevice, commTimeout=0.5); + + self.recv(""" + + + + + + """) + + self.send(""" + + + + Invalid field Voltage + + + """) + + self.assertEqual(myDevice._get_field_value("Temperature"), "15"); + self.assertFalse(myDevice.has_control_field("Voltage", "int")); + + def testDirectSetOk(self): + self.stream_start(mode='component', + plugins=['xep_0030', + 'xep_0325']) + + myDevice = Device("Device22"); + myDevice._add_control_field(name="Temperature", typename="int", value="15"); + + self.xmpp['xep_0325'].register_node(nodeId="Device22", device=myDevice, commTimeout=0.5); + + self.recv(""" + + + + + + """) + + time.sleep(.5) + + self.assertEqual(myDevice._get_field_value("Temperature"), "17"); + + def testDirectSetFail(self): + self.stream_start(mode='component', + plugins=['xep_0030', + 'xep_0325']) + + myDevice = Device("Device22"); + myDevice._add_control_field(name="Temperature", typename="int", value="15"); + + self.xmpp['xep_0325'].register_node(nodeId="Device22", device=myDevice, commTimeout=0.5); + + self.recv(""" + + + + + + """) + + time.sleep(.5) + + self.assertEqual(myDevice._get_field_value("Temperature"), "15"); + self.assertFalse(myDevice.has_control_field("Voltage", "int")); + + + def testRequestSetOkAPI(self): + + self.stream_start(mode='client', + plugins=['xep_0030', + 'xep_0325']) + + results = []; + + def my_callback(from_jid, result, nodeIds=None, fields=None, error_msg=None): + results.append(result); + + fields = [] + fields.append(("Temperature", "double", "20.5")) + fields.append(("TemperatureAlarmSetting", "string", "High")) + + self.xmpp['xep_0325'].set_request(from_jid="tester@localhost", to_jid="you@google.com", fields=fields, nodeIds=['Device33', 'Device22'], callback=my_callback); + + self.send(""" + + + + + + + + + """) + + self.recv(""" + + + + """) + + time.sleep(.5) + + self.assertEqual(results, ["OK"]); + + def testRequestSetErrorAPI(self): + + self.stream_start(mode='client', + plugins=['xep_0030', + 'xep_0325']) + + results = []; + + def my_callback(from_jid, result, nodeIds=None, fields=None, error_msg=None): + results.append(result); + + fields = [] + fields.append(("Temperature", "double", "20.5")) + fields.append(("TemperatureAlarmSetting", "string", "High")) + + self.xmpp['xep_0325'].set_request(from_jid="tester@localhost", to_jid="you@google.com", fields=fields, nodeIds=['Device33', 'Device22'], callback=my_callback); + + self.send(""" + + + + + + + + + """) + + self.recv(""" + + + Sensor error + + + """) + + time.sleep(.5) + + self.assertEqual(results, ["OtherError"]); + + def testServiceDiscoveryClient(self): + self.stream_start(mode='client', + plugins=['xep_0030', + 'xep_0325']); + + self.recv(""" + + + + """) + + self.send(""" + + + + + + + """) + + def testServiceDiscoveryComponent(self): + self.stream_start(mode='component', + plugins=['xep_0030', + 'xep_0325']); + + self.recv(""" + + + + """) + + self.send(""" + + + + + + + """) + + +suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamControl) + -- cgit v1.2.3