summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2013-04-15 14:21:48 +1200
committerRobert Ancell <robert.ancell@canonical.com>2013-04-15 14:21:48 +1200
commit8c305430228a9648225821d4c5e623e93a362ecd (patch)
treeaa3fba3732026df8629dbb0a462c0351009aa209
parent13eeff676da87288581c78767f672c3855287183 (diff)
downloadlightdm-8c305430228a9648225821d4c5e623e93a362ecd.tar.gz
Add regression tests for power functionality
Required modifying PowerInterface::canRestart() and PowerInteface::canShutdown()
-rw-r--r--liblightdm-qt/QLightDM/power.h4
-rw-r--r--liblightdm-qt/power.cpp16
-rw-r--r--tests/Makefile.am24
-rw-r--r--tests/scripts/power-no-console-kit-or-login1.conf49
-rw-r--r--tests/scripts/power-no-console-kit.conf50
-rw-r--r--tests/scripts/power-no-login1.conf50
-rw-r--r--tests/scripts/power.conf47
-rw-r--r--tests/src/test-gobject-greeter.c36
-rwxr-xr-xtests/src/test-python-greeter30
-rw-r--r--tests/src/test-qt-greeter.cpp36
-rw-r--r--tests/src/test-runner.c22
-rwxr-xr-xtests/test-gobject-power2
-rwxr-xr-xtests/test-gobject-power-no-console-kit2
-rwxr-xr-xtests/test-gobject-power-no-console-kit-or-login12
-rwxr-xr-xtests/test-gobject-power-no-login12
-rwxr-xr-xtests/test-python-power2
-rwxr-xr-xtests/test-python-power-no-console-kit2
-rwxr-xr-xtests/test-python-power-no-console-kit-or-login12
-rwxr-xr-xtests/test-python-power-no-login12
-rwxr-xr-xtests/test-qt4-power2
-rwxr-xr-xtests/test-qt4-power-no-console-kit2
-rwxr-xr-xtests/test-qt4-power-no-console-kit-or-login12
-rwxr-xr-xtests/test-qt4-power-no-login12
-rwxr-xr-xtests/test-qt5-power2
-rwxr-xr-xtests/test-qt5-power-no-console-kit2
-rwxr-xr-xtests/test-qt5-power-no-console-kit-or-login12
-rwxr-xr-xtests/test-qt5-power-no-login12
27 files changed, 385 insertions, 11 deletions
diff --git a/liblightdm-qt/QLightDM/power.h b/liblightdm-qt/QLightDM/power.h
index 86eb2b2e..59667fea 100644
--- a/liblightdm-qt/QLightDM/power.h
+++ b/liblightdm-qt/QLightDM/power.h
@@ -36,8 +36,8 @@ namespace QLightDM
public Q_SLOTS:
void suspend();
void hibernate();
- void shutdown();
- void restart();
+ bool shutdown();
+ bool restart();
private:
class PowerInterfacePrivate;
diff --git a/liblightdm-qt/power.cpp b/liblightdm-qt/power.cpp
index 3eabc23f..180104f2 100644
--- a/liblightdm-qt/power.cpp
+++ b/liblightdm-qt/power.cpp
@@ -99,12 +99,14 @@ bool PowerInterface::canShutdown()
return false;
}
-void PowerInterface::shutdown()
+bool PowerInterface::shutdown()
{
+ QDBusReply<void> reply;
if (d->login1Interface->isValid())
- d->login1Interface->call("PowerOff", false);
+ reply = d->login1Interface->call("PowerOff", false);
else
- d->consoleKitInterface->call("Stop");
+ reply = d->consoleKitInterface->call("Stop");
+ return reply.isValid();
}
bool PowerInterface::canRestart()
@@ -125,12 +127,14 @@ bool PowerInterface::canRestart()
return false;
}
-void PowerInterface::restart()
+bool PowerInterface::restart()
{
+ QDBusReply<void> reply;
if (d->login1Interface->isValid())
- d->login1Interface->call("Reboot", false);
+ reply = d->login1Interface->call("Reboot", false);
else
- d->consoleKitInterface->call("Restart");
+ reply = d->consoleKitInterface->call("Restart");
+ return reply.isValid();
}
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 1301d950..6865cce2 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -137,6 +137,14 @@ TESTS = \
test-no-console-kit \
test-no-login1 \
test-no-console-kit-or-login1 \
+ test-gobject-power \
+ test-gobject-power-no-console-kit \
+ test-gobject-power-no-login1 \
+ test-gobject-power-no-console-kit-or-login1 \
+ test-python-power \
+ test-python-power-no-console-kit \
+ test-python-power-no-login1 \
+ test-python-power-no-console-kit-or-login1 \
test-open-file-descriptors \
test-xdmcp-open-file-descriptors
@@ -172,7 +180,11 @@ TESTS += \
test-login-qt4-guest-no-setup-script \
test-login-qt4-guest-fail-setup-script \
test-login-qt4-guest-logout \
- test-login-qt4-remote-session
+ test-login-qt4-remote-session \
+ test-qt4-power \
+ test-qt4-power-no-console-kit \
+ test-qt4-power-no-login1 \
+ test-qt4-power-no-console-kit-or-login1
endif
if COMPILE_LIBLIGHTDM_QT5
@@ -201,7 +213,11 @@ TESTS += \
test-login-qt5-guest-no-setup-script \
test-login-qt5-guest-fail-setup-script \
test-login-qt5-guest-logout \
- test-login-qt5-remote-session
+ test-login-qt5-remote-session \
+ test-qt4-power \
+ test-qt4-power-no-console-kit \
+ test-qt4-power-no-login1 \
+ test-qt4-power-no-console-kit-or-login1
endif
EXTRA_DIST = \
@@ -292,6 +308,10 @@ EXTRA_DIST = \
scripts/no-login1.conf \
scripts/open-file-descriptors.conf \
scripts/pam.conf \
+ scripts/power.conf \
+ scripts/power-no-console-kit.conf \
+ scripts/power-no-console-kit-or-login1.conf \
+ scripts/power-no-login1.conf \
scripts/plymouth-active-vt.conf \
scripts/plymouth-inactive-vt.conf \
scripts/plymouth-no-seat.conf \
diff --git a/tests/scripts/power-no-console-kit-or-login1.conf b/tests/scripts/power-no-console-kit-or-login1.conf
new file mode 100644
index 00000000..1458996d
--- /dev/null
+++ b/tests/scripts/power-no-console-kit-or-login1.conf
@@ -0,0 +1,49 @@
+#
+# Check can do power operations from the greeter when not ConsoleKit or login1 service (disallowed)
+#
+
+[test-runner-config]
+disable-console-kit=true
+disable-login1=true
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# See if can restart
+#?*GREETER :50 GET-CAN-RESTART
+#?GREETER :50 CAN-RESTART ALLOWED=FALSE
+
+# Restart
+#?*GREETER :50 RESTART
+#?GREETER :50 FAIL-RESTART
+
+# See if can shutdown
+#?*GREETER :50 GET-CAN-SHUTDOWN
+#?GREETER :50 CAN-SHUTDOWN ALLOWED=FALSE
+
+# Shutdown
+#?*GREETER :50 SHUTDOWN
+#?GREETER :50 FAIL-SHUTDOWN
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/power-no-console-kit.conf b/tests/scripts/power-no-console-kit.conf
new file mode 100644
index 00000000..de026b89
--- /dev/null
+++ b/tests/scripts/power-no-console-kit.conf
@@ -0,0 +1,50 @@
+#
+# Check can do power operations from the greeter when no ConsoleKit service
+#
+
+[test-runner-config]
+disable-console-kit=true
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# See if can restart
+#?*GREETER :50 GET-CAN-RESTART
+#?LOGIN1 CAN-REBOOT
+#?GREETER :50 CAN-RESTART ALLOWED=TRUE
+
+# Restart
+#?*GREETER :50 RESTART
+#?LOGIN1 REBOOT
+
+# See if can shutdown
+#?*GREETER :50 GET-CAN-SHUTDOWN
+#?LOGIN1 CAN-POWER-OFF
+#?GREETER :50 CAN-SHUTDOWN ALLOWED=TRUE
+
+# Shutdown
+#?*GREETER :50 SHUTDOWN
+#?LOGIN1 POWER-OFF
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/power-no-login1.conf b/tests/scripts/power-no-login1.conf
new file mode 100644
index 00000000..9a19fd47
--- /dev/null
+++ b/tests/scripts/power-no-login1.conf
@@ -0,0 +1,50 @@
+#
+# Check can do power operations from the greeter when no login1 service (falls back to ConsoleKit)
+#
+
+[test-runner-config]
+disable-login1=true
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# See if can restart
+#?*GREETER :50 GET-CAN-RESTART
+#?CONSOLE-KIT CAN-RESTART
+#?GREETER :50 CAN-RESTART ALLOWED=TRUE
+
+# Restart
+#?*GREETER :50 RESTART
+#?CONSOLE-KIT RESTART
+
+# See if can shutdown
+#?*GREETER :50 GET-CAN-SHUTDOWN
+#?CONSOLE-KIT CAN-STOP
+#?GREETER :50 CAN-SHUTDOWN ALLOWED=TRUE
+
+# Shutdown
+#?*GREETER :50 SHUTDOWN
+#?CONSOLE-KIT STOP
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/power.conf b/tests/scripts/power.conf
new file mode 100644
index 00000000..c67679e5
--- /dev/null
+++ b/tests/scripts/power.conf
@@ -0,0 +1,47 @@
+#
+# Check can do power operations from the greeter
+#
+
+[LightDM]
+minimum-display-number=50
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER :50 START
+#?XSERVER :50 INDICATE-READY
+
+# LightDM connects to X server
+#?XSERVER :50 ACCEPT-CONNECT
+
+# Greeter starts
+#?GREETER :50 START
+#?XSERVER :50 ACCEPT-CONNECT
+#?GREETER :50 CONNECT-XSERVER
+#?GREETER :50 CONNECT-TO-DAEMON
+#?GREETER :50 CONNECTED-TO-DAEMON
+
+# See if can restart
+#?*GREETER :50 GET-CAN-RESTART
+#?LOGIN1 CAN-REBOOT
+#?GREETER :50 CAN-RESTART ALLOWED=TRUE
+
+# Restart
+#?*GREETER :50 RESTART
+#?LOGIN1 REBOOT
+
+# See if can shutdown
+#?*GREETER :50 GET-CAN-SHUTDOWN
+#?LOGIN1 CAN-POWER-OFF
+#?GREETER :50 CAN-SHUTDOWN ALLOWED=TRUE
+
+# Shutdown
+#?*GREETER :50 SHUTDOWN
+#?LOGIN1 POWER-OFF
+
+# Cleanup
+#?*STOP-DAEMON
+# Don't know what order they will terminate
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?(GREETER :50 TERMINATE SIGNAL=15|XSERVER :50 TERMINATE SIGNAL=15)
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/src/test-gobject-greeter.c b/tests/src/test-gobject-greeter.c
index b80b705a..4e490cff 100644
--- a/tests/src/test-gobject-greeter.c
+++ b/tests/src/test-gobject-greeter.c
@@ -194,6 +194,42 @@ request_cb (const gchar *request)
status_notify ("GREETER %s LOG-LANGUAGE USERNAME=%s LANGUAGE=%s", getenv ("DISPLAY"), username, language ? language : "");
}
g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-RESTART", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_restart = lightdm_get_can_restart ();
+ status_notify ("GREETER %s CAN-RESTART ALLOWED=%s", getenv ("DISPLAY"), can_restart ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s RESTART", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ GError *error = NULL;
+ if (!lightdm_restart (&error))
+ status_notify ("GREETER %s FAIL-RESTART", getenv ("DISPLAY"));
+ g_clear_error (&error);
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-SHUTDOWN", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_shutdown = lightdm_get_can_shutdown ();
+ status_notify ("GREETER %s CAN-SHUTDOWN ALLOWED=%s", getenv ("DISPLAY"), can_shutdown ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s SHUTDOWN", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ GError *error = NULL;
+ if (!lightdm_shutdown (&error))
+ status_notify ("GREETER %s FAIL-SHUTDOWN", getenv ("DISPLAY"));
+ g_clear_error (&error);
+ }
+ g_free (r);
}
int
diff --git a/tests/src/test-python-greeter b/tests/src/test-python-greeter
index 91050f18..13d510fd 100755
--- a/tests/src/test-python-greeter
+++ b/tests/src/test-python-greeter
@@ -94,6 +94,36 @@ def request_cb (channel, condition):
language = ''
status_notify ('GREETER %s LOG-LANGUAGE USERNAME=%s LANGUAGE=%s' % (os.getenv ('DISPLAY'), username, language))
+ r = 'GREETER %s GET-CAN-RESTART' % os.getenv ('DISPLAY')
+ if request == r:
+ if LightDM.get_can_restart ():
+ allowed = "TRUE"
+ else:
+ allowed = "FALSE"
+ status_notify ('GREETER %s CAN-RESTART ALLOWED=%s' % (os.getenv ('DISPLAY'), allowed))
+
+ r = 'GREETER %s RESTART' % os.getenv ('DISPLAY')
+ if request == r:
+ try:
+ LightDM.restart ()
+ except:
+ status_notify ('GREETER %s FAIL-RESTART' % os.getenv ('DISPLAY'))
+
+ r = 'GREETER %s GET-CAN-SHUTDOWN' % os.getenv ('DISPLAY')
+ if request == r:
+ if LightDM.get_can_shutdown ():
+ allowed = "TRUE"
+ else:
+ allowed = "FALSE"
+ status_notify ('GREETER %s CAN-SHUTDOWN ALLOWED=%s' % (os.getenv ('DISPLAY'), allowed))
+
+ r = 'GREETER %s SHUTDOWN' % os.getenv ('DISPLAY')
+ if request == r:
+ try:
+ LightDM.shutdown ()
+ except:
+ status_notify ('GREETER %s FAIL-SHUTDOWN' % os.getenv ('DISPLAY'))
+
return True
path = os.getenv ('LIGHTDM_TEST_ROOT') + '/.status-socket'
diff --git a/tests/src/test-qt-greeter.cpp b/tests/src/test-qt-greeter.cpp
index 65926250..2bf64703 100644
--- a/tests/src/test-qt-greeter.cpp
+++ b/tests/src/test-qt-greeter.cpp
@@ -5,6 +5,7 @@
#include <glib-object.h>
#include <xcb/xcb.h>
#include <QLightDM/Greeter>
+#include <QLightDM/Power>
#include <QtCore/QSettings>
#include <QtCore/QDebug>
#include <QtCore/QCoreApplication>
@@ -14,6 +15,7 @@
static QCoreApplication *app = NULL;
static QSettings *config = NULL;
+static QLightDM::PowerInterface *power = NULL;
static TestGreeter *greeter = NULL;
TestGreeter::TestGreeter ()
@@ -122,6 +124,38 @@ request_cb (const gchar *request)
status_notify ("GREETER %s SESSION-FAILED", getenv ("DISPLAY"));
}
g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-RESTART", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_restart = power->canRestart ();
+ status_notify ("GREETER %s CAN-RESTART ALLOWED=%s", getenv ("DISPLAY"), can_restart ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s RESTART", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ if (!power->restart ())
+ status_notify ("GREETER %s FAIL-RESTART", getenv ("DISPLAY"));
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s GET-CAN-SHUTDOWN", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ gboolean can_shutdown = power->canShutdown ();
+ status_notify ("GREETER %s CAN-SHUTDOWN ALLOWED=%s", getenv ("DISPLAY"), can_shutdown ? "TRUE" : "FALSE");
+ }
+ g_free (r);
+
+ r = g_strdup_printf ("GREETER %s SHUTDOWN", getenv ("DISPLAY"));
+ if (strcmp (request, r) == 0)
+ {
+ if (!power->shutdown ())
+ status_notify ("GREETER %s FAIL-SHUTDOWN", getenv ("DISPLAY"));
+ }
+ g_free (r);
}
int
@@ -152,6 +186,8 @@ main(int argc, char *argv[])
status_notify ("GREETER %s CONNECT-XSERVER", getenv ("DISPLAY"));
+ power = new QLightDM::PowerInterface();
+
greeter = new TestGreeter();
status_notify ("GREETER %s CONNECT-TO-DAEMON", getenv ("DISPLAY"));
diff --git a/tests/src/test-runner.c b/tests/src/test-runner.c
index 813a3733..46253994 100644
--- a/tests/src/test-runner.c
+++ b/tests/src/test-runner.c
@@ -678,9 +678,15 @@ handle_ck_call (GDBusConnection *connection,
gpointer user_data)
{
if (strcmp (method_name, "CanRestart") == 0)
+ {
+ check_status ("CONSOLE-KIT CAN-RESTART");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", TRUE));
+ }
else if (strcmp (method_name, "CanStop") == 0)
+ {
+ check_status ("CONSOLE-KIT CAN-STOP");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", TRUE));
+ }
else if (strcmp (method_name, "CloseSession") == 0)
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", TRUE));
else if (strcmp (method_name, "OpenSession") == 0)
@@ -715,9 +721,15 @@ handle_ck_call (GDBusConnection *connection,
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Unable to find session for cookie");
}
else if (strcmp (method_name, "Restart") == 0)
+ {
+ check_status ("CONSOLE-KIT RESTART");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
+ }
else if (strcmp (method_name, "Stop") == 0)
+ {
+ check_status ("CONSOLE-KIT STOP");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
+ }
else
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "No such method: %s", method_name);
}
@@ -848,19 +860,27 @@ handle_login1_call (GDBusConnection *connection,
gpointer user_data)
{
if (strcmp (method_name, "CanReboot") == 0)
+ {
+ check_status ("LOGIN1 CAN-REBOOT");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(s)", "yes"));
+ }
else if (strcmp (method_name, "Reboot") == 0)
{
gboolean interactive;
g_variant_get (parameters, "(b)", &interactive);
+ check_status ("LOGIN1 REBOOT");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
}
- if (strcmp (method_name, "CanPowerOff") == 0)
+ else if (strcmp (method_name, "CanPowerOff") == 0)
+ {
+ check_status ("LOGIN1 CAN-POWER-OFF");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(s)", "yes"));
+ }
else if (strcmp (method_name, "PowerOff") == 0)
{
gboolean interactive;
g_variant_get (parameters, "(b)", &interactive);
+ check_status ("LOGIN1 POWER-OFF");
g_dbus_method_invocation_return_value (invocation, g_variant_new ("()"));
}
else
diff --git a/tests/test-gobject-power b/tests/test-gobject-power
new file mode 100755
index 00000000..da2743af
--- /dev/null
+++ b/tests/test-gobject-power
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power test-gobject-greeter
diff --git a/tests/test-gobject-power-no-console-kit b/tests/test-gobject-power-no-console-kit
new file mode 100755
index 00000000..3bd175c3
--- /dev/null
+++ b/tests/test-gobject-power-no-console-kit
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit test-gobject-greeter
diff --git a/tests/test-gobject-power-no-console-kit-or-login1 b/tests/test-gobject-power-no-console-kit-or-login1
new file mode 100755
index 00000000..11abed18
--- /dev/null
+++ b/tests/test-gobject-power-no-console-kit-or-login1
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit-or-login1 test-gobject-greeter
diff --git a/tests/test-gobject-power-no-login1 b/tests/test-gobject-power-no-login1
new file mode 100755
index 00000000..c59b8886
--- /dev/null
+++ b/tests/test-gobject-power-no-login1
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-login1 test-gobject-greeter
diff --git a/tests/test-python-power b/tests/test-python-power
new file mode 100755
index 00000000..8cc7ec48
--- /dev/null
+++ b/tests/test-python-power
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power test-python-greeter
diff --git a/tests/test-python-power-no-console-kit b/tests/test-python-power-no-console-kit
new file mode 100755
index 00000000..71361084
--- /dev/null
+++ b/tests/test-python-power-no-console-kit
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit test-python-greeter
diff --git a/tests/test-python-power-no-console-kit-or-login1 b/tests/test-python-power-no-console-kit-or-login1
new file mode 100755
index 00000000..ecc5a3f5
--- /dev/null
+++ b/tests/test-python-power-no-console-kit-or-login1
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit-or-login1 test-python-greeter
diff --git a/tests/test-python-power-no-login1 b/tests/test-python-power-no-login1
new file mode 100755
index 00000000..526abc22
--- /dev/null
+++ b/tests/test-python-power-no-login1
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-login1 test-python-greeter
diff --git a/tests/test-qt4-power b/tests/test-qt4-power
new file mode 100755
index 00000000..11d7cb2b
--- /dev/null
+++ b/tests/test-qt4-power
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power test-qt4-greeter
diff --git a/tests/test-qt4-power-no-console-kit b/tests/test-qt4-power-no-console-kit
new file mode 100755
index 00000000..91df1a1c
--- /dev/null
+++ b/tests/test-qt4-power-no-console-kit
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit test-qt4-greeter
diff --git a/tests/test-qt4-power-no-console-kit-or-login1 b/tests/test-qt4-power-no-console-kit-or-login1
new file mode 100755
index 00000000..577ce861
--- /dev/null
+++ b/tests/test-qt4-power-no-console-kit-or-login1
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit-or-login1 test-qt4-greeter
diff --git a/tests/test-qt4-power-no-login1 b/tests/test-qt4-power-no-login1
new file mode 100755
index 00000000..929176f5
--- /dev/null
+++ b/tests/test-qt4-power-no-login1
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-login1 test-qt4-greeter
diff --git a/tests/test-qt5-power b/tests/test-qt5-power
new file mode 100755
index 00000000..de0f4f0a
--- /dev/null
+++ b/tests/test-qt5-power
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power test-qt5-greeter
diff --git a/tests/test-qt5-power-no-console-kit b/tests/test-qt5-power-no-console-kit
new file mode 100755
index 00000000..f8d2718f
--- /dev/null
+++ b/tests/test-qt5-power-no-console-kit
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit test-qt5-greeter
diff --git a/tests/test-qt5-power-no-console-kit-or-login1 b/tests/test-qt5-power-no-console-kit-or-login1
new file mode 100755
index 00000000..96588575
--- /dev/null
+++ b/tests/test-qt5-power-no-console-kit-or-login1
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-console-kit-or-login1 test-qt5-greeter
diff --git a/tests/test-qt5-power-no-login1 b/tests/test-qt5-power-no-login1
new file mode 100755
index 00000000..6fe86895
--- /dev/null
+++ b/tests/test-qt5-power-no-login1
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner power-no-login1 test-qt5-greeter