[Telepathy-commits] [telepathy-salut/master] Add a service announcer and a test for it

Sjoerd Simons sjoerd.simons at collabora.co.uk
Tue Sep 2 03:32:57 PDT 2008


---
 tests/twisted/avahitest.py |   68 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 68 insertions(+), 0 deletions(-)

diff --git a/tests/twisted/avahitest.py b/tests/twisted/avahitest.py
index 8e4710d..594c04b 100644
--- a/tests/twisted/avahitest.py
+++ b/tests/twisted/avahitest.py
@@ -103,3 +103,71 @@ class AvahiListener:
           event.interface, event.protocol, event.name, event.stype,
           event.domain, event.protocol, 0)
 
+class AvahiAnnouncer:
+    def __init__(self, name, type, port, txt):
+        self.name = name
+        self.type = type
+        self.port = port
+        self.txt = txt
+
+        self.bus = dbus.SystemBus()
+        self.server = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME,
+            avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
+
+        entry_path = self.server.EntryGroupNew()
+        entry_obj = self.bus.get_object(avahi.DBUS_NAME, entry_path)
+        entry = dbus.Interface(entry_obj,
+            avahi.DBUS_INTERFACE_ENTRY_GROUP)
+
+        entry.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC,
+            dbus.UInt32(0), name, type, get_domain_name(), get_host_name_fqdn(),
+            port, avahi.dict_to_txt_array(txt))
+        entry.Commit()
+
+        self.entry = entry
+
+    def update(self, txt):
+      self.txt.update(txt)
+
+      self.entry.UpdateServiceTxt(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC,
+        dbus.UInt32(0), self.name, self.type, get_domain_name(), 
+        avahi.dict_to_txt_array(self.txt))
+
+
+if __name__ == '__main__':
+    from twisted.internet import reactor
+
+    txtdict = { "test0": "0", "test1": "1" }
+
+    a = AvahiAnnouncer("test", "_test._tcp", 1234, txtdict)
+
+    q = servicetest.IteratingEventQueue()
+    # Set verboseness if needed for debugging
+    # q.verbose = True
+
+    l = AvahiListener(q)
+    l.listen_for_service("_test._tcp")
+
+    while True:
+      e = q.expect ('service-added', stype='_test._tcp')
+      # Only care about services we announced ourselves
+      if e.flags & (avahi.LOOKUP_RESULT_LOCAL|avahi.LOOKUP_RESULT_OUR_OWN):
+          break
+
+    assert "test" == e.name[0:len("test")]
+
+    s = l.resolver_for_service(e)
+    e = q.expect('service-resolved', service = s)
+    for (key, val ) in txtdict.iteritems():
+        v = txt_get_key(e.txt, key)
+        assert v == val, (key, val, v)
+
+    txtdict["test1"] = "2"
+    txtdict["test2"] = "2"
+
+    a.update(txtdict)
+
+    e = q.expect('service-resolved', service = s)
+    for (key, val ) in txtdict.iteritems():
+        v = txt_get_key(e.txt, key)
+        assert v == val, (key, val, v)
-- 
1.5.6.3




More information about the Telepathy-commits mailing list