First test stanza
This commit is contained in:
parent
0a2737dc77
commit
b7adaafb3e
@ -79,4 +79,5 @@ __all__ = [
|
|||||||
'xep_0302', # XMPP Compliance Suites 2012
|
'xep_0302', # XMPP Compliance Suites 2012
|
||||||
'xep_0308', # Last Message Correction
|
'xep_0308', # Last Message Correction
|
||||||
'xep_0313', # Message Archive Management
|
'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 os
|
||||||
import sys
|
import sys
|
||||||
|
sys.path=['/Users/jocke/Dropbox/06_dev/SleekXMPP']+sys.path
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import unittest
|
import unittest
|
||||||
import distutils.core
|
import distutils.core
|
||||||
|
|
||||||
|
|
||||||
from glob import glob
|
from glob import glob
|
||||||
from os.path import splitext, basename, join as pjoin
|
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.
|
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 True not in [t.endswith(ex) for ex in exclude]:
|
||||||
if basename(t).startswith('test_'):
|
if basename(t).startswith('test_'):
|
||||||
testfiles.append('tests.%s' % splitext(basename(t))[0])
|
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 = []
|
suites = []
|
||||||
for file in testfiles:
|
for file in testfiles:
|
||||||
__import__(file)
|
__import__(file)
|
||||||
@ -56,7 +70,7 @@ class TestCommand(distutils.core.Command):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
result = run_tests()
|
result = run_tests(include=['323'])
|
||||||
print("<tests %s ran='%s' errors='%s' fails='%s' success='%s' />" % (
|
print("<tests %s ran='%s' errors='%s' fails='%s' success='%s' />" % (
|
||||||
"xmlns='http//andyet.net/protocol/tests'",
|
"xmlns='http//andyet.net/protocol/tests'",
|
||||||
result.testsRun, len(result.errors),
|
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…
x
Reference in New Issue
Block a user