Add option to run daemon on the session bus for testing

Add a daemon option --test which will run upowerd on the session bus.  This
allows us to run tests without interfering with the system instance. This also
avoids any root privileges entirely, which permits running integration tests as
part of a package build.
This commit is contained in:
Martin Pitt 2011-04-20 00:43:59 +02:00
parent f65aa4dbf2
commit eddcf0ef3d
7 changed files with 28 additions and 6 deletions

View file

@ -116,6 +116,21 @@ G_DEFINE_TYPE (UpDaemon, up_daemon, G_TYPE_OBJECT)
#define UP_DAEMON_ON_BATTERY_REFRESH_DEVICES_DELAY 1 /* seconds */
#define UP_DAEMON_POLL_BATTERY_NUMBER_TIMES 5
/* D-BUS to connect to. Can be set to session bus for testing */
static DBusBusType daemon_bus_type = DBUS_BUS_SYSTEM;
DBusBusType
up_daemon_get_bus_type (void)
{
return daemon_bus_type;
}
void
up_daemon_set_bus_type (DBusBusType type)
{
daemon_bus_type = type;
}
/**
* up_daemon_get_on_battery_local:
*
@ -671,7 +686,7 @@ up_daemon_register_power_daemon (UpDaemon *daemon)
gboolean ret = FALSE;
UpDaemonPrivate *priv = daemon->priv;
priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
priv->connection = dbus_g_bus_get (up_daemon_get_bus_type (), &error);
if (priv->connection == NULL) {
if (error != NULL) {
g_critical ("error getting system bus: %s", error->message);

View file

@ -67,6 +67,8 @@ GQuark up_daemon_error_quark (void);
GType up_daemon_get_type (void);
UpDaemon *up_daemon_new (void);
void up_daemon_test (gpointer user_data);
DBusBusType up_daemon_get_bus_type (void);
void up_daemon_set_bus_type (DBusBusType type);
/* private */
guint up_daemon_get_number_devices_of_type (UpDaemon *daemon,

View file

@ -881,7 +881,7 @@ up_device_init (UpDevice *device)
device->priv->during_coldplug = FALSE;
device->priv->history = up_history_new ();
device->priv->system_bus_connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
device->priv->system_bus_connection = dbus_g_bus_get (up_daemon_get_bus_type (), &error);
if (device->priv->system_bus_connection == NULL) {
g_error ("error getting system bus: %s", error->message);
g_error_free (error);

View file

@ -273,7 +273,7 @@ up_kbd_backlight_init (UpKbdBacklight *kbd_backlight)
return;
}
kbd_backlight->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
kbd_backlight->priv->connection = dbus_g_bus_get (up_daemon_get_bus_type (), &error);
if (error != NULL) {
g_warning ("Cannot connect to bus: %s", error->message);
g_error_free (error);

View file

@ -133,6 +133,7 @@ main (gint argc, gchar **argv)
gint retval = 1;
gboolean timed_exit = FALSE;
gboolean immediate_exit = FALSE;
gboolean session_bus = FALSE;
guint timer_id = 0;
const GOptionEntry options[] = {
@ -142,6 +143,8 @@ main (gint argc, gchar **argv)
{ "immediate-exit", '\0', 0, G_OPTION_ARG_NONE, &immediate_exit,
/* TRANSLATORS: exit straight away, used for automatic profiling */
_("Exit after the engine has loaded"), NULL },
{ "test", '\0', 0, G_OPTION_ARG_NONE, &session_bus,
_("Run on the session bus (only for testing)"), NULL },
{ NULL}
};
@ -153,7 +156,9 @@ main (gint argc, gchar **argv)
g_option_context_free (context);
/* get bus connection */
bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
if (session_bus)
up_daemon_set_bus_type (DBUS_BUS_SESSION);
bus = dbus_g_bus_get (up_daemon_get_bus_type (), &error);
if (bus == NULL) {
g_warning ("Couldn't connect to system bus: %s", error->message);
g_error_free (error);

View file

@ -577,7 +577,7 @@ up_qos_init (UpQos *qos)
if (qos->priv->fd[UP_QOS_KIND_NETWORK] < 0)
g_debug ("cannot open network device file");
qos->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
qos->priv->connection = dbus_g_bus_get (up_daemon_get_bus_type (), &error);
if (error != NULL) {
g_warning ("Cannot connect to bus: %s", error->message);
g_error_free (error);

View file

@ -743,7 +743,7 @@ up_wakeups_init (UpWakeups *wakeups)
wakeups->priv->has_capability = FALSE;
wakeups->priv->polling_enabled = FALSE;
wakeups->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
wakeups->priv->connection = dbus_g_bus_get (up_daemon_get_bus_type (), &error);
if (error != NULL) {
g_warning ("Cannot connect to bus: %s", error->message);
g_error_free (error);