Revision: 2240
Author: jpalanca
Date: Tue Jul 10 16:56:52 2012
Log: (1) unittests now run their own platform.
(2) unittests moved to the test directory.
(3) support for session objects in WUI. Use self.session object in
controllers.
(4) login and logout functions in web user interface.
(5) support for new KB interfaces: XSB, Flora2, SPARQL, ECLiPSe and SWI.
Thanks to Markus Schatten.
http://code.google.com/p/spade2/source/detail?r=2240
Added:
/trunk/test
/trunk/test/__init__.py
/trunk/test/aidTestCase.py
/trunk/test/amsTestCase.py
/trunk/test/basicTestCase.py
/trunk/test/bdiTestCase.py
/trunk/test/coTestCase.py
/trunk/test/dadTestCase.py
/trunk/test/dfTestCase.py
/trunk/test/eventbehavTestCase.py
/trunk/test/kbTestCase.py
/trunk/test/p2pTestCase.py
/trunk/test/pubsubTestCase.py
/trunk/test/rpcTestCase.py
/trunk/test/unittests_spade.xml
/trunk/test/unittests_xmppd.xml
=======================================
--- /dev/null
+++ /trunk/test/aidTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,190 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+import xmpp
+
+import xml.dom.minidom
+
+
+class AidTestCase(unittest.TestCase):
+
+ def setUp(self):
+ pass
+ def tearDown(self):
+ pass
+
+
+ def testCreateAid(self):
+ aid = spade.AID.aid()
+
+ self.assertEqual(aid.getName(),None)
+ self.assertEqual(aid.getAddresses(),[])
+ self.assertEqual(aid.getResolvers(),[])
+ self.assertEqual(aid.getProperties(),[])
+
+ aid.setName("aidname")
+ self.assertEqual(aid.getName(),"aidname")
+ aid.addAddress("
add...@server.com")
+ self.assertEqual(len(aid.getAddresses()),1)
+ self.assertEqual(aid.getAddresses()[0],"
add...@server.com")
+ aid.addResolvers("
reso...@server.com")
+ self.assertEqual(len(aid.getResolvers()),1)
+ self.assertEqual(aid.getResolvers()[0],"
reso...@server.com")
+ aid.addProperty("prop1")
+ self.assertEqual(len(aid.getProperties()),1)
+ self.assertEqual(aid.getProperties()[0],"prop1")
+
+
+ def testEqual(self):
+ a1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ a2 = spade.AID.aid()
+ a2.setName("name1")
+ a2.addAddress("addr1")
+ a2.addAddress("addresses2")
+ a2.addResolvers("resolver1")
+ self.assertEqual(a1, a2)
+
+ a1.addAddress("address3")
+ self.assertNotEqual(a1,a2)
+ a1 =
spade.AID.aid(name="name1",addresses=["addr1"],resolvers=["resolver1"])
+ self.assertNotEqual(a1,a2)
+ a1 =
spade.AID.aid(name="name1_1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ self.assertNotEqual(a1,a2)
+
+ def testMatch(self):
+ a1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ a2 =
spade.AID.aid(name="name1",addresses=["addr1"],resolvers=["resolver1"])
+
+ self.assertEqual(a1.match(a2),True)
+
+ a2 =
spade.AID.aid(name="nam",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ self.assertEqual(a1.match(a2),True)
+
+ a2 = spade.AID.aid(addresses=["addresses2"])
+ self.assertEqual(a1.match(a2),True)
+
+ a2 =
spade.AID.aid(name="other",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ self.assertEqual(a1.match(a2),False)
+
+ a2 =
spade.AID.aid(name="name1",addresses=["addr2"],resolvers=["resolver1"])
+ self.assertEqual(a1.match(a2),False)
+
+
+ def testXML(self):
+
xml1='<agent-identifier>\n\t<name>name1</name>\n\t<addresses>\n\t\t<url>addr1</url>\n\t\t<url>addresses2</url>\n\t</addresses>\n</agent-identifier>\n'
+ aid1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ xml2=aid1.asXML()
+
+ assert isEqualXML(xml1,xml2)
+
+ def testContentObject(self):
+
+ aid1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+
+ co = spade.content.ContentObject()
+ co["name"] ="name1"
+ co["addresses"] = ["addr1","addresses2"]
+ co["resolvers"] = ["resolver1"]
+ #co["properties"] = []
+
+ assert aid1.asContentObject() == co
+
+ def testCO2XML(self):
+ co = spade.content.ContentObject()
+ co["name"]="name1"
+ co["addresses"] = ["addr1","addresses2"]
+
+ aid1 = spade.AID.aid(co=co)
+ xml1 = aid1.asXML()
+
xml2='<agent-identifier>\n\t<name>name1</name>\n\t<addresses>\n\t\t<url>addr1</url>\n\t\t<url>addresses2</url>\n\t</addresses>\n</agent-identifier>\n'
+
+ assert isEqualXML(xml1,xml2)
+
+ def testCOSanity(self):
+ aid1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ co = aid1.asContentObject()
+ aid2 = spade.AID.aid(co=co)
+ assert aid1 == aid2
+
+ co2 = aid2.asContentObject()
+ assert co == co2
+
+ def testLoadSL0(self):
+ parser = spade.SL0Parser.SL0Parser()
+ sl0="((agent-identifier\n:name name1\n:addresses
\n(sequence\naddr1\naddresses2\n)\n:resolvers
\n(sequence\nresolver1\n)\n)\n)"
+ content = parser.parse(sl0)
+ self.assertNotEqual(content,None)
+
+ aid1 =
spade.AID.aid(name="name1",addresses=["addr1","addresses2"],resolvers=["resolver1"])
+ aid2 = spade.AID.aid()
+ aid2.loadSL0(content)
+
+ assert aid1 == aid2
+
+ assert sl0 == "("+str(aid2)+")"
+ assert str(aid1) == str(aid2)
+
+ def testSL2XMLSanity(self):
+ parser = spade.SL0Parser.SL0Parser()
+ sl0="""((agent-identifier :name name1 :addresses (sequence addr1
addresses2 ) :resolvers (sequence resolver1)))"""
+ content = parser.parse(sl0)
+ self.assertNotEqual(content,None)
+
+
xml1='<agent-identifier>\n\t<name>name1</name>\n\t<addresses>\n\t\t<url>addr1</url>\n\t\t<url>addresses2</url>\n\t</addresses>\n</agent-identifier>\n'
+ aid2 = spade.AID.aid()
+ aid2.loadSL0(content)
+
+ assert isEqualXML(xml1,aid2.asXML())
+
+
+def isEqualXML(a, b):
+ da,db = xmpp.simplexml.NodeBuilder(a),xmpp.simplexml.NodeBuilder(b)
+ return isEqualElement(da.getDom(),db.getDom())
+
+def isEqualElement(a, b):
+ if a.getName()!=b.getName():
+ return False
+ if sorted(a.getAttrs().items())!=sorted(b.getAttrs().items()):
+ return False
+ if len(a.getChildren())!=len(b.getChildren()):
+ return False
+ if a.getData() and b.getData() and a.getData() != b.getData():
+ return False
+ for ac in a.getChildren():
+ l = []
+ for bc in b.getChildren():
+ if ac.getName() == bc.getName():
+ l.append(bc)
+ if len(l) == 0:
+ return False
+ r = False
+ for n in l:
+ if len(ac.kids)==len(n.kids): r = True
+ if not r:
+ return False
+
+ if ac.getData():
+ for n in l:
+ if n.getData()==ac.getData(): r = True
+ if not r:
+ return False
+
+ if not ac.getData() and (len(ac.kids)>0):
+ for n in l:
+ if isEqualElement(ac,n): r = True
+ if not r:
+ return False
+
+ return True
+
+
+if __name__ == "__main__":
+ unittest.main()
+
+
+
=======================================
--- /dev/null
+++ /trunk/test/amsTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,141 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+
+host = "127.0.0.1"
+
+class MyAgent(spade.Agent.Agent):
+
+ def _setup(self):
+ self.search = None
+
+class SearchBehav(spade.Behaviour.OneShotBehaviour):
+
+ def __init__(self, s):
+ self.s = s
+ spade.Behaviour.OneShotBehaviour.__init__(self)
+
+ def _process(self):
+
+ aad = spade.AMS.AmsAgentDescription()
+
aad.setAID(spade.AID.aid(self.s+"@"+host,["xmpp://"+self.s+"@"+host]))
+ self.myAgent.search = self.myAgent.searchAgent(aad)
+
+class ModifyBehav(spade.Behaviour.OneShotBehaviour):
+
+ def __init__(self, s):
+ self.s = s
+ spade.Behaviour.OneShotBehaviour.__init__(self)
+
+ def _process(self):
+
+ aad = spade.AMS.AmsAgentDescription()
+
#aad.setAID(spade.AID.aid(self.s+"@"+host,["xmpp://"+self.s+"@"+host]))
+ aad.ownership = "UNITTEST"
+ self.myAgent.result = self.myAgent.modifyAgent(aad)
+
+ aad = spade.AMS.AmsAgentDescription()
+
aad.setAID(spade.AID.aid(self.s+"@"+host,["xmpp://"+self.s+"@"+host]))
+ self.myAgent.search = self.myAgent.searchAgent(aad)
+
+class NotModifyBehav(spade.Behaviour.OneShotBehaviour):
+
+ def __init__(self, s):
+ self.s = s
+ spade.Behaviour.OneShotBehaviour.__init__(self)
+
+ def _process(self):
+
+ aad = spade.AMS.AmsAgentDescription()
+
aad.setAID(spade.AID.aid(self.s+"@"+host,["xmpp://"+self.s+"@"+host]))
+ aad.ownership = "NOT_ALLOWED"
+ self.myAgent.result = self.myAgent.modifyAgent(aad)
+
+ aad = spade.AMS.AmsAgentDescription()
+
aad.setAID(spade.AID.aid(self.s+"@"+host,["xmpp://"+self.s+"@"+host]))
+ self.myAgent.search = self.myAgent.searchAgent(aad)
+
+
+
+class BasicTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.a = MyAgent("a@"+host, "secret")
+ self.a.start()
+ self.b = MyAgent("b@"+host, "secret")
+ self.b.start()
+
+ def tearDown(self):
+ self.a.stop()
+ self.b.stop()
+
+ def testSearchMe(self):
+ self.a.addBehaviour(SearchBehav("a"), None)
+ counter = 0
+ while self.a.search == None and counter < 20:
+ time.sleep(1)
+ counter +=1
+
+ if len(self.a.search)>1: self.fail("Too many agents found")
+ if len(self.a.search)==0: self.fail("No agents found")
+
+ self.assertEqual(self.a.search[0].getAID().getName(), "a@"+host)
+
+ def testSearchOther(self):
+ self.a.addBehaviour(SearchBehav("b"), None)
+ counter = 0
+ while self.a.search == None and counter < 20:
+ time.sleep(1)
+ counter +=1
+
+ if len(self.a.search)>1: self.fail("Too many agents found")
+ if len(self.a.search)==0: self.fail("No agents found")
+
+ self.assertEqual(self.a.search[0].getAID().getName(), "b@"+host)
+
+ def testSearchNotPresent(self):
+ self.b.stop()
+ for agent in ["notpresent","b"]:
+ self.a.addBehaviour(SearchBehav(agent), None)
+ counter = 0
+ while self.a.search == None and counter < 20:
+ time.sleep(1)
+ counter +=1
+
+ self.assertEqual(len(self.a.search), 0)
+
+ def testModifyAllowed(self):
+ self.a.addBehaviour(ModifyBehav("a"), None)
+ counter = 0
+ while self.a.search == None and counter < 20:
+ time.sleep(1)
+ counter +=1
+
+ self.assertEqual(self.a.result, True)
+ self.assertEqual(len(self.a.search), 1)
+ #self.assertEqual(self.a.search[0]["fipa:ownership"], "UNITTEST")
+ self.assertEqual(self.a.search[0].getOwnership(), "UNITTEST")
+
+ def testModifyNotAllowed(self):
+
+ self.a.addBehaviour(NotModifyBehav("b"), None)
+ counter = 0
+ while self.a.search == None and counter < 20:
+ time.sleep(1)
+ counter +=1
+
+ self.assertEqual(self.a.result, False)
+ self.assertEqual(len(self.a.search), 1)
+ self.assertNotEqual(self.a.search[0].getOwnership(), "NOT_ALLOWED")
+
+
+if __name__ == "__main__":
+ unittest.main()
+
+
+
=======================================
--- /dev/null
+++ /trunk/test/basicTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,128 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+
+host = "127.0.0.1"
+
+class MyAgent(spade.Agent.Agent):
+
+ def _setup(self):
+ self.pi = None
+ self.msg = None
+
+
+class GetPIBehav(spade.Behaviour.OneShotBehaviour):
+
+ def _process(self):
+ self.myAgent.pi = self.myAgent.getPlatformInfo()
+
+class SendMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def _process(self):
+ msg = spade.ACLMessage.ACLMessage()
+ msg.setPerformative("inform")
+ msg.addReceiver(spade.AID.aid("b@"+host,["xmpp://b@"+host]))
+ msg.setContent("testSendMsg")
+
+ self.myAgent.send(msg)
+
+class RecvMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def _process(self):
+ self.myAgent.msg = self._receive(block=True,timeout=10)
+
+class SendAndRecvMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def _process(self):
+ msg = spade.ACLMessage.ACLMessage()
+ msg.setPerformative("inform")
+ msg.addReceiver(spade.AID.aid("b@"+host,["xmpp://b@"+host]))
+ msg.setContent("testSendAndRecvMsg")
+
+ self.myAgent.send(msg)
+ self.myAgent.msg = None
+ self.myAgent.msg = self._receive(block=True,timeout=10)
+
+class AnswerMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def _process(self):
+ msg = None
+ msg = self._receive(block=True,timeout=10)
+ if msg != None:
+ content = msg.getContent()
+ msg = msg.createReply()
+ msg.setContent(content)
+ self.myAgent.send(msg)
+
+
+
+class BasicTestCase(unittest.TestCase):
+
+ def setUp(self):
+
+ self.Aaid = spade.AID.aid("a@"+host,["xmpp://a@"+host])
+ self.Baid = spade.AID.aid("b@"+host,["xmpp://b@"+host])
+
+ self.a = MyAgent("a@"+host, "secret")
+ self.a.start()
+ self.b = MyAgent("b@"+host, "secret")
+ self.b.start()
+
+ #self.rdf
= """<rdf:ap-description><rdf:ap-services><rdf:ap-service><rdf:type>fipa.agent-management.ams</rdf:type><rdf:addresses>acc.127.0.0.1</rdf:addresses><rdf:name>xmpp://ams.127.0.0.1</rdf:name></rdf:ap-service></rdf:ap-services><rdf:name>xmpp://acc.127.0.0.1</rdf:name></rdf:ap-description>"""
+ self.rdf = """<rdf:RDF
xmlns:fipa="
http://www.fipa.org/schemas/fipa-rdf0#"
xmlns:rdf="
http://www.w3.org/1999/02/22-rdf-syntax-ns#"><rdf:ap-description><rdf:ap-services
list="true"><rdf:ap-services><rdf:ap-service><rdf:type>fipa.agent-management.ams</rdf:type><rdf:addresses
list="true"><rdf:addresses>acc.127.0.0.1</rdf:addresses></rdf:addresses><rdf:name>xmpp://ams.127.0.0.1</rdf:name></rdf:ap-service></rdf:ap-services></rdf:ap-services><rdf:name>xmpp://acc.127.0.0.1</rdf:name></rdf:ap-description></rdf:RDF>"""
+ #self.pi = spade.content.RDFXML2CO(self.rdf)
+
+ def tearDown(self):
+ self.a.stop()
+ self.b.stop()
+
+ def testGetPlatformInfo(self):
+ self.a.addBehaviour(GetPIBehav(), None)
+ while self.a.pi == None: time.sleep(2)
+ #print self.a.pi
+ from coTestCase import isEqualElement,isEqualXML
+ #self.assertEqual( str(self.a.pi), self.rdf) # 'Incorrect
Platform Info'
+ assert isEqualXML(str(self.a.pi.asRDFXML()), self.rdf)
+
+ def testSendMsg(self):
+ template = spade.Behaviour.ACLTemplate()
+ template.setSender(self.Aaid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.b.addBehaviour(RecvMsgBehav(),t)
+ self.a.addBehaviour(SendMsgBehav(),None)
+ counter = 0
+ while self.b.msg == None and counter < 10:
+ time.sleep(1)
+ counter += 1
+ self.assertNotEqual(self.b.msg,None)
+ self.assertEqual(self.b.msg.getContent(),"testSendMsg")
+ self.assertEqual(self.b.msg.getSender(), self.Aaid)
+ self.assertEqual(len(self.b.msg.getReceivers()),1)
+ self.assertEqual(self.b.msg.getReceivers()[0], self.Baid)
+
+ def testSendAndRecvMsg(self):
+ template = spade.Behaviour.ACLTemplate()
+ template.setSender(self.Aaid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.b.addBehaviour(AnswerMsgBehav(),t)
+ template.setSender(self.Baid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.a.addBehaviour(SendAndRecvMsgBehav(),t)
+ counter = 0
+ while self.a.msg == None and counter < 20:
+ time.sleep(1)
+ counter += 1
+ self.assertNotEqual(self.a.msg,None)
+ self.assertEqual(self.a.msg.getContent(),"testSendAndRecvMsg")
+
+
+if __name__ == "__main__":
+ unittest.main()
+
+
+
=======================================
--- /dev/null
+++ /trunk/test/bdiTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,104 @@
+import os
+import sys
+import unittest
+sys.path.append('../..')
+
+import spade
+from spade.bdi import *
+
+host = "127.0.0.1"
+
+class Serv1(Service):
+ def run(self):
+ self.addBelieve(expr("Value(1)"))
+class Serv2(Service):
+ def run(self):
+ self.addBelieve(expr("Value(2)"))
+
+class MServ(Service):
+ def __init__(self, P=None, Q=None, inputs={},outputs={}, belief=""):
+ Service.__init__(self,P, Q, inputs,outputs)
+ self.belief = str(belief)
+ def run(self):
+ self.addBelieve(expr("Value("+self.belief+")"))
+
+class BDITestCase(unittest.TestCase):
+
+ def setUp(self):
+
+ self.a = BDIAgent("bdi@"+host,"secret")
+
+ def tearDown(self):
+ #self.a.stop()
+ pass
+
+ def testAddBelief(self):
+ self.a.addBelieve(expr("Value(0)"))
+
+ self.assertEqual(self.a.askBelieve(expr("Value(0)")), {})
+
+ def testAddGoal(self):
+ g = Goal(expr("Value(2)"))
+ self.a.addGoal(g)
+
+ self.assertEqual(len(self.a.goals),1)
+ self.assertEqual(self.a.goals[0].expression,expr("Value(2)"),{})
+
+ def testAddService(self):
+ p = Plan(P=expr("Value(0)"),Q=expr("Value(2)"))
+ s1 = Serv1(P=expr("Value(0)"),Q=expr("Value(1)"))
+ s2 = Serv2(P=expr("Value(1)"),Q=expr("Value(2)"))
+
+ p.appendService(s1)
+ self.assertEqual(len(p.services),1)
+
+ p.appendService(s2)
+ self.assertEqual(len(p.services),2)
+
+ def testAddPlan(self):
+ p = Plan(P=expr("Value(0)"),Q=expr("Value(2)"))
+ self.a.addPlan(p)
+
+ self.assertEqual(len(self.a.plans),1)
+ self.assertEqual(self.a.plans[0].P,expr("Value(0)"))
+ self.assertEqual(self.a.plans[0].Q,expr("Value(2)"))
+
+ def testSimpleGoalCompleted(self):
+ self.a.addBelieve(expr("Value(0)"))
+ self.a.addGoal(Goal(expr("Value(1)")))
+ p = Plan(P=expr("Value(0)"),Q=expr("Value(1)"))
+ s1 = Serv1(P=expr("Value(0)"),Q=expr("Value(1)"))
+ p.appendService(s1)
+ self.a.addPlan(p)
+
+ self.assertNotEqual(self.a.askBelieve(expr("Value(1)")),{})
+ self.assertEqual(self.a.askBelieve(expr("Value(0)")), {})
+
+ self.a.start()
+
+ import time
+ time.sleep(2)
+
+ self.assertEqual(self.a.askBelieve(expr("Value(1)")), {})
+
+ def testMultiGoalCompleted(self):
+ self.a.addBelieve(expr("Value(0)"))
+ self.a.addGoal(Goal(expr("Value(10)")))
+ p = Plan(P=expr("Value(0)"),Q=expr("Value(10)"))
+ for i in range(0,10):
+ s =
MServ(P=expr("Value("+str(i)+")"),Q=expr("Value("+str(i+1)+")"),belief=i+1)
+ p.appendService(s)
+ self.a.addPlan(p)
+
+ self.assertNotEqual(self.a.askBelieve(expr("Value(10)")),{})
+ self.assertEqual(self.a.askBelieve(expr("Value(0)")), {})
+
+ self.a.start()
+
+ import time
+ time.sleep(4)
+
+ self.assertEqual(self.a.askBelieve(expr("Value(10)")), {})
+
+if __name__ == "__main__":
+ unittest.main()
=======================================
--- /dev/null
+++ /trunk/test/coTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,108 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+import xmpp
+
+
+
+class ContentObjectTestCase(unittest.TestCase):
+
+ def setUp(self):
+ #self.rdf = """<rdf:RDF
xmlns:rdf="
http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="
http://xmlns.com/foaf/0.1/"
xmlns:dc="
http://purl.org/dc/elements/1.1/"><rdf:Description
rdf:about="
http://en.wikipedia.org/wiki/Tony_Benn"><dc:title>Tony
Benn</dc:title><dc:publisher>Wikipedia</dc:publisher><foaf:primaryTopic><foaf:Person><foaf:name>Tony
Benn</foaf:name></foaf:Person></foaf:primaryTopic></rdf:Description></rdf:RDF>"""
+ self.rdf = """<rdf:RDF
xmlns:rdf="
http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:foaf="
http://xmlns.com/foaf/0.1/"
xmlns:dc="
http://purl.org/dc/elements/1.1/"><rdf:Description><dc:title>Tony
Benn</dc:title><dc:publisher>Wikipedia</dc:publisher><foaf:primaryTopic><foaf:Person><foaf:name
list="true"><foaf:name>Tony
Benn</foaf:name><foaf:name>Pepe</foaf:name></foaf:name></foaf:Person></foaf:primaryTopic></rdf:Description></rdf:RDF>"""
+ self.nb = xmpp.simplexml.NodeBuilder(self.rdf)
+
+
self.co = spade.content.ContentObject()
+ self.co.addNamespace("
http://xmlns.com/foaf/0.1/","foaf:")
+ self.co.addNamespace("
http://purl.org/dc/elements/1.1/", "dc")
+
self.co["rdf:Description"] = spade.content.ContentObject()
+
self.co["rdf:Description"]["dc:title"] = "Tony Benn"
+
self.co["rdf:Description"]["dc:publisher"] = "Wikipedia"
+
self.co["rdf:Description"]["foaf:primaryTopic"] =
spade.content.ContentObject()
+
self.co["rdf:Description"]["foaf:primaryTopic"]["foaf:Person"] =
spade.content.ContentObject()
+
self.co["rdf:Description"].primaryTopic.Person["foaf:name"] =
["Tony Benn", "Pepe"]
+
+ def tearDown(self):
+ pass
+
+ def testRDFXML2CO(self):
+ sco = spade.content.RDFXML2CO(self.rdf)
+ self.assertEqual(sco,
self.co)
+
+ def testCO2RDFXML(self):
+ rdf = self.co.asRDFXML()
+ assert isEqualXML(rdf, self.rdf)
+
+
+ def testGetData(self):
+ co = spade.content.ContentObject()
+ co["test1"] = spade.content.ContentObject()
+ co["test1"]["test2"]= "test3"
+
+ assert co.test1.test2 == "test3"
+
+ def testCOSanity(self):
+ rdf = self.co.asRDFXML()
+ co = spade.content.RDFXML2CO(rdf)
+
+ assert co ==
self.co
+
+ def testRDFSanity(self):
+ co = spade.content.RDFXML2CO(self.rdf)
+ rdf = co.asRDFXML()
+
+ assert isEqualXML(rdf, self.rdf)
+
+
+def isEqualXML(a, b):
+ da,db = xmpp.simplexml.NodeBuilder(a),xmpp.simplexml.NodeBuilder(b)
+ return isEqualElement(da.getDom(),db.getDom())
+
+def isEqualElement(a, b):
+ if a.getName()!=b.getName():
+ return False
+ if sorted(a.getAttrs().items())!=sorted(b.getAttrs().items()):
+ return False
+ if len(a.getChildren())!=len(b.getChildren()):
+ return False
+ if a.getData() and b.getData() and a.getData() != b.getData():
+ return False
+ for ac in a.getChildren():
+ l = []
+ for bc in b.getChildren():
+ if ac.getName() == bc.getName():
+ l.append(bc)
+ if len(l) == 0:
+ return False
+ r = False
+ for n in l:
+ if len(ac.kids)==len(n.kids): r = True
+ if not r:
+ return False
+
+ if ac.getData():
+ for n in l:
+ if n.getData()==ac.getData(): r = True
+ if not r:
+ return False
+
+ if not ac.getData() and (len(ac.kids)>0):
+ for n in l:
+ if isEqualElement(ac,n): r = True
+ if not r:
+ return False
+
+ return True
+
+
+
+if __name__ == "__main__":
+ unittest.main()
+
+
+
=======================================
--- /dev/null
+++ /trunk/test/dadTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,406 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+import xmpp
+
+import xml.dom.minidom
+
+
+def CreateSD(s=""):
+ sd = spade.DF.ServiceDescription()
+ sd.setName("servicename1"+s)
+ sd.setType("type1"+s)
+ sd.addProtocol("sdprotocol1"+s)
+ sd.addOntologies("sdontology1"+s)
+ sd.addLanguage("sdlanguage1"+s)
+ sd.setOwnership("agent1"+s)
+ sd.addProperty("P","valueP"+s)
+ sd.addProperty("Q","valueQ"+s)
+
+ return sd
+
+def CreateDAD(s=""):
+ dad = spade.DF.DfAgentDescription()
+ aid = spade.AID.aid()
+ aid.setName("aidname"+s)
+ dad.setAID(aid)
+
+ dad.addProtocol("protocol1"+s)
+ dad.addOntologies("ontology1"+s)
+ dad.addLanguage("language1"+s)
+ dad.setLeaseTime(1000)
+ dad.addScope("scope1"+s)
+
+ return dad
+
+def CreateCO(s=""):
+ co = spade.content.ContentObject()
+ co["name"] = spade.AID.aid(name="aidname"+s).asContentObject()
+ co["lease-time"] = 1000
+ co["protocols"] = ["protocol1"+s,"sdprotocol1"+s]
+ co["ontologies"] = ["ontology1"+s,"sdontology1"+s]
+ co["languages"] = ["language1"+s, "sdlanguage1"+s]
+ co["scope"] = "scope1"+s
+
+ sdco = spade.content.ContentObject()
+ sdco["name"] = "servicename1"+s
+ sdco["type"] = "type1"+s
+ sdco["protocols"] = ["sdprotocol1"+s]
+ sdco["languages"] = ["sdlanguage1"+s]
+ sdco["ontologies"] = ["sdontology1"+s]
+ sdco["ownership"] = "agent1"+s
+ sdco["properties"] = spade.content.ContentObject()
+ sdco["properties"]["P"] = "valueP"+s
+ sdco["properties"]["Q"] = "valueQ"+s
+
+ co["services"] = [sdco]
+
+ return co
+
+class DadTestCase(unittest.TestCase):
+
+ def setUp(self):
+ pass
+ def tearDown(self):
+ pass
+
+
+ def testCreateDad(self):
+ dad = spade.DF.DfAgentDescription()
+
+ self.assertEqual(dad.getName(),spade.AID.aid())
+ self.assertEqual(dad.getServices(),[])
+ self.assertEqual(dad.getProtocols(),[])
+ self.assertEqual(dad.getOntologies(),[])
+ self.assertEqual(dad.getLanguages(),[])
+ self.assertEqual(dad.getLeaseTime(),None)
+ self.assertEqual(dad.getScope(),[])
+
+ aid = spade.AID.aid()
+ aid.setName("aidname")
+ dad.setAID(aid)
+ self.assertEqual(dad.getName(),"aidname")
+
+ dad.addProtocol("protocol1")
+ self.assertEqual(dad.getProtocols(),["protocol1"])
+ dad.addOntologies("ontology1")
+ self.assertEqual(dad.getOntologies(),["ontology1"])
+ dad.addLanguage("language1")
+ self.assertEqual(dad.getLanguages(), ["language1"])
+ dad.setLeaseTime(1000)
+ self.assertEqual(dad.getLeaseTime(),1000)
+ dad.addScope("scope1")
+ self.assertEqual(dad.getScope(),"scope1")
+
+
+ def testAddService(self):
+ dad = CreateDAD()
+ sd1 = CreateSD("a")
+ sd2 = CreateSD("b")
+
+ dad.addService(sd1)
+ self.assertEqual(len(dad.getServices()),1)
+ self.assertEqual(dad.getServices()[0].getName(),"servicename1a")
+ self.assertEqual(dad.getProtocols() , ["protocol1","sdprotocol1a"])
+ self.assertEqual(dad.getLanguages() , ["language1","sdlanguage1a"])
+ self.assertEqual(dad.getOntologies() ,
["ontology1","sdontology1a"])
+
+ dad.addService(sd2)
+ self.assertEqual(len(dad.getServices()),2)
+ self.failIf(dad.getServices()[0].getName() not in
["servicename1a","servicename1b"])
+ self.failIf(dad.getServices()[1].getName() not in
["servicename1a","servicename1b"])
+ self.assertEqual(dad.getProtocols() ,
["protocol1","sdprotocol1a","sdprotocol1b"])
+ self.assertEqual(dad.getLanguages() ,
["language1","sdlanguage1a","sdlanguage1b"])
+ self.assertEqual(dad.getOntologies() ,
["ontology1","sdontology1a","sdontology1b"])
+
+ def testDelService(self):
+ dad = CreateDAD()
+ sd1 = CreateSD("a")
+ sd2 = CreateSD("b")
+
+ dad.addService(sd1)
+ dad.addService(sd2)
+ self.assertEqual(len(dad.getServices()),2)
+
+ delsd1 = CreateSD("a")
+ r = dad.delService(delsd1)
+ self.assertEqual(r,True)
+ self.assertEqual(len(dad.getServices()),1)
+ self.failIf(dad.getServices()[0].getName() != "servicename1b")
+ self.failIf("sdprotocol1a" in dad.getProtocols())
+ self.failIf("sdlanguage1a" in dad.getLanguages())
+ self.failIf("sdontology1a" in dad.getOntologies())
+
+ delsd2 = CreateSD("b")
+ dad.delService(delsd2)
+ self.assertEqual(len(dad.getServices()),0)
+ self.failIf("sdprotocol1b" in dad.getProtocols())
+ self.failIf("sdlanguage1b" in dad.getLanguages())
+ self.failIf("sdontology1b" in dad.getOntologies())
+
+ def testUpdateService(self):
+ dad = CreateDAD()
+ sd1 = CreateSD("a")
+ dad.addService(sd1)
+
+ sd2 = CreateSD("a")
+ sd2.setType("updated_type")
+
+ r = dad.updateService(sd2)
+ self.assertEqual(r,True)
+ self.assertEqual(len(dad.getServices()),1)
+ self.assertEqual(dad.getServices()[0].getType(),"updated_type")
+ self.assertEqual(dad.getServices()[0].getName(),"servicename1a")
+
+ def testCreateSD(self):
+ sd = spade.DF.ServiceDescription()
+ self.assertEqual(sd.getName(),None)
+ self.assertEqual(sd.getType(),None)
+ self.assertEqual(sd.getProtocols(),[])
+ self.assertEqual(sd.getOntologies(),[])
+ self.assertEqual(sd.getLanguages(),[])
+ self.assertEqual(sd.getOwnership(),None)
+ self.assertEqual(sd.getProperties(),{})
+
+ sd.setName("servicename1")
+ self.assertEqual(sd.getName(),"servicename1")
+ sd.setType("type1")
+ self.assertEqual(sd.getType(),"type1")
+ sd.addProtocol("protocol1")
+ self.assertEqual(sd.getProtocols(),["protocol1"])
+ sd.addOntologies("ontology1")
+ self.assertEqual(sd.getOntologies(),["ontology1"])
+ sd.addLanguage("language1")
+ self.assertEqual(sd.getLanguages(), ["language1"])
+ sd.setOwnership("agent1")
+ self.assertEqual(sd.getOwnership(),"agent1")
+ sd.addProperty("key1","value1")
+ self.assertEqual(sd.getProperty("key1"),"value1")
+ sd.addProperty("key2","value2")
+ self.assertEqual(sd.getProperty("key2"),"value2")
+
self.assertEqual(sd.getProperties(),{'key1':'value1','key2':'value2'})
+
+ def testMatchSD(self):
+
+ sd1 = CreateSD("a")
+ sd2 = spade.DF.ServiceDescription()
+ sd2.setName("servicename1a")
+
+ self.assertEqual(sd1.match(sd2),True)
+
+ sd2.setType("type1a")
+ self.assertEqual(sd1.match(sd2),True)
+
+ sd1.addOntologies("sdontology2a")
+ sd2.addOntologies("sdontology1a")
+ self.assertEqual(sd1.match(sd2),True)
+
+ sd2.setType("modified_type")
+ self.assertEqual(sd1.match(sd2),False)
+
+ sd2.addOntologies("sdontology3")
+ self.assertEqual(sd1.match(sd2),False)
+
+ def testMatchDAD(self):
+
+ dad1 = CreateDAD("a")
+ dad2 = spade.DF.DfAgentDescription()
+ aid = spade.AID.aid()
+ aid.setName("aidnamea")
+ dad2.setAID(aid)
+ self.assertEqual(dad1.match(dad2),True)
+
+ dad2.addLanguage("language1a")
+ self.assertEqual(dad1.match(dad2),True)
+
+ dad1.addLanguage("language2a")
+ self.assertEqual(dad1.match(dad2),True)
+
+ dad2.addLanguage("language3a")
+ self.assertEqual(dad1.match(dad2),False)
+
+ dad1 = CreateDAD("a")
+ dad2 = spade.DF.DfAgentDescription()
+ aid = spade.AID.aid()
+ aid.setName("aidnamea")
+ dad2.setAID(aid)
+ sd1 = CreateSD("a")
+ dad1.addService(sd1)
+ dad2.addService(sd1)
+ self.assertEqual(dad1.match(dad2),True)
+
+ sd2 = CreateSD("b")
+ dad2.addService(sd2)
+ self.assertEqual(dad1.match(dad2),False)
+ dad1.addService(sd2)
+ self.assertEqual(dad1.match(dad2),True)
+
+ def testXML(self):
+
xml1='<name><name>aidname1</name></name><lease-time>1000</lease-time><languages
list="true"><languages>language11</languages><languages>sdlanguage11</languages></languages><services
list="true"><services><name>servicename11</name><properties><Q>valueQ1</Q><P>valueP1</P></properties><languages
list="true"><languages>sdlanguage11</languages></languages><ownership>agent11</ownership><type>type11</type><ontologies
list="true"><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>sdprotocol11</protocols></protocols></services></services><scope>scope11</scope><ontologies
list="true"><ontologies>ontology11</ontologies><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>protocol11</protocols><protocols>sdprotocol11</protocols></protocols>'
+ dad = CreateDAD("1")
+ sd = CreateSD("1")
+ dad.addService(sd)
+ xml2=dad.asRDFXML()
+
+ assert xml1 == xml2
+
+ def testContentObject(self):
+
+ dad = CreateDAD("1")
+ sd = CreateSD("1")
+ dad.addService(sd)
+
+ co = CreateCO("1")
+
+ assert str(dad.asContentObject()) == str(co)
+
+ def testCO2XML(self):
+ co = CreateCO("1")
+ dad = spade.DF.DfAgentDescription(co=co)
+
+ xml1 = dad.asRDFXML()
+
xml2='<name><name>aidname1</name></name><lease-time>1000</lease-time><languages
list="true"><languages>language11</languages><languages>sdlanguage11</languages></languages><services
list="true"><services><name>servicename11</name><properties><Q>valueQ1</Q><P>valueP1</P></properties><languages
list="true"><languages>sdlanguage11</languages></languages><ownership>agent11</ownership><type>type11</type><ontologies
list="true"><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>sdprotocol11</protocols></protocols></services></services><scope>scope11</scope><ontologies
list="true"><ontologies>ontology11</ontologies><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>protocol11</protocols><protocols>sdprotocol11</protocols></protocols>'
+
+ assert xml1==xml2
+
+ def testCOSanity(self):
+ dad1 = CreateDAD("1")
+ sd1 = CreateSD("1")
+ dad1.addService(sd1)
+ co1 = dad1.asContentObject()
+
+ co2 = CreateCO("1")
+ dad2 = spade.DF.DfAgentDescription(co=co2)
+ assert dad1.match(dad2)
+
+ co3 = dad2.asContentObject()
+
+ assert str(co2) == str(co3)
+
+ def DISABLEDtestLoadSL0(self):
+ parser = spade.SL0Parser.SL0Parser()
+ sl0="""(df-agent-description
+ :name (agent-identifier
+ :name aidname1
+ )
+
+ :protocols
+ (set
+ protocol11
+ sdprotocol11
+ )
+ :ontologies
+ (set
+ ontology11
+ sdontology11
+ )
+ :languages
+ (set
+ language11
+ sdlanguage11
+ )
+ :services
+ (set
+ (service-description
+ :name servicename11
+ :type type11
+ :protocols
+ (set
+ sdprotocol11 )
+ :ontologies
+ (set
+ sdontology11 )
+ :languages
+ (set
+ sdlanguage11 )
+ :ownership agent11
+ :properties
+ (set
+ (property :name Q :value valueQ1)
+ (property :name P :value valueP1)
+ )
+ )
+
+ )
+ :lease-time 1000
+ :scope scope11
+ )
+ """
+ content = parser.parse(sl0)
+ self.assertNotEqual(content,None)
+
+ dad1 = CreateDAD("1")
+ sd = CreateSD("1")
+ dad1.addService(sd)
+ dad2 = spade.DF.DfAgentDescription()
+ dad2.loadSL0(content)
+
+ assert dad1.match(dad2)
+
+ assert sl0 == "("+dad2.asSL0()+")"
+ assert dad1.asSL0() == dad2.asSL0()
+
+ def DISABLEDtestSL2XMLSanity(self):
+ parser = spade.SL0Parser.SL0Parser()
+ sl0='((df-agent-description \n:name (agent-identifier\n:name
aidname1\n)\n\n:services \n(set\n(service-description\n:name
servicename11\n:type type11\n:protocols \n(set\nsdprotocol11 )\n:ontologies
\n(set\nsdontology11 )\n:languages \n(set\nsdlanguage11
):ownershipagent11\n:properties \n (set\n (property :name Q :value
valueQ1)\n (property :name P :value valueP1)\n)\n)\n\n)\n:protocols
\n(set\nprotocol11\nsdprotocol11\n)\n:ontologies
\n(set\nontology11\nsdontology11\n)\n:languages
\n(set\nlanguage11\nsdlanguage11\n)\n:lease-time 1000\n:scope scope11\n)\n)'
+ content = parser.parse(sl0)
+ self.assertNotEqual(content,None)
+
+ xml='<name><name>aidname1</name><addresses
list="true"></addresses></name><lease-time>1000</lease-time><languages
list="true"><languages>language11</languages><languages>sdlanguage11</languages></languages><services
list="true"><services><name>servicename11</name><properties><Q>valueQ1</Q><P>valueP1</P></properties><languages
list="true"><languages>sdlanguage11</languages></languages><ownership>agent11</ownership><type>type11</type><ontologies
list="true"><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>sdprotocol11</protocols></protocols></services></services><scope>scope11</scope><ontologies
list="true"><ontologies>ontology11</ontologies><ontologies>sdontology11</ontologies></ontologies><protocols
list="true"><protocols>protocol11</protocols><protocols>sdprotocol11</protocols></protocols>'
+ dad = spade.DF.DfAgentDescription()
+ dad.loadSL0(content)
+
+ assert isEqualXML(xml,dad.asXML())
+
+
+def isEqualXML(a, b):
+ da,db = xmpp.simplexml.NodeBuilder(a),xmpp.simplexml.NodeBuilder(b)
+ return isEqualElement(da.getDom(),db.getDom())
+
+def isEqualElement(a, b):
+ if a.getName()!=b.getName():
+ return False
+ if sorted(a.getAttrs().items())!=sorted(b.getAttrs().items()):
+ return False
+ if len(a.getChildren())!=len(b.getChildren()):
+ return False
+ if a.getData() and b.getData() and a.getData() != b.getData():
+ return False
+ for ac in a.getChildren():
+ l = []
+ for bc in b.getChildren():
+ if ac.getName() == bc.getName():
+ l.append(bc)
+ if len(l) == 0:
+ return False
+ r = False
+ for n in l:
+ if len(ac.kids)==len(n.kids): r = True
+ if not r:
+ return False
+
+ if ac.getData():
+ for n in l:
+ if n.getData()==ac.getData(): r = True
+ if not r:
+ return False
+
+ if not ac.getData() and (len(ac.kids)>0):
+ for n in l:
+ if isEqualElement(ac,n): r = True
+ if not r:
+ return False
+
+ return True
+
+
+if __name__ == "__main__":
+ unittest.main()
+
+
+
=======================================
--- /dev/null
+++ /trunk/test/dfTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,859 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+
+host = "127.0.0.1"
+
+class MyAgent(spade.Agent.Agent):
+
+ def _setup(self):
+ self.result = None
+ #self.setDebugToScreen()
+
+#with DAD
+def Register_DAD(agent, param):
+
+
+ sd = spade.DF.ServiceDescription()
+ sd.setName("unittest_name_1_"+param)
+ sd.setType("unittest_type_1_"+param)
+
+ dad = spade.DF.DfAgentDescription()
+ dad.addService(sd)
+ sd = spade.DF.ServiceDescription()
+ sd.setName("unittest_name_2_"+param)
+ sd.setType("unittest_type_2"+param)
+ dad.addService(sd)
+ dad.setAID(agent.getAID())
+ agent.result = agent.registerService(dad)
+
+def DeRegister_DAD(agent, param):
+
+
+ dad = spade.DF.DfAgentDescription()
+ dad.setAID(agent.getAID())
+ agent.result = agent.deregisterService(dad)
+
+def Search_DAD(agent, param):
+
+
+ sd = spade.DF.ServiceDescription()
+ sd.setName("unittest_name_1_"+param)
+ #sd.setType("unittest_type_1")
+
+ dad = spade.DF.DfAgentDescription()
+ dad.addService(sd)
+
+ #dad.setAID(agent.getAID())
+ agent.result = agent.searchService(dad)
+
+def Search_2_DAD(agent, param):
+
+ dad = spade.DF.DfAgentDescription()
+
+ sd = spade.DF.ServiceDescription()
+ sd.setName("unittest_name_1_"+param)
+ #sd.setType("unittest_type_1")
+ dad.addService(sd)
+
+ sd = spade.DF.ServiceDescription()
+ sd.setName("unittest_name_2_"+param)
+ #sd.setType("unittest_type_1")
+ dad.addService(sd)
+
+ dad.setAID(agent.getAID())
+ agent.result = agent.searchService(dad)
+
+def EmptySearch_DAD(agent):
+ dad = spade.DF.DfAgentDescription()
+ agent.result = agent.searchService(dad)
+
+def Modify_DAD(agent, param):
+
+ sd = spade.DF.ServiceDescription()
+ sd.setName("unittest_name_1_"+param)
+ sd.setType("unittest_type_1_modified_"+param)
+
+ dad = spade.DF.DfAgentDescription()
+ dad.addService(sd)
+
+ dad.setAID(agent.getAID())
+ agent.result = agent.modifyService(dad)
+
+
+#with Service()
+def Register(agent, param):
+
+
+ s = spade.DF.Service()
+ s.setName("unittest_name_1_"+param)
+ s.setOwner(agent.getAID())
+ s.addP("service_precondition")
+ s.addQ("service_postcondition")
+ s.setInputs(['login','password'])
+ s.setOutputs(['account_id'])
+ s.setDescription("Login Service")
+ s.setOntology("account_managing")
+ agent.result = agent.registerService(s)
+
+def DeRegister(agent, param):
+
+ s = spade.DF.Service()
+ s.setOwner(agent.getAID())
+ agent.result = agent.deregisterService(s)
+
+def Search(agent, param):
+
+ s = spade.DF.Service()
+ s.setName("unittest_name_1_"+param)
+
#s.setOwner(spade.AID.aid(param+"@"+host,["xmpp://"+param+"@"+host]))
+ #s.setInputs(['login','password'])
+
+ agent.result = agent.searchService(s)
+
+def EmptySearch(agent):
+ s = spade.DF.Service()
+ agent.result = agent.searchService(s)
+
+def Modify(agent, param):
+
+ s = spade.DF.Service()
+ s.setName("unittest_name_1_"+param)
+ s.setOwner(agent.getAID())
+ s.setOntology("new_ontology")
+
+ agent.result = agent.modifyService(s)
+
+
+
+
+
+class DFTestCase(unittest.TestCase):
+
+ def setUp(self):
+
+ self.a = MyAgent("a@"+host, "secret")
+ #self.a._debug=True
+ self.a.start()
+ self.b = MyAgent("b@"+host, "secret")
+ #self.b._debug=True
+ self.b.start()
+
+ def tearDown(self):
+ DeRegister_DAD(self.a,"a")
+ DeRegister_DAD(self.a,"b")
+ DeRegister_DAD(self.b,"a")
+ DeRegister_DAD(self.b,"b")
+ DeRegister(self.a,"a")
+ DeRegister(self.a,"b")
+ DeRegister(self.b,"a")
+ DeRegister(self.b,"b")
+ self.a.stop()
+ self.b.stop()
+
+
+
+ #with DAD
+ def testRegisterService_DAD(self):
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ #register service
+ Register_DAD(self.a, "a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check service is registered
+ Search_2_DAD(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+
+ self.assertEqual(self.a.result[0].getAID(), self.a.getAID())
+ self.assertEqual(len(self.a.result[0].getServices()), 2)
+
+ if self.a.result[0].getServices()[0].getName() not in
['unittest_name_1_a','unittest_name_2_a']:
+ self.fail()
+ if self.a.result[0].getServices()[1].getName() not in
['unittest_name_1_a','unittest_name_2_a']:
+ self.fail()
+
+ self.a.result = None
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ #check service is deregistered
+ self.a.result = False
+ Search_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, [])
+
+ def testSameRegister_DAD(self):
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+ DeRegister_DAD(self.b,"a")
+
+ #register service
+ Register_DAD(self.a,"a")
+ self.assertEqual(self.a.result, True)
+ self.a.result = None
+
+ #register service
+ Register_DAD(self.b,"a")
+ self.assertEqual(self.b.result, True)
+ self.b.result = None
+
+ Search_DAD(self.a,"a")
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 2)
+ self.assertEqual(len(self.a.result[0].getServices()), 1)
+ self.a.result = None
+
+ Search_DAD(self.a,"b")
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 0)
+ self.a.result = None
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+ DeRegister_DAD(self.b,"a")
+
+ def testDoubleRegister_DAD(self):
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+ DeRegister_DAD(self.a,"b")
+
+ #register service
+ Register_DAD(self.a,"a")
+ self.assertEqual(self.a.result, True)
+ self.a.result = None
+
+ #register service
+ Register_DAD(self.a,"b")
+ self.assertEqual(self.a.result, True)
+ self.a.result = None
+
+ Search_DAD(self.a,"a")
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+ self.a.result = None
+
+ Search_DAD(self.a,"b")
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+ self.a.result = None
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+ DeRegister_DAD(self.a,"b")
+
+ def testSearchNotPresent_DAD(self):
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+ DeRegister_DAD(self.a,"b")
+
+ #check service is not registered
+ Search_DAD(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 0)
+
+ self.a.result = None
+
+ #register service
+ Register_DAD(self.a,"b")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check service is not registered
+ Search_DAD(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 0)
+
+ self.a.result = None
+
+ #deregister service
+ DeRegister_DAD(self.a,"b")
+
+ self.assertEqual(self.a.result, True)
+
+ #check service is deregistered
+ self.a.result = False
+ Search_DAD(self.a,"b")
+ self.assertEqual(self.a.result, [])
+
+
+
+ def testModifyService_DAD(self):
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ #register service
+ Register_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #modify service
+ Modify_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check service is modified
+ Search_DAD(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+
+ self.assertEqual(self.a.result[0].getAID(), self.a.getAID())
+
+ self.assertEqual(len(self.a.result[0].getServices()), 1)
+
+
self.assertEqual(self.a.result[0].getServices()[0].getType(),"unittest_type_1_modified_a")
+
+ self.a.result = None
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+
+ def testModifyNotAllowed_DAD(self):
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ #register service
+ Register_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #modify service
+ Modify_DAD(self.b,"a")
+
+ self.assertEqual(self.b.result, False)
+
+ self.b.result = None
+
+ #check service is NOT modified
+ Search_DAD(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+
+ self.assertEqual(self.a.result[0].getAID(), self.a.getAID())
+
+ self.assertEqual(len(self.a.result[0].getServices()), 1)
+
+ if self.a.result[0].getServices()[0].getName() not in
['unittest_name_1_a']: #,'unittest_name_2_a']:
+ self.fail()
+
+ self.a.result = None
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ def testModifyNotRegistered_DAD(self):
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ #check service is registered
+ Search_DAD(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 0)
+
+ self.a.result = None
+
+ #modify service
+ Modify_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, False)
+
+ self.a.result = None
+
+ #check service is deregistered
+ self.a.result = False
+ Search_DAD(self.a,"a")
+ self.assertEqual(self.a.result, [])
+ self.assertEqual(len(self.a.result), 0)
+
+
+ def testFullSearch_DAD(self):
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ #get zero services
+ EmptySearch_DAD(self.a)
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 0)
+
+ self.a.result = None
+
+ #register service
+ Register_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check number of DADs is 1
+ EmptySearch_DAD(self.a)
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+ #check number of services is 2
+ self.assertEqual(len(self.a.result[0].getServices()), 2)
+
+ self.a.result = None
+
+ #register another service
+ Register_DAD(self.b,"b")
+
+ self.assertEqual(self.b.result, True)
+
+ self.b.result = None
+
+ #check number of services is 2
+ EmptySearch_DAD(self.a)
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 2)
+ #check number of services is 4
+ self.assertEqual(len(self.a.result[0].getServices()), 2)
+ self.assertEqual(len(self.a.result[1].getServices()), 2)
+
+ self.a.result = None
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+ DeRegister_DAD(self.b,"b")
+
+
+ def testAlreadyRegistered_DAD(self):
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ #register service
+ Register_DAD(self.a,"a")
+
+ #self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #register service ALREADY registered
+ Register_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, False)
+
+ self.a.result = None
+
+
+ #deregister service
+ DeRegister_DAD(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ #check service is deregistered
+ self.a.result = False
+ Search_DAD(self.a,"a")
+ self.assertEqual(self.a.result, [])
+
+
+ #with Service()
+ def testRegisterService(self):
+
+ #deregister service
+ DeRegister(self.a,"a")
+
+ #register service
+ Register(self.a, "a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check service is registered
+ Search(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+
+ self.assertEqual(self.a.result[0].getOwner(), self.a.getAID())
+
+ if self.a.result[0].getName() not in ['unittest_name_1_a']:
+ self.fail()
+
+ self.a.result = None
+
+ #deregister service
+ DeRegister(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ #check service is deregistered
+ self.a.result = False
+ Search(self.a,"a")
+
+ self.assertEqual(self.a.result, [])
+
+
+ def testSameRegister(self):
+ #deregister service
+ DeRegister(self.a,"a")
+ DeRegister(self.b,"a")
+
+ #register service
+ Register(self.a,"a")
+ self.assertEqual(self.a.result, True)
+ self.a.result = None
+
+ #register service
+ Register(self.b,"a")
+ self.assertEqual(self.b.result, True)
+ self.b.result = None
+
+ Search(self.a,"a")
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 2)
+ self.a.result = None
+
+ Search(self.a,"b")
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 0)
+ self.a.result = None
+
+ #deregister service
+ DeRegister(self.a,"a")
+ DeRegister(self.b,"a")
+
+ def testDoubleRegister(self):
+ #deregister service
+ DeRegister(self.a,"a")
+ DeRegister(self.a,"b")
+
+ #register service
+ Register(self.a,"a")
+ self.assertEqual(self.a.result, True)
+ self.a.result = None
+
+ #register service
+ Register(self.a,"b")
+ self.assertEqual(self.a.result, True)
+ self.a.result = None
+
+ Search(self.a,"a")
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+ self.a.result = None
+
+ Search(self.a,"b")
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+ self.a.result = None
+
+ #deregister service
+ DeRegister(self.a,"a")
+ DeRegister(self.a,"b")
+
+
+ def testSearchNotPresent(self):
+
+ #deregister service
+ DeRegister(self.a,"a")
+ DeRegister(self.b,"a")
+
+ self.a.result = None
+
+ #register service
+ Register(self.a,"b")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check service is not registered
+ Search(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 0)
+
+ self.a.result = None
+
+ #deregister service
+ DeRegister(self.a,"b")
+
+ self.assertEqual(self.a.result, True)
+
+ #check service is deregistered
+ self.a.result = False
+ Search(self.a,"b")
+ self.assertEqual(self.a.result, [])
+
+
+
+ def testModifyService(self):
+
+ #deregister service
+ DeRegister(self.a,"a")
+
+ #register service
+ Register(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+
+ #check service is registered
+ Search(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+
+ self.assertEqual(self.a.result[0].getOwner(), self.a.getAID())
+ self.assertEqual(len(self.a.result), 1)
+
+ if self.a.result[0].getName() not in ['unittest_name_1_a']:
+ self.fail()
+
+
+
self.assertEqual(self.a.result[0].getOntology(),["account_managing"])
+
+ self.a.result = None
+
+ #modify service
+ Modify(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check service is modified
+ Search(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+
+ self.assertEqual(self.a.result[0].getOwner(), self.a.getAID())
+
+ self.assertEqual(len(self.a.result), 1)
+
+ self.assertEqual(self.a.result[0].getOntology(),["new_ontology"])
+
+ self.a.result = None
+
+ #deregister service
+ DeRegister(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ #check service is deregistered
+ self.a.result = False
+ Search(self.a,"a")
+ self.assertEqual(self.a.result, [])
+
+
+
+
+ def testModifyNotAllowed(self):
+
+ #deregister service
+ DeRegister(self.a,"a")
+ DeRegister(self.b,"a")
+
+ #register service
+ Register(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check service is registered
+ Search(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+
+ self.assertEqual(self.a.result[0].getOwner(), self.a.getAID())
+
+ if self.a.result[0].getName() not in ['unittest_name_1_a']:
+ self.fail()
+
+
self.assertEqual(self.a.result[0].getOntology(),["account_managing"])
+
+ self.a.result = None
+ self.b.result = None
+
+ #modify service
+ Modify(self.b,"a")
+
+ self.assertEqual(self.b.result, False)
+
+ self.b.result = None
+
+ #check service is NOT modified
+ Search(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+
+ self.assertEqual(self.a.result[0].getOwner(), self.a.getAID())
+
+ if self.a.result[0].getName() not in ['unittest_name_1_a']:
+ self.fail()
+
+
self.assertEqual(self.a.result[0].getOntology(),["account_managing"])
+
+ self.a.result = None
+
+ #deregister service
+ DeRegister(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ def testModifyNotRegistered(self):
+ #deregister service
+ DeRegister(self.a,"a")
+
+ #check service is not registered
+ Search(self.a,"a")
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 0)
+
+ self.a.result = None
+
+ #modify service
+ Modify(self.a,"a")
+
+ self.assertEqual(self.a.result, False)
+
+ self.a.result = None
+
+ #check service is deregistered
+ self.a.result = False
+ Search(self.a,"a")
+ self.assertEqual(self.a.result, [])
+ self.assertEqual(len(self.a.result), 0)
+
+
+ def testEmptySearch(self):
+ #deregister service
+ DeRegister(self.a,"a")
+ DeRegister(self.a,"b")
+
+ #get zero services
+ EmptySearch(self.a)
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 0)
+
+ self.a.result = None
+
+ #register service
+ Register(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check number of services is 1
+ EmptySearch(self.a)
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 1)
+
+ self.a.result = None
+
+ #register service
+ Register(self.a,"b")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #check number of services is 2
+ EmptySearch(self.a)
+
+ self.assertNotEqual(self.a.result, None)
+ self.assertEqual(len(self.a.result), 2)
+
+ self.a.result = None
+
+
+ #deregister service
+ DeRegister(self.a,"a")
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ def testAlreadyRegistered(self):
+
+ #deregister service
+ DeRegister(self.a,"a")
+
+ #register service
+ Register(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+ self.a.result = None
+
+ #register service ALREADY registered
+ Register(self.a,"a")
+
+ self.assertEqual(self.a.result, False)
+
+ self.a.result = None
+
+
+ #deregister service
+ DeRegister(self.a,"a")
+
+ self.assertEqual(self.a.result, True)
+
+
+
+if __name__ == "__main__":
+ #unittest.main()
+ #sys.exit()
+
+ suite = unittest.TestSuite()
+ suite.addTest(DFTestCase('testRegisterService'))
+ result = unittest.TestResult()
+
+ suite.run(result)
+ for f in result.failures:
+ print f[0]
+ print f[1]
+
+
+
=======================================
--- /dev/null
+++ /trunk/test/eventbehavTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,72 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+
+host = "127.0.0.1"
+
+class MyAgent(spade.Agent.Agent):
+
+ def _setup(self):
+ self.msg = None
+
+
+class SendMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def _process(self):
+ msg = spade.ACLMessage.ACLMessage()
+ msg.setPerformative("inform")
+ msg.addReceiver(spade.AID.aid("b@"+host,["xmpp://b@"+host]))
+ msg.setContent("testSendMsg")
+
+ self.myAgent.send(msg)
+
+class EventMsgBehav(spade.Behaviour.EventBehaviour):
+
+ def _process(self):
+ self.myAgent.msg = self._receive(block=True)
+
+
+class BasicTestCase(unittest.TestCase):
+
+ def setUp(self):
+
+ self.Aaid = spade.AID.aid("a@"+host,["xmpp://a@"+host])
+ self.Baid = spade.AID.aid("b@"+host,["xmpp://b@"+host])
+
+ self.a = MyAgent("a@"+host, "secret")
+ self.a.start()
+ self.b = MyAgent("b@"+host, "secret")
+ self.b.start()
+
+ def tearDown(self):
+ self.a.stop()
+ self.b.stop()
+
+ def testSendMsg(self):
+ template = spade.Behaviour.ACLTemplate()
+ template.setSender(self.Aaid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.b.addBehaviour(EventMsgBehav(),t)
+ self.a.addBehaviour(SendMsgBehav(),None)
+ counter = 0
+ while self.b.msg == None and counter < 10:
+ time.sleep(1)
+ counter += 1
+ self.assertNotEqual(self.b.msg,None)
+ self.assertEqual(self.b.msg.getContent(),"testSendMsg")
+ self.assertEqual(self.b.msg.getSender(), self.Aaid)
+ self.assertEqual(len(self.b.msg.getReceivers()),1)
+ self.assertEqual(self.b.msg.getReceivers()[0], self.Baid)
+
+
+
+if __name__ == "__main__":
+ unittest.main()
+
+
+
=======================================
--- /dev/null
+++ /trunk/test/kbTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,140 @@
+import os
+import sys
+import unittest
+sys.path.append('../..')
+
+import spade
+from spade.bdi import *
+from spade import SPARQLKB, ECLiPSeKB, Flora2KB, SWIKB, XSBKB
+host = "127.0.0.1"
+
+sparql1='''
+PREFIX gr:<
http://purl.org/goodrelations/v1#>
+PREFIX rdfs: <
http://www.w3.org/2000/01/rdf-schema#>
+
+SELECT ?l ?p ?c ?s
+WHERE {
+?s a gr:Offering.
+?s rdfs:label ?l.
+?s gr:hasPriceSpecification ?ps.
+?ps gr:hasCurrencyValue ?p.
+?ps gr:hasCurrency ?c
+FILTER( regex( ?l, "yoghurt", "i" ) )
+} ORDER BY ?p LIMIT 500 '''
+
+sparql2 = '''
+PREFIX rdfs: <
http://www.w3.org/2000/01/rdf-schema#>
+SELECT ?name
+WHERE {
+ <
http://dbpedia.org/resource/Croatia>
+ rdfs:name
+ ?name
+}'''
+
+class KBTestCase(unittest.TestCase):
+
+ def setUp(self):
+
+ self.a = BDIAgent("kb@"+host,"secret")
+
+ def tearDown(self):
+ #self.a.stop()
+ pass
+
+ def testSPARQLopenlink(self):
+ self.a.configureKB("SPARQL", sentence=None,
path='
http://lod.openlinksw.com/sparql')
+ for result in self.a.askBelieve(sparql1):
+ assert result["p"] in ["0.5", "0.55", "0.75", "0.85"]
+ assert result["c"] == "GBP"
+
+ def testSPARQLdbpedia(self):
+ self.a.configureKB("SPARQL", sentence=None,
path='
http://dbpedia.org/sparql')
+ for result in self.a.askBelieve(sparql2):
+ assert result["name"] in ["Croatia","Republic of Croatia","Republika
Hrvatska"]
+
+ def testEclipse(self):
+
+ path="/Users/jpalanca/Downloads/eclipse/bin/x86_64_macosx/eclipse"
+ if not os.path.exists(path): path="eclipse"
+
+ self.a.configureKB("ECLiPSe", None, path)
+
+ if not issubclass(self.a.kb.__class__,ECLiPSeKB.ECLiPSeKB):
+ self.fail("Could not find ECLiPSe.")
+
+ self.a.addBelieve( 'a(b,c)' )
+ self.a.addBelieve( 'a(c,d)' )
+ self.a.addBelieve( '( p(_X,_Y) :- a(_X,_Y) )' )
+ self.a.addBelieve( '( p(_X,_Y) :- a(_X,_Z), p(_Z,_Y) )' )
+
+ for result in self.a.askBelieve( 'p(X,Y)' ):
+ assert result in
[{'Y': 'c', 'X': 'b'},{'Y': 'd', 'X': 'c'},{'Y': 'd', 'X': 'b'}]
+
+ def testFlora2(self):
+ path="/Users/jpalanca/Downloads/flora/XSBFLORABUNDLE/flora2/runflora"
+ if not os.path.exists(path): path="eclipse"
+
+ self.a.configureKB("Flora2", None, path)
+
+ if not issubclass(self.a.kb.__class__,Flora2KB.Flora2KB):
+ self.fail("Could not find Flora2.")
+
+ self.a.addBelieve( 'a[ b->c ]' )
+ self.a.addBelieve( '( ?x[ c->?y ] :- ?x[ b->?y ] )', 'insertrule' )
+
+ for result in self.a.askBelieve( '?x[ ?y->?z ]' ):
+ assert result in
[{'y': 'b', 'x': 'a', 'z': 'c'},{'y': 'c', 'x': 'a', 'z': 'c'}]
+
+ self.a.removeBelieve( 'a[ b->c ]' )
+ result = self.a.askBelieve( '?x[ ?y->?z ]' )
+ assert len(result)==0
+
+ def testSWI(self):
+ path="swipl"
+
+ self.a.configureKB("SWI", None, path)
+
+ if not issubclass(self.a.kb.__class__,SWIKB.SWIKB):
+ self.fail("Could not find SWI pl.")
+
+ self.a.addBelieve( 'a(b,c)' )
+ self.a.addBelieve( 'a(c,d)' )
+ self.a.addBelieve( '( p(_X,_Y) :- a(_X,_Y) )' )
+ self.a.addBelieve( '( p(_X,_Y) :- a(_X,_Z), p(_Z,_Y) )' )
+
+ self.assertFalse(self.a.askBelieve( 'p(X,Y)' ))
+
+ self.a.removeBelieve( 'a(b,c)' )
+ self.assertFalse(self.a.askBelieve( 'p(X,Y)' ))
+
+ self.a.removeBelieve( 'a(c,d)' )
+ self.assertTrue(self.a.askBelieve( 'p(X,Y)' ))
+
+ def testXSB(self):
+ path="/Users/jpalanca/Downloads/XSB/XSB/bin/xsb"
+ if not os.path.exists(path): path="xsb"
+
+ self.a.configureKB("XSB", None, path)
+
+ if not issubclass(self.a.kb.__class__,XSBKB.XSBKB):
+ self.fail("Could not find XSB.")
+
+ self.a.addBelieve( 'a(b,c)' )
+ self.a.addBelieve( 'a(c,d)' )
+ self.a.addBelieve( '( p(_X,_Y) :- a(_X,_Y) )' )
+ self.a.addBelieve( '( p(_X,_Y) :- a(_X,_Z), p(_Z,_Y) )' )
+
+ for result in self.a.askBelieve( 'p(X,Y)' ):
+ assert result in [{'Y': 'c', 'X': 'b'}, {'Y': 'd', 'X': 'c'},
{'Y': 'd', 'X': 'b'}]
+
+ self.a.removeBelieve( 'a(b,c)' )
+ for result in self.a.askBelieve( 'p(X,Y)' ):
+ self.assertEqual(result,{'Y': 'd', 'X': 'c'})
+
+ self.a.removeBelieve( 'a(c,d)' )
+ result = self.a.askBelieve( 'p(X,Y)' )
+ assert result == False
+
+
+if __name__ == "__main__":
+ unittest.main()
=======================================
--- /dev/null
+++ /trunk/test/p2pTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,239 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+
+host = "127.0.0.1"
+
+class MyAgent(spade.Agent.Agent):
+
+ def _setup(self):
+ self.msg = None
+
+
+
+class p2pSendMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def __init__(self,method):
+ spade.Behaviour.OneShotBehaviour.__init__(self)
+ self.method = method
+
+ def _process(self):
+ msg = spade.ACLMessage.ACLMessage()
+ msg.setPerformative("inform")
+ msg.addReceiver(spade.AID.aid("b@"+host,["xmpp://b@"+host]))
+ msg.setContent("testSendMsg")
+
+ self.myAgent.send(msg,method=self.method)
+
+class p2pRecvMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def __init__(self,method):
+ spade.Behaviour.OneShotBehaviour.__init__(self)
+ self.method = method
+
+ def _process(self):
+ self.myAgent.msg = self._receive(block=True,timeout=10)
+
+class p2pSendAndRecvMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def __init__(self,method):
+ spade.Behaviour.OneShotBehaviour.__init__(self)
+ self.method = method
+
+ def _process(self):
+ msg = spade.ACLMessage.ACLMessage()
+ msg.setPerformative("inform")
+ msg.addReceiver(spade.AID.aid("b@"+host,["xmpp://b@"+host]))
+ msg.setContent("testSendAndRecvMsg")
+
+ self.myAgent.send(msg, method=self.method)
+ self.myAgent.msg = None
+ self.myAgent.msg = self._receive(block=True,timeout=10)
+
+class p2pAnswerMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def __init__(self,method):
+ spade.Behaviour.OneShotBehaviour.__init__(self)
+ self.method = method
+
+ def _process(self):
+ msg = None
+ msg = self._receive(block=True,timeout=10)
+ if msg != None:
+ content = msg.getContent()
+ msg = msg.createReply()
+ msg.setContent(content)
+ self.myAgent.send(msg, method=self.method)
+
+class p2pSendMultiMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def __init__(self,method, nmsg=1):
+ spade.Behaviour.OneShotBehaviour.__init__(self)
+ self.method = method
+ self.nmsg = int(nmsg)
+
+ def _process(self):
+ self.myAgent.routeTag = []
+ msg = spade.ACLMessage.ACLMessage()
+ msg.setPerformative("inform")
+ msg.addReceiver(spade.AID.aid("b@"+host,["xmpp://b@"+host]))
+
+ socket = None
+
+ for i in range (self.nmsg):
+ msg.setContent(str(i+1))
+ self.myAgent.send(msg,method=self.method)
+ if i==0:
+ socket = self.myAgent.p2p_routes["b@"+host]["socket"]
+ else:
+ if socket != self.myAgent.p2p_routes["b@"+host]["socket"]:
+ self.myAgent.routeTag.append(str(i+1))
+
+class p2pRecvMultiMsgBehav(spade.Behaviour.OneShotBehaviour):
+
+ def __init__(self,method, nmsg=1):
+ spade.Behaviour.OneShotBehaviour.__init__(self)
+ self.method = method
+ self.nmsg = int(nmsg)
+
+ def _process(self):
+ self.myAgent.receivedmsg = 0
+ self.myAgent.errorTag = []
+
+ for i in range(self.nmsg):
+ self.myAgent.msg = None
+ self.myAgent.msg = self._receive(block=True,timeout=20)
+ if self.myAgent.msg.getContent()!=str(i+1):
+ self.myAgent.errorTag.append(i+1)
+ if self.myAgent.msg: self.myAgent.receivedmsg+=1
+
+class BasicTestCase(unittest.TestCase):
+
+ def setUp(self):
+
+ self.Aaid = spade.AID.aid("a@"+host,["xmpp://a@"+host])
+ self.Baid = spade.AID.aid("b@"+host,["xmpp://b@"+host])
+
+ self.a = MyAgent("a@"+host, "secret",p2p=True)
+ #self.a._debug = True
+ self.a.start()
+ self.b = MyAgent("b@"+host, "secret",p2p=True)
+ #self.b._debug=True
+ self.b.start()
+
+ def tearDown(self):
+ self.a.stop()
+ self.b.stop()
+
+ def testSendMsgP2P(self):
+ template = spade.Behaviour.ACLTemplate()
+ template.setSender(self.Aaid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.b.addBehaviour(p2pRecvMsgBehav("p2p"),t)
+ self.a.addBehaviour(p2pSendMsgBehav("p2p"),None)
+ counter = 0
+ while self.b.msg == None and counter < 10:
+ time.sleep(1)
+ counter += 1
+ self.assertNotEqual(self.b.msg,None)
+ self.assertEqual(self.b.msg.getContent(),"testSendMsg")
+ self.assertEqual(self.b.msg.getSender(), self.Aaid)
+ self.assertEqual(len(self.b.msg.getReceivers()),1)
+ self.assertEqual(self.b.msg.getReceivers()[0], self.Baid)
+ self.assertEqual(self.b.msg._attrs["method"],"p2p")
+
+ def testSendMsgP2PPY(self):
+ template = spade.Behaviour.ACLTemplate()
+ template.setSender(self.Aaid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.b.addBehaviour(p2pRecvMsgBehav("p2ppy"),t)
+ self.a.addBehaviour(p2pSendMsgBehav("p2ppy"),None)
+ counter = 0
+ while self.b.msg == None and counter < 10:
+ time.sleep(1)
+ counter += 1
+ self.assertNotEqual(self.b.msg,None)
+ self.assertEqual(self.b.msg.getContent(),"testSendMsg")
+ self.assertEqual(self.b.msg.getSender(), self.Aaid)
+ self.assertEqual(len(self.b.msg.getReceivers()),1)
+ self.assertEqual(self.b.msg.getReceivers()[0], self.Baid)
+ self.assertEqual(self.b.msg._attrs["method"],"p2ppy")
+
+ def testSendAndRecvMsgP2P(self):
+ template = spade.Behaviour.ACLTemplate()
+ template.setSender(self.Aaid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.b.addBehaviour(p2pAnswerMsgBehav("p2p"),t)
+ template.setSender(self.Baid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.a.addBehaviour(p2pSendAndRecvMsgBehav("p2p"),t)
+ counter = 0
+ while self.a.msg == None and counter < 20:
+ time.sleep(1)
+ counter += 1
+ self.assertNotEqual(self.a.msg,None)
+ self.assertEqual(self.a.msg.getContent(),"testSendAndRecvMsg")
+ self.assertEqual(self.a.msg._attrs["method"],"p2p")
+
+ def testSendAndRecvMsgP2PPY(self):
+ template = spade.Behaviour.ACLTemplate()
+ template.setSender(self.Aaid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.b.addBehaviour(p2pAnswerMsgBehav("p2ppy"),t)
+ template.setSender(self.Baid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.a.addBehaviour(p2pSendAndRecvMsgBehav("p2ppy"),t)
+ counter = 0
+ while self.a.msg == None and counter < 20:
+ time.sleep(1)
+ counter += 1
+ self.assertNotEqual(self.a.msg,None)
+ self.assertEqual(self.a.msg.getContent(),"testSendAndRecvMsg")
+ self.assertEqual(self.a.msg._attrs["method"],"p2ppy")
+
+ def testSendMultiMsgP2P(self):
+ nmsg=100
+ template = spade.Behaviour.ACLTemplate()
+ template.setSender(self.Aaid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.b.addBehaviour(p2pRecvMultiMsgBehav("p2p",nmsg),t)
+ self.a.addBehaviour(p2pSendMultiMsgBehav("p2p",nmsg),None)
+ counter = 0
+ while self.b.msg == None and counter < 10:
+ time.sleep(1)
+ counter += 1
+
+ self.assertEqual(self.b.receivedmsg,nmsg)
+ self.assertNotEqual(self.b.msg,None)
+ self.assertEqual(self.b.msg._attrs["method"],"p2p")
+ self.assertEqual(self.b.errorTag,[])
+ self.assertEqual(self.a.routeTag,[])
+
+ def testSendMultiMsgP2PPY(self):
+ nmsg=100
+ template = spade.Behaviour.ACLTemplate()
+ template.setSender(self.Aaid)
+ t = spade.Behaviour.MessageTemplate(template)
+ self.b.addBehaviour(p2pRecvMultiMsgBehav("p2ppy",nmsg),t)
+ self.a.addBehaviour(p2pSendMultiMsgBehav("p2ppy",nmsg),None)
+ counter = 0
+ while self.b.msg == None and counter < 10:
+ time.sleep(1)
+ counter += 1
+ self.assertNotEqual(self.b.msg,None)
+
+ self.assertEqual(self.b.msg._attrs["method"],"p2ppy")
+ self.assertEqual(self.b.receivedmsg,nmsg)
+ self.assertEqual(self.b.errorTag,[])
+ self.assertEqual(self.a.routeTag,[])
+
+if __name__ == "__main__":
+ unittest.main()
+
+
+
=======================================
--- /dev/null
+++ /trunk/test/pubsubTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,166 @@
+import os
+import sys
+import time
+import unittest
+
+sys.path.append('../..')
+
+import spade
+from xmpp.simplexml import Node
+
+host = "127.0.0.1"
+
+class SubscribeBehaviour(spade.Behaviour.EventBehaviour):
+
+ def _process(self):
+ msg = self._receive(True)
+ self.myAgent.eventmsg = msg
+
+class PubSubTestCase(unittest.TestCase):
+
+ def setUp(self):
+
+ self.Aaid = spade.AID.aid("a@"+host,["xmpp://a@"+host])
+ self.Baid = spade.AID.aid("b@"+host,["xmpp://b@"+host])
+
+ self.a = spade.Agent.Agent("a@"+host, "secret")
+ self.a.wui.start()
+ self.a.start()
+ self.b = spade.Agent.Agent("b@"+host, "secret")
+ self.b.wui.start()
+ self.b.start()
+
+ self.a.setSocialItem('b@'+host)
+ self.a._socialnetwork['b@'+host].subscribe()
+ self.b.setSocialItem('a@'+host)
+ self.b._socialnetwork['a@'+host].subscribe()
+
+ self.a.deleteEvent("ExistsNode")
+ self.b.deleteEvent("ExistsNode")
+ self.a.deleteEvent("NENode")
+ self.b.deleteEvent("NENode")
+
+ def tearDown(self):
+ self.a.deleteEvent("ExistsNode")
+ self.b.deleteEvent("ExistsNode")
+ self.a.deleteEvent("NENode")
+ self.b.deleteEvent("NENode")
+ self.a.stop()
+ self.b.stop()
+
+ def testSubscribeNotExistEvent(self):
+ result = self.a.subscribeToEvent("NENode")
+ self.assertEqual(result, ('error', ['item-not-found']) )
+
+ def testUnsubscribeNotExistEvent(self):
+ result = self.a.unsubscribeFromEvent("NENode")
+ self.assertEqual(result, ('error', ['item-not-found']) )
+
+ def testDeleteNotExistEvent(self):
+ result = self.a.deleteEvent("NENode")
+ self.assertEqual(result, ('error', ['item-not-found']) )
+
+ def testPublishNotExistEvent(self):
+ result = self.a.publishEvent('NENode', Node(tag='foo'))
+ self.assertEqual(result[0], 'ok')
+ self.assertEqual(len(result[1]), 2)
+ self.assertEqual(result[1][0], 'NENode')
+ self.assertEqual(type(result[1][1]), unicode)
+
+ self.a.deleteEvent("NENode")
+
+ def testCreateEvent(self):
+ result = self.a.createEvent("ExistsNode")
+ self.assertEqual(result, ('ok', ['ExistsNode']))
+
+ self.a.deleteEvent("ExistsNode")
+
+ def testPublishEvent(self):
+
+ result = self.a.createEvent("ExistsNode")
+ self.assertEqual(result, ('ok', ['ExistsNode']))
+
+ result = self.b.subscribeToEvent("ExistsNode",
SubscribeBehaviour())
+ self.assertEqual( result, ('ok', []) )
+ #TODO: Check that the last published item is sent after
subscription.
+
+ self.b.eventmsg = None
+
+ self.a.publishEvent('ExistsNode', Node(tag='foo'))
+
+ import time
+ time.sleep(3) #wait for the event
+ #Check that the event is received in the callback
+ self.assertNotEqual(self.b.eventmsg,None)
+
+ n = self.b.eventmsg.T.event.T.items.T.item
+ self.assertNotEqual(n.getTag("foo"),None)
+
+ if not "a@"+host in n.getAttr("publisher"): self.fail("Wrong
publisher")
+
+ #TODO: Check that the new item published by 'a' is received too.
+
+ self.b.unsubscribeFromEvent("ExistsNode")
+ self.a.deleteEvent("ExistsNode")
+
+ def testSubscribeNotAllowed(self):
+ result = self.a.createEvent("ExistsNode")
+ self.assertEqual(result, ('ok', ['ExistsNode']))
+
+ result = self.b.subscribeToEvent("ExistsNode", jid="a@"+host)
+ self.assertEqual(result, ('error', ['bad-request', 'invalid-jid']))
+
+ self.a.deleteEvent("ExistsNode")
+
+ def testUnsubscribeNotAllowed(self):
+ result = self.a.createEvent("ExistsNode")
+ self.assertEqual(result, ('ok', ['ExistsNode']))
+
+ result = self.b.subscribeToEvent("ExistsNode")
+ self.assertEqual( result, ('ok', []) )
+
+ result = self.a.unsubscribeFromEvent('ExistsNode', jid='b@'+host)
+ self.assertEqual(result, ('error', ['bad-request', 'invalid-jid'])
)
+
+ self.b.unsubscribeFromEvent("ExistsNode")
+ self.a.deleteEvent("ExistsNode")
+
+ def testResubscribeToEvent(self):
+ result = self.a.createEvent("ExistsNode")
+ self.assertEqual(result, ('ok', ['ExistsNode']))
+
+ result = self.b.subscribeToEvent("ExistsNode")
+ self.assertEqual( result, ('ok', []) )
+
+ result = self.b.unsubscribeFromEvent("ExistsNode")
+ self.assertEqual( result, ('ok', []))
+ result = self.b.subscribeToEvent("ExistsNode")
+ self.assertEqual( result, ('ok', [])) # OK
+ #TODO: Check that the last published item is sent after
subscription.
+
+ def testNotEventBehaviour(self):
+
+ class Behav(spade.Behaviour.Behaviour): pass
+ self.a.deleteEvent("ExistsNode")
+ self.b.deleteEvent("ExistsNode")
+ self.a.createEvent("ExistsNode")
+ result = self.b.subscribeToEvent("ExistsNode",Behav())
+ self.assertEqual(result, ("error",["not-event-behaviour"]))
+
+
+
+if __name__ == "__main__":
+ #unittest.main()
+ #sys.exit()
+
+ suite = unittest.TestSuite()
+ suite.addTest(PubSubTestCase('testCreateEvent'))
+ result = unittest.TestResult()
+
+ suite.run(result)
+ for f in result.failures:
+ print f[0]
+ print f[1]
+
+
+
=======================================
--- /dev/null
+++ /trunk/test/rpcTestCase.py Tue Jul 10 16:56:52 2012
@@ -0,0 +1,211 @@
+import os
+import sys
+import time
+import types
+import unittest
+
+sys.path.append('../..')
+
+import spade
+
+host = "127.0.0.1"
+
+class MyAgent(spade.Agent.Agent):
+
+ def _setup(self):
+ self.result = None
+
+def sumVec(vec):
+ r = 0
+ for i in vec:
+ r+=int(i)
+ return {"sum":r}
+
+def CreateService(name, owner, P=None,Q=None):
+ return spade.DF.Service(name, owner, P=P,Q=Q)
+
+def Invoke(agent, service,inputs=None):
+
+ agent.result = agent.invokeService(service,inputs)
+
+def RegisterService(agent, service, method):
+
+ agent.result = agent.registerService(service,method)
+
+def DeRegisterService(agent):
+ service = spade.DF.DfAgentDescription()
+ service.setAID(agent.getAID())
+ #service = CreateService("VecSum",agent.getAID())
+ agent.result = agent.deregisterService(service)
+
+def SearchService(agent,service):
+ agent.result = agent.searchService(service)
+ return agent.result
+
+class RPCTestCase(unittest.TestCase):
+
+ def setUp(self):
+
+ self.Aaid = spade.AID.aid("a@"+host,["xmpp://a@"+host])
+ self.Baid = spade.AID.aid("b@"+host,["xmpp://b@"+host])
+
+ self.a = MyAgent("a@"+host, "secret")
+ self.a.start()
+ self.b = MyAgent("b@"+host, "secret")
+ #self.b.setDebugToScreen()
+ #self.a.setDebugToScreen()
+ self.b.start()
+ self.a.wui.start()
+ self.b.wui.start()
+
+ def tearDown(self):
+ DeRegisterService(self.b)
+ self.a.stop()
+ self.b.stop()
+
+ def testInvokeService(self):
+ DeRegisterService(self.b)
+
+ s = CreateService("VecSum",self.b.getAID(),P=["vec"],Q=["sum"])
+ RegisterService(self.b, s, sumVec)
+
+ Invoke(self.a, s,inputs={"vec":[10,20]})
+ self.assertNotEqual(self.a.result,None)
+ self.assertNotEqual(self.a.result,False)
+ self.assertEqual(type(self.a.result),types.DictType)
+ self.assertEqual(self.a.result,{"sum":30})
+
+ DeRegisterService(self.b)
+ self.assertEqual(self.b.result,True)
+ services = SearchService(self.a,s)
+ self.assertEqual(len(services),0)
+
+ def testInvokeOwnService(self):
+ DeRegisterService(self.b)
+
+ s = CreateService("VecSum",self.b.getAID(),P=["vec"],Q=["sum"])
+ RegisterService(self.b, s, sumVec)
+
+ Invoke(self.b, s, inputs={"vec":[10,20]})
+ self.assertNotEqual(self.b.result,None)
+ self.assertNotEqual(self.b.result,False)
+ self.assertEqual(type(self.b.result),types.DictType)
+ self.assertEqual(self.b.result,{"sum":30})
+
+ DeRegisterService(self.b)
+ self.assertEqual(self.b.result,True)
+
+ def testSearchAndInvoke(self):
+ DeRegisterService(self.b)
+
+ s = CreateService("VecSum",self.b.getAID(),P=["vec"],Q=["sum"])
+ RegisterService(self.b, s, sumVec)
+
+ s2 = CreateService("VecSum",self.b.getAID(),P=["vec"])
+ services = SearchService(self.a,s2)
+ self.assertNotEqual(services,None)
+ self.assertEqual(len(services),1)
+
+ Invoke(self.a, services[0],inputs={"vec":[10,20]})
+ self.assertNotEqual(self.a.result,None)
+ self.assertNotEqual(self.a.result,False)
+ self.assertEqual(type(self.a.result),types.DictType)
+ self.assertEqual(self.a.result,{"sum":30})
+
+ DeRegisterService(self.b)
+ self.assertEqual(self.b.result,True)
+
+ def testInvokeBadParams(self):
+ DeRegisterService(self.b)
+
+ s = CreateService("VecSum",self.b.getAID(),P=["vec"],Q=["sum"])
+ RegisterService(self.b, s, sumVec)
+
+ s2 = CreateService("VecSum",self.b.getAID())
+ Invoke(self.a, s2, inputs={"vec":["param1","param2"]})
+ self.assertEqual(self.a.result,False)
+
+ DeRegisterService(self.b)
+
+ def testInvokeNotExistingService(self):
+ DeRegisterService(self.b)
+
+ s = CreateService("VecSum",self.b.getAID(),P=["vec"])
+
+ Invoke(self.a, s)
+ self.assertNotEqual(self.a.result,None)
+ self.assertEqual(self.a.result,False)
+
+ def testInvokeTwice(self):
+ DeRegisterService(self.b)
+
+ s = CreateService("VecSum",self.b.getAID(),P=["vec"],Q=["sum"])
+ RegisterService(self.b, s, sumVec)
+
+ Invoke(self.a, s, inputs={"vec":[10,20]})
+ self.assertNotEqual(self.a.result,None)
+ self.assertNotEqual(self.a.result,False)
+ self.assertEqual(self.a.result,{"sum":30})
+
+ Invoke(self.a, s, inputs={"vec":[20,20]})
+ self.assertNotEqual(self.a.result,None)
+ self.assertNotEqual(self.a.result,False)
+ self.assertEqual(self.a.result,{"sum":40})
+
+ DeRegisterService(self.b)
+ self.assertEqual(self.b.result,True)
+ services = SearchService(self.a,s)
+ self.assertEqual(len(services),0)
+
+ def testInvokeService_withKB(self):
+ DeRegisterService(self.b)
+
+ s = CreateService("VecSum",self.b.getAID(),P=["vec"],Q=["sum"])
+ RegisterService(self.b, s, sumVec)
+
+ self.a.KB["vec"] = [10,20]
+
+ Invoke(self.a, s)
+ self.assertNotEqual(self.a.result,None)
+ self.assertNotEqual(self.a.result,False)
+ self.assertEqual(self.a.KB["sum"],30)
+
+ DeRegisterService(self.b)
+ self.assertEqual(self.b.result,True)
+ services = SearchService(self.a,s)
+ self.assertEqual(len(services),0)
+
+ del self.a.KB["sum"]
+ del self.a.KB["vec"]
+
+ def testInvokeServiceMissingParams_withKB(self):
+ DeRegisterService(self.b)
+
+ s = CreateService("VecSum",self.b.getAID(),P=["vec"],Q=["sum"])
+ RegisterService(self.b, s, sumVec)
+
+ Invoke(self.a, s)
+ self.assertEqual(self.a.result,False)
+ if self.a.KB.has_key("sum"): self.fail()
+
+ DeRegisterService(self.b)
+ self.assertEqual(self.b.result,True)
+ services = SearchService(self.a,s)
+ self.assertEqual(len(services),0)
+
+if __name__ == "__main__":
+ unittest.main()
+ sys.exit()
+ suite = unittest.TestSuite()
+ suite.addTest(RPCTestCase('testInvokeService_withKB'))
+ result = unittest.TestResult()
+
+ suite.run(result)
+ print str(result)
+ for f in result.errors:
+ print f[0]
+ print f[1]
+
+ for f in result.failures:
+ print f[0]
+ print f[1]
=======================================
--- /dev/null
+++ /trunk/test/unittests_spade.xml Tue Jul 10 16:56:52 2012
@@ -0,0 +1,28 @@
+<spade>
+
+ <platform>
+ <hostname>127.0.0.1</hostname>
+ <port>5222</port>
+ </platform>
+
+ <acc>
+ <hostname>acc.127.0.0.1</hostname>
+ <password>gxFgUdtH</password>
+ <port>5222</port>
+
+ </acc>
+
+ <ams>
+ <hostname>ams.127.0.0.1</hostname>
+ <password>dOQxsLdu</password>
+ <port>5222</port>
+ </ams>
+
+ <df>
+ <hostname>df.127.0.0.1</hostname>
+ <password>QpbpvoWf</password>
+ <port>5222</port>
+ </df>
+
+</spade>
+
=======================================
--- /dev/null
+++ /trunk/test/unittests_xmppd.xml Tue Jul 10 16:56:52 2012
@@ -0,0 +1,15 @@
+<server>
+ <servernames>
+ <name>127.0.0.1</name>
+ </servernames>
+ <certificate file="xmppd.pem"/>
+ <plugins>
+ <MUC jid="muc.127.0.0.1" name="SPADE MUC Component"/>
+ <WQ jid="wq.127.0.0.1" name="SPADE Workgroup Queues"/>
+ </plugins>
+ <components>
+ <AMS jid="ams.127.0.0.1" name="AMS" username="ams"
password="dOQxsLdu"/>
+ <DF jid="df.127.0.0.1" name="DF" username="df"
password="QpbpvoWf"/>
+ <ACC jid="acc.127.0.0.1" name="ACC" username="acc"
password="gxFgUdtH"/>
+ </components>
+</server>