summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMichael Terry <michael.terry@canonical.com>2012-04-24 12:36:19 -0400
committerMichael Terry <michael.terry@canonical.com>2012-04-24 12:36:19 -0400
commit107fe7e52743d11d41e6f82591682106e5fe5fba (patch)
treed37c09cee8cdb169dc7a8bb5734b463d0dcc81ac /tests
parent47026f9ee94f8644cf8cc8b6f1b0d753a1812e06 (diff)
downloadlightdm-107fe7e52743d11d41e6f82591682106e5fe5fba.tar.gz
add tests for multi-prompt
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am2
-rw-r--r--tests/scripts/login-multi-prompt.conf38
-rw-r--r--tests/src/libsystem.c11
-rw-r--r--tests/src/test-gobject-greeter.c10
-rw-r--r--tests/src/test-runner.c2
-rwxr-xr-xtests/test-login-gobject-multi-prompt2
6 files changed, 63 insertions, 2 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d036b0b1..5fc98365 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -56,6 +56,7 @@ TESTS = \
test-login-gobject-new-authtok \
test-login-gobject-info-prompt \
test-login-gobject-multi-info-prompt \
+ test-login-gobject-multi-prompt \
test-login-gobject-pick-session \
test-login-gobject-previous-session \
test-login-gobject-wrong-password \
@@ -204,6 +205,7 @@ EXTRA_DIST = \
scripts/login-manual.conf \
scripts/login-manual-previous-session.conf \
scripts/login-multi-info-prompt.conf \
+ scripts/login-multi-prompt.conf \
scripts/login-new-authtok.conf \
scripts/login-no-password.conf \
scripts/login-pam.conf \
diff --git a/tests/scripts/login-multi-prompt.conf b/tests/scripts/login-multi-prompt.conf
new file mode 100644
index 00000000..1da571bb
--- /dev/null
+++ b/tests/scripts/login-multi-prompt.conf
@@ -0,0 +1,38 @@
+#
+# Check multiple PAM informational messages on login are passed to a 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
+
+# Log into account and see an informational prompt
+#?*GREETER :50 AUTHENTICATE USERNAME=multi-prompt
+#?GREETER :50 SHOW-PROMPT TEXT="Favorite Color:"
+#?GREETER :50 SHOW-PROMPT TEXT="Password:"
+
+# Respond with password and check response is correctly handled
+#?*GREETER :50 RESPOND TEXT="blue\npassword"
+#?GREETER :50 AUTHENTICATION-COMPLETE USERNAME=multi-prompt AUTHENTICATED=TRUE
+
+# 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/libsystem.c b/tests/src/libsystem.c
index 9a8b6de7..eb1ebc7f 100644
--- a/tests/src/libsystem.c
+++ b/tests/src/libsystem.c
@@ -547,6 +547,13 @@ pam_authenticate (pam_handle_t *pamh, int flags)
msg[n_messages]->msg = "You should have seen three messages";
n_messages++;
}
+ if (strcmp (pamh->user, "multi-prompt") == 0)
+ {
+ msg[n_messages] = malloc (sizeof (struct pam_message));
+ msg[n_messages]->msg_style = PAM_PROMPT_ECHO_ON;
+ msg[n_messages]->msg = "Favorite Color:";
+ n_messages++;
+ }
msg[n_messages] = malloc (sizeof (struct pam_message));
msg[n_messages]->msg_style = PAM_PROMPT_ECHO_OFF;
msg[n_messages]->msg = "Password:";
@@ -569,6 +576,10 @@ pam_authenticate (pam_handle_t *pamh, int flags)
if (entry)
password_matches = strcmp (entry->pw_passwd, resp[password_index].resp) == 0;
+
+ if (password_matches && strcmp (pamh->user, "multi-prompt") == 0)
+ password_matches = strcmp ("blue", resp[0].resp) == 0;
+
for (i = 0; i < n_messages; i++)
{
if (resp[i].resp)
diff --git a/tests/src/test-gobject-greeter.c b/tests/src/test-gobject-greeter.c
index f5057cfb..8b3bf08f 100644
--- a/tests/src/test-gobject-greeter.c
+++ b/tests/src/test-gobject-greeter.c
@@ -68,9 +68,15 @@ request_cb (const gchar *request)
r = g_strdup_printf ("GREETER %s RESPOND TEXT=\"", getenv ("DISPLAY"));
if (g_str_has_prefix (request, r))
{
- gchar *text = g_strdup (request + strlen (r));
+ gchar *text, *compressed;
+
+ text = g_strdup (request + strlen (r));
text[strlen (text) - 1] = '\0';
- lightdm_greeter_respond (greeter, text);
+ compressed = g_strcompress (text);
+
+ lightdm_greeter_respond (greeter, compressed);
+
+ g_free (compressed);
g_free (text);
}
g_free (r);
diff --git a/tests/src/test-runner.c b/tests/src/test-runner.c
index 687785bd..e5520cdb 100644
--- a/tests/src/test-runner.c
+++ b/tests/src/test-runner.c
@@ -1392,6 +1392,8 @@ main (int argc, char **argv)
{"cred-unavail", "password", TRUE, "Cred Unavail", NULL, NULL, NULL, NULL, 1029},
/* This account sends informational messages for each PAM function that is called */
{"log-pam", "password", TRUE, "Log PAM", NULL, NULL, NULL, NULL, 1030},
+ /* This account shows multiple prompts on login */
+ {"multi-prompt", "password", TRUE, "Multi Prompt", NULL, NULL, NULL, NULL, 1031},
{NULL, NULL, FALSE, NULL, NULL, NULL, NULL, NULL, 0}
};
passwd_data = g_string_new ("");
diff --git a/tests/test-login-gobject-multi-prompt b/tests/test-login-gobject-multi-prompt
new file mode 100755
index 00000000..7f4f52e8
--- /dev/null
+++ b/tests/test-login-gobject-multi-prompt
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner login-multi-prompt test-gobject-greeter