First test stanza
This commit is contained in:
parent
0a2737dc77
commit
b7adaafb3e
9 changed files with 246 additions and 2 deletions
|
@ -79,4 +79,5 @@ __all__ = [
|
|||
'xep_0302', # XMPP Compliance Suites 2012
|
||||
'xep_0308', # Last Message Correction
|
||||
'xep_0313', # Message Archive Management
|
||||
'xep_0323', # IoT Sensor Data
|
||||
]
|
||||
|
|
18
sleekxmpp/plugins/xep_0323/__init__.py
Normal file
18
sleekxmpp/plugins/xep_0323/__init__.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
"""
|
||||
SleekXMPP: The Sleek XMPP Library
|
||||
Implementation of xeps for Internet of Things
|
||||
http://wiki.xmpp.org/web/Tech_pages/IoT_systems
|
||||
Copyright (C) 2013 Joachim Lindborg, Joachim.lindborg@lsys.se
|
||||
This file is part of SleekXMPP.
|
||||
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
from sleekxmpp.plugins.base import register_plugin
|
||||
|
||||
from sleekxmpp.plugins.xep_0323.sensordata import XEP_0323
|
||||
from sleekxmpp.plugins.xep_0323 import stanza
|
||||
|
||||
register_plugin(XEP_0323)
|
||||
|
||||
xep_0323=XEP_0323
|
65
sleekxmpp/plugins/xep_0323/sensordata.py
Normal file
65
sleekxmpp/plugins/xep_0323/sensordata.py
Normal file
|
@ -0,0 +1,65 @@
|
|||
"""
|
||||
SleekXMPP: The Sleek XMPP Library
|
||||
Implementation of xeps for Internet of Things
|
||||
http://wiki.xmpp.org/web/Tech_pages/IoT_systems
|
||||
Copyright (C) 2013 Joachim Lindborg, Joachim.lindborg@lsys.se
|
||||
This file is part of SleekXMPP.
|
||||
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
from sleekxmpp.xmlstream import JID
|
||||
from sleekxmpp.xmlstream.handler import Callback
|
||||
from sleekxmpp.xmlstream.matcher import StanzaPath
|
||||
from sleekxmpp.plugins.base import BasePlugin
|
||||
from sleekxmpp.plugins.xep_0323 import stanza
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class XEP_0323(BasePlugin):
|
||||
|
||||
"""
|
||||
XEP-0323 IoT Sensor Data
|
||||
"""
|
||||
|
||||
name = 'xep_0323'
|
||||
description = 'XEP-0323 Internet of Things - Sensor Data'
|
||||
dependencies = set(['xep_0030']) # set(['xep_0030', 'xep_0004', 'xep_0082', 'xep_0131'])
|
||||
stanza = stanza
|
||||
|
||||
def plugin_init(self):
|
||||
pass
|
||||
# self.node_event_map = {}
|
||||
|
||||
# self.xmpp.register_handler(
|
||||
# Callback('Sensordata Event: Get',
|
||||
# StanzaPath('message/sensordata_event/get'),
|
||||
# self._handle_event_get))
|
||||
|
||||
def plugin_end(self):
|
||||
# self.xmpp.remove_handler('Sensordata Event: Get')
|
||||
pass
|
||||
|
||||
def get_value(self, jid, msg):
|
||||
"""
|
||||
Recieving a stanza for erading values
|
||||
# verify provisioning
|
||||
|
||||
# verify requested values and categories
|
||||
|
||||
# Send accepted
|
||||
# Thread of the readout
|
||||
|
||||
# send started
|
||||
|
||||
# send data messages
|
||||
|
||||
# send done
|
||||
"""
|
||||
pass
|
||||
|
||||
|
1
sleekxmpp/plugins/xep_0323/stanza/.#sensordata.py
Symbolic link
1
sleekxmpp/plugins/xep_0323/stanza/.#sensordata.py
Symbolic link
|
@ -0,0 +1 @@
|
|||
jocke@Joachim-Lindborg.local.29709
|
12
sleekxmpp/plugins/xep_0323/stanza/__init__.py
Normal file
12
sleekxmpp/plugins/xep_0323/stanza/__init__.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
"""
|
||||
SleekXMPP: The Sleek XMPP Library
|
||||
Implementation of xeps for Internet of Things
|
||||
http://wiki.xmpp.org/web/Tech_pages/IoT_systems
|
||||
Copyright (C) 2013 Joachim Lindborg, Joachim.lindborg@lsys.se
|
||||
This file is part of SleekXMPP.
|
||||
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
from sleekxmpp.plugins.xep_0323.stanza.sensordata import *
|
||||
|
12
sleekxmpp/plugins/xep_0323/stanza/base.py
Normal file
12
sleekxmpp/plugins/xep_0323/stanza/base.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
"""
|
||||
SleekXMPP: The Sleek XMPP Library
|
||||
|
||||
Implementation of xeps for Internet of Things
|
||||
http://wiki.xmpp.org/web/Tech_pages/IoT_systems
|
||||
Copyright (C) 2013 Joachim Lindborg, Joachim.lindborg@lsys.se
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
from sleekxmpp.xmlstream import ET
|
||||
|
||||
pass
|
64
sleekxmpp/plugins/xep_0323/stanza/sensordata.py
Normal file
64
sleekxmpp/plugins/xep_0323/stanza/sensordata.py
Normal file
|
@ -0,0 +1,64 @@
|
|||
"""
|
||||
SleekXMPP: The Sleek XMPP Library
|
||||
Implementation of xeps for Internet of Things
|
||||
http://wiki.xmpp.org/web/Tech_pages/IoT_systems
|
||||
Copyright (C) 2013 Joachim Lindborg, Joachim.lindborg@lsys.se
|
||||
This file is part of SleekXMPP.
|
||||
|
||||
See the file LICENSE for copying permission.
|
||||
"""
|
||||
|
||||
from sleekxmpp import Iq, Message
|
||||
from sleekxmpp.xmlstream import register_stanza_plugin, ElementBase, ET, JID
|
||||
|
||||
|
||||
class Sensordata(ElementBase):
|
||||
namespace = 'http://xmpp.org/iot/sensordata'
|
||||
name = 'sensordata'
|
||||
plugin_attrib = name
|
||||
interfaces = set(tuple())
|
||||
|
||||
class Request(ElementBase):
|
||||
namespace = 'http://xmpp.org/iot/sensordata'
|
||||
name = 'req'
|
||||
plugin_attrib = name
|
||||
interfaces = set(('seqnr','momentary'))
|
||||
|
||||
|
||||
class Accepted(ElementBase):
|
||||
namespace = 'http://xmpp.org/iot/sensordata'
|
||||
name = 'accepted'
|
||||
plugin_attrib = name
|
||||
interfaces = set(('seqnr'))
|
||||
|
||||
|
||||
class Failure(ElementBase):
|
||||
namespace = 'http://xmpp.org/iot/sensordata'
|
||||
name = 'failure'
|
||||
plugin_attrib = name
|
||||
interfaces = set(('seqnr','done'))
|
||||
|
||||
|
||||
|
||||
register_stanza_plugin(Iq, Sensordata)
|
||||
register_stanza_plugin(Sensordata, Request)
|
||||
register_stanza_plugin(Sensordata, Accepted)
|
||||
register_stanza_plugin(Sensordata, Failure)
|
||||
# register_stanza_plugin(Pubsub, Default)
|
||||
# register_stanza_plugin(Pubsub, Items)
|
||||
# register_stanza_plugin(Pubsub, Options)
|
||||
# register_stanza_plugin(Pubsub, Publish)
|
||||
# register_stanza_plugin(Pubsub, PublishOptions)
|
||||
# register_stanza_plugin(Pubsub, Retract)
|
||||
# register_stanza_plugin(Pubsub, Subscribe)
|
||||
# register_stanza_plugin(Pubsub, Subscription)
|
||||
# register_stanza_plugin(Pubsub, Subscriptions)
|
||||
# register_stanza_plugin(Pubsub, Unsubscribe)
|
||||
# register_stanza_plugin(Affiliations, Affiliation, iterable=True)
|
||||
# register_stanza_plugin(Configure, xep_0004.Form)
|
||||
# register_stanza_plugin(Items, Item, iterable=True)
|
||||
# register_stanza_plugin(Publish, Item, iterable=True)
|
||||
# register_stanza_plugin(Retract, Item)
|
||||
# register_stanza_plugin(Subscribe, Options)
|
||||
# register_stanza_plugin(Subscription, SubscribeOptions)
|
||||
# register_stanza_plugin(Subscriptions, Subscription, iterable=True)
|
18
testall.py
18
testall.py
|
@ -2,15 +2,18 @@
|
|||
|
||||
import os
|
||||
import sys
|
||||
sys.path=['/Users/jocke/Dropbox/06_dev/SleekXMPP']+sys.path
|
||||
|
||||
import logging
|
||||
import unittest
|
||||
import distutils.core
|
||||
|
||||
|
||||
from glob import glob
|
||||
from os.path import splitext, basename, join as pjoin
|
||||
|
||||
|
||||
def run_tests():
|
||||
def run_tests(exlude=None, include=[]):
|
||||
"""
|
||||
Find and run all tests in the tests/ directory.
|
||||
|
||||
|
@ -22,7 +25,18 @@ def run_tests():
|
|||
if True not in [t.endswith(ex) for ex in exclude]:
|
||||
if basename(t).startswith('test_'):
|
||||
testfiles.append('tests.%s' % splitext(basename(t))[0])
|
||||
testsToUse=[]
|
||||
if not(include==[]):
|
||||
# use only test that has any text include in them
|
||||
for match in include:
|
||||
for test in testfiles:
|
||||
if test.find(match)>-1:
|
||||
# add the test'
|
||||
# print "REMOVE "+match + " test " + test + " " + str(test.find(match))
|
||||
testsToUse.append(test)
|
||||
|
||||
|
||||
testfiles=testsToUse
|
||||
suites = []
|
||||
for file in testfiles:
|
||||
__import__(file)
|
||||
|
@ -56,7 +70,7 @@ class TestCommand(distutils.core.Command):
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
result = run_tests()
|
||||
result = run_tests(include=['323'])
|
||||
print("<tests %s ran='%s' errors='%s' fails='%s' success='%s' />" % (
|
||||
"xmlns='http//andyet.net/protocol/tests'",
|
||||
result.testsRun, len(result.errors),
|
||||
|
|
57
tests/test_stanza_xep_0323.py
Normal file
57
tests/test_stanza_xep_0323.py
Normal file
|
@ -0,0 +1,57 @@
|
|||
from sleekxmpp.test import *
|
||||
import sleekxmpp.plugins.xep_0323 as xep_0323
|
||||
|
||||
namespace='sn'
|
||||
|
||||
class TestChatStates(SleekTest):
|
||||
|
||||
|
||||
def setUp(self):
|
||||
register_stanza_plugin(Message, xep_0323.stanza.Request)
|
||||
register_stanza_plugin(Message, xep_0323.stanza.Accepted)
|
||||
register_stanza_plugin(Message, xep_0323.stanza.Failure)
|
||||
# register_stanza_plugin(Message, xep_0323.stanza.Result)
|
||||
# register_stanza_plugin(Message, xep_0323.stanza.Gone)
|
||||
# register_stanza_plugin(Message, xep_0323.stanza.Inactive)
|
||||
# register_stanza_plugin(Message, xep_0323.stanza.Paused)
|
||||
|
||||
def testRequest(self):
|
||||
"""
|
||||
test of request stanza
|
||||
"""
|
||||
iq = self.Iq()
|
||||
iq['type'] = 'get'
|
||||
iq['id'] = '1'
|
||||
iq['sensordata']['req']['seqnr'] = '1'
|
||||
iq['sensordata']['req']['momentary'] = 'true'
|
||||
|
||||
self.check(iq,"""
|
||||
"""
|
||||
)
|
||||
|
||||
def testAccepted(self):
|
||||
"""
|
||||
test of request stanza
|
||||
"""
|
||||
iq = self.Iq()
|
||||
iq['type'] = 'result'
|
||||
iq['id'] = '2'
|
||||
iq['sensordata']['accepted']['seqnr'] = '2'
|
||||
|
||||
print(str(iq))
|
||||
self.check(iq,"""
|
||||
"""
|
||||
)
|
||||
|
||||
def testReadOutMomentary_multiple(self):
|
||||
"""
|
||||
test of reading momentary value from a nde with multiple responses
|
||||
"""
|
||||
iq = self.Iq()
|
||||
print(str(iq))
|
||||
|
||||
self.check(iq,"""
|
||||
"""
|
||||
)
|
||||
|
||||
suite = unittest.TestLoader().loadTestsFromTestCase(TestChatStates)
|
Loading…
Reference in a new issue