def connect_advanced_test(self): """Advanced test for observer connect.""" dbus = Mock() observer = DBusObserver(dbus, "SERVICE") self._setup_observer(observer) observer.connect_once_available() dbus.connection.watch_name.assert_called_once() self.assertFalse(observer.is_service_available) observer._service_available.emit.assert_not_called() # pylint: disable=no-member observer._service_unavailable.emit.assert_not_called() # pylint: disable=no-member self._make_service_available(observer) observer._service_name_appeared_callback() self.assertTrue(observer.is_service_available) observer._service_available.emit.assert_not_called() # pylint: disable=no-member observer._service_unavailable.emit.assert_not_called() # pylint: disable=no-member observer._service_name_vanished_callback() self._test_if_service_unavailable(observer) observer.disconnect() dbus.connection.unwatch_name.assert_called_once() self.assertFalse(observer.is_service_available) observer._service_available.emit.assert_not_called() # pylint: disable=no-member observer._service_unavailable.emit.assert_not_called() # pylint: disable=no-member
def connect_test(self, gio): """Test Gio support for watching names.""" dbus = Mock() observer = DBusObserver(dbus, "my.service") self._setup_observer(observer) # Connect the observer. observer.connect_once_available() # Check the call. gio.bus_watch_name_on_connection.assert_called_once() args, kwargs = gio.bus_watch_name_on_connection.call_args self.assertEqual(len(args), 5) self.assertEqual(len(kwargs), 0) self.assertEqual(args[0], dbus.connection) self.assertEqual(args[1], "my.service") self.assertEqual(args[2], DBUS_FLAG_NONE) name_appeared_closure = args[3] self.assertTrue(callable(name_appeared_closure)) name_vanished_closure = args[4] self.assertTrue(callable(name_vanished_closure)) # Check the subscription. subscription_id = gio.bus_watch_name_on_connection.return_value self.assertEqual(len(observer._subscriptions), 1) # Check the observer. self.assertFalse(observer.is_service_available) observer._service_available.emit.assert_not_called() # pylint: disable=no-member observer._service_unavailable.emit.assert_not_called() # pylint: disable=no-member # Call the name appeared closure. name_appeared_closure(dbus.connection, "my.service", "name.owner") self._test_if_service_available(observer) # Call the name vanished closure. name_vanished_closure(dbus.connection, "my.service") self._test_if_service_unavailable(observer) # Call the name appeared closure again. name_appeared_closure(dbus.connection, "my.service", "name.owner") self._test_if_service_available(observer) # Disconnect the observer. observer.disconnect() gio.bus_unwatch_name.assert_called_once_with( subscription_id ) self._test_if_service_unavailable(observer) self.assertEqual(observer._subscriptions, [])