# Copyright (c) Benjamin Kietzman (github.com/bkietz)
#
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

import unittest
import dbus
from dbus.mainloop.glib import DBusGMainLoop
from gobject import MainLoop
from socket import gethostname

class AvahiTest(unittest.TestCase):

  @classmethod
  def setUpClass(c):
    c.system_bus = dbus.SystemBus(mainloop=DBusGMainLoop())

  def setUp(self):
    None

  def testAvahi(self):
    # Connect to Avahi Daemon's interface:
    avahi_remote = AvahiTest.system_bus.get_object('org.freedesktop.Avahi', '/')
    avahi = dbus.Interface(avahi_remote, 'org.freedesktop.Avahi.Server')
    self.assertEqual(gethostname(), avahi.GetHostName())

    # Use the Avahi Daemon to produce a new 
    # ServiceBrowser and connect to its interface:
    browser_path = avahi.ServiceBrowserNew(-1, -1, "_http._tcp", "local", dbus.UInt32(0))
    browser_remote = AvahiTest.system_bus.get_object('org.freedesktop.Avahi', browser_path)

    browser = dbus.Interface(browser_remote, 'org.freedesktop.Avahi.ServiceBrowser')

    # Connect to the ItemNew signal from the browser:
    def new_item_handler(interface, protocol, instance_name, instance_type, domain, flags):
      print "Found service '%s'" % instance_name

    browser.connect_to_signal("ItemNew", new_item_handler)

if __name__ == '__main__':
  unittest.main()
  MainLoop().run()