diff options
author | Michael Terry <michael.terry@canonical.com> | 2012-04-24 12:36:19 -0400 |
---|---|---|
committer | Michael Terry <michael.terry@canonical.com> | 2012-04-24 12:36:19 -0400 |
commit | 107fe7e52743d11d41e6f82591682106e5fe5fba (patch) | |
tree | d37c09cee8cdb169dc7a8bb5734b463d0dcc81ac /tests | |
parent | 47026f9ee94f8644cf8cc8b6f1b0d753a1812e06 (diff) | |
download | lightdm-107fe7e52743d11d41e6f82591682106e5fe5fba.tar.gz |
add tests for multi-prompt
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/scripts/login-multi-prompt.conf | 38 | ||||
-rw-r--r-- | tests/src/libsystem.c | 11 | ||||
-rw-r--r-- | tests/src/test-gobject-greeter.c | 10 | ||||
-rw-r--r-- | tests/src/test-runner.c | 2 | ||||
-rwxr-xr-x | tests/test-login-gobject-multi-prompt | 2 |
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 |