]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blob - tests/src/test-mir-greeter.c
Rename lightdm_greeter_connect to lightdm_greeter_connect_to_daemon as it conflicts...
[sojka/lightdm.git] / tests / src / test-mir-greeter.c
1 /* -*- Mode: C; indent-tabs-mode: nil; tab-width: 4 -*- */
2
3 #include <stdlib.h>
4 #include <stdio.h>
5 #include <string.h>
6 #include <lightdm.h>
7
8 #include "status.h"
9
10 static gchar *greeter_id;
11 static GMainLoop *loop;
12 static LightDMGreeter *greeter;
13 static GKeyFile *config;
14
15 static void
16 show_message_cb (LightDMGreeter *greeter, const gchar *text, LightDMMessageType type)
17 {
18     status_notify ("%s SHOW-MESSAGE TEXT=\"%s\"", greeter_id, text);
19 }
20
21 static void
22 show_prompt_cb (LightDMGreeter *greeter, const gchar *text, LightDMPromptType type)
23 {
24     status_notify ("%s SHOW-PROMPT TEXT=\"%s\"", greeter_id, text);
25 }
26
27 static void
28 authentication_complete_cb (LightDMGreeter *greeter)
29 {
30     if (lightdm_greeter_get_authentication_user (greeter))
31         status_notify ("%s AUTHENTICATION-COMPLETE USERNAME=%s AUTHENTICATED=%s",
32                        greeter_id,
33                        lightdm_greeter_get_authentication_user (greeter),
34                        lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
35     else
36         status_notify ("%s AUTHENTICATION-COMPLETE AUTHENTICATED=%s",
37                        greeter_id,
38                        lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
39 }
40
41 static void
42 signal_cb (int signum)
43 {
44     status_notify ("%s TERMINATE SIGNAL=%d", greeter_id, signum);
45     exit (EXIT_SUCCESS);
46 }
47
48 static void
49 request_cb (const gchar *name, GHashTable *params)
50 {
51     if (!name)
52     {
53         g_main_loop_quit (loop);
54         return;
55     }
56   
57     if (strcmp (name, "AUTHENTICATE") == 0)
58         lightdm_greeter_authenticate (greeter, g_hash_table_lookup (params, "USERNAME"));
59
60     if (strcmp (name, "RESPOND") == 0)
61     {
62         gchar *text = g_strdup (g_hash_table_lookup (params, "TEXT"));
63         text[strlen (text) - 1] = '\0';
64         lightdm_greeter_respond (greeter, text);
65         g_free (text);
66     }
67
68     if (strcmp (name, "CANCEL-AUTHENTICATION") == 0)
69         lightdm_greeter_cancel_authentication (greeter);
70
71     if (strcmp (name, "START-SESSION") == 0)
72     {
73         if (!lightdm_greeter_start_session_sync (greeter, g_hash_table_lookup (params, "SESSION"), NULL))
74             status_notify ("%s SESSION-FAILED", greeter_id); 
75     }
76 }
77
78 int
79 main (int argc, char **argv)
80 {
81     signal (SIGINT, signal_cb);
82     signal (SIGTERM, signal_cb);
83
84 #if !defined(GLIB_VERSION_2_36)
85     g_type_init ();
86 #endif
87
88     greeter_id = g_strdup ("GREETER-MIR");
89
90     loop = g_main_loop_new (NULL, FALSE);
91
92     status_connect (request_cb, greeter_id);
93
94     status_notify ("%s START", greeter_id);
95
96     config = g_key_file_new ();
97     g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL);
98
99     if (g_key_file_has_key (config, "test-greeter-config", "return-value", NULL))
100     {
101         int return_value = g_key_file_get_integer (config, "test-greeter-config", "return-value", NULL);
102         status_notify ("%s EXIT CODE=%d", greeter_id, return_value);
103         return return_value;
104     }
105
106     greeter = lightdm_greeter_new ();
107     g_signal_connect (greeter, "show-message", G_CALLBACK (show_message_cb), NULL);
108     g_signal_connect (greeter, "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
109     g_signal_connect (greeter, "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
110
111     status_notify ("%s CONNECT-TO-DAEMON", greeter_id);
112     if (!lightdm_greeter_connect_to_daemon_sync (greeter, NULL))
113     {
114         status_notify ("%s FAIL-CONNECT-DAEMON", greeter_id);
115         return EXIT_FAILURE;
116     }
117
118     status_notify ("%s CONNECTED-TO-DAEMON", greeter_id);
119
120     g_main_loop_run (loop);
121
122     return EXIT_SUCCESS;
123 }