]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blob - tests/src/test-gobject-greeter.c
Refactor tests
[sojka/lightdm.git] / tests / src / test-gobject-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 xcb_connection_t *connection = NULL;
14 static GKeyFile *config;
15
16 static void
17 show_message_cb (LightDMGreeter *greeter, const gchar *text, LightDMMessageType type)
18 {
19     status_notify ("%s SHOW-MESSAGE TEXT=\"%s\"", greeter_id, text);
20 }
21
22 static void
23 show_prompt_cb (LightDMGreeter *greeter, const gchar *text, LightDMPromptType type)
24 {
25     status_notify ("%s SHOW-PROMPT TEXT=\"%s\"", greeter_id, text);
26 }
27
28 static void
29 authentication_complete_cb (LightDMGreeter *greeter)
30 {
31     if (lightdm_greeter_get_authentication_user (greeter))
32         status_notify ("%s AUTHENTICATION-COMPLETE USERNAME=%s AUTHENTICATED=%s",
33                        greeter_id,
34                        lightdm_greeter_get_authentication_user (greeter),
35                        lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
36     else
37         status_notify ("%s AUTHENTICATION-COMPLETE AUTHENTICATED=%s",
38                        greeter_id,
39                        lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
40 }
41
42 static void
43 autologin_timer_expired_cb (LightDMGreeter *greeter)
44 {
45     status_notify ("%s AUTOLOGIN-TIMER-EXPIRED", greeter_id);
46 }
47
48 static void
49 signal_cb (int signum)
50 {
51     status_notify ("%s TERMINATE SIGNAL=%d", greeter_id, signum);
52     exit (EXIT_SUCCESS);
53 }
54
55 static void
56 request_cb (const gchar *request)
57 {
58     gchar *r;
59
60     if (!request)
61     {
62         g_main_loop_quit (loop);
63         return;
64     }
65   
66     r = g_strdup_printf ("%s AUTHENTICATE", greeter_id);
67     if (strcmp (request, r) == 0)
68         lightdm_greeter_authenticate (greeter, NULL);
69     g_free (r);
70
71     r = g_strdup_printf ("%s AUTHENTICATE USERNAME=", greeter_id);
72     if (g_str_has_prefix (request, r))
73         lightdm_greeter_authenticate (greeter, request + strlen (r));
74     g_free (r);
75
76     r = g_strdup_printf ("%s AUTHENTICATE-GUEST", greeter_id);
77     if (strcmp (request, r) == 0)
78         lightdm_greeter_authenticate_as_guest (greeter);
79     g_free (r);
80
81     r = g_strdup_printf ("%s AUTHENTICATE-AUTOLOGIN", greeter_id);
82     if (strcmp (request, r) == 0)
83         lightdm_greeter_authenticate_autologin (greeter);
84     g_free (r);
85
86     r = g_strdup_printf ("%s AUTHENTICATE-REMOTE SESSION=", greeter_id);
87     if (g_str_has_prefix (request, r))
88         lightdm_greeter_authenticate_remote (greeter, request + strlen (r), NULL);
89     g_free (r);
90
91     r = g_strdup_printf ("%s RESPOND TEXT=\"", greeter_id);
92     if (g_str_has_prefix (request, r))
93     {
94         gchar *text = g_strdup (request + strlen (r));
95         text[strlen (text) - 1] = '\0';
96         lightdm_greeter_respond (greeter, text);
97         g_free (text);
98     }
99     g_free (r);
100
101     r = g_strdup_printf ("%s START-SESSION", greeter_id);
102     if (strcmp (request, r) == 0)
103     {
104         if (!lightdm_greeter_start_session_sync (greeter, NULL, NULL))
105             status_notify ("%s SESSION-FAILED", greeter_id); 
106     }
107     g_free (r);
108
109     r = g_strdup_printf ("%s START-SESSION SESSION=", greeter_id);
110     if (g_str_has_prefix (request, r))
111     {
112         if (!lightdm_greeter_start_session_sync (greeter, request + strlen (r), NULL))
113             status_notify ("%s SESSION-FAILED", greeter_id); 
114     }
115     g_free (r);
116
117     r = g_strdup_printf ("%s LOG-LAYOUT", greeter_id);
118     if (strcmp (request, r) == 0)
119     {
120         const gchar *layout;
121         layout = lightdm_layout_get_name (lightdm_get_layout ());
122         status_notify ("%s LOG-LAYOUT LAYOUT='%s'", greeter_id, layout ? layout : "");
123     }
124
125     r = g_strdup_printf ("%s LOG-LAYOUT USERNAME=", greeter_id);
126     if (g_str_has_prefix (request, r))
127     {
128         LightDMUser *user;
129         const gchar *username, *layout;
130
131         username = request + strlen (r);
132         user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
133         layout = lightdm_user_get_layout (user);
134
135         status_notify ("%s LOG-LAYOUT USERNAME=%s LAYOUT='%s'", greeter_id, username, layout ? layout : "");
136     }
137     g_free (r);
138
139     r = g_strdup_printf ("%s LOG-LAYOUTS USERNAME=", greeter_id);
140     if (g_str_has_prefix (request, r))
141     {
142         LightDMUser *user;
143         const gchar *username;
144         const gchar * const *layouts;
145         int i;
146
147         username = request + strlen (r);
148         user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
149         layouts = lightdm_user_get_layouts (user);
150
151         for (i = 0; layouts[i]; i++)
152             status_notify ("%s LOG-LAYOUTS USERNAME=%s LAYOUT='%s'", greeter_id, username, layouts[i]);
153     }
154     g_free (r);
155
156     r = g_strdup_printf ("%s LOG-VARIANTS LAYOUT=", greeter_id);
157     if (g_str_has_prefix (request, r))
158     {
159         GList *layouts, *iter;
160         const gchar *layout_prefix;
161
162         layout_prefix = request + strlen (r);
163         layouts = lightdm_get_layouts ();
164
165         for (iter = layouts; iter; iter = iter->next)
166         {
167             LightDMLayout *layout;
168             const gchar *name;
169
170             layout = (LightDMLayout *) iter->data;
171             name = lightdm_layout_get_name (layout);
172
173             if (g_str_has_prefix (name, layout_prefix))
174                 status_notify ("%s LOG-VARIANTS LAYOUT='%s'", greeter_id, name);
175         }
176     }
177     g_free (r);
178
179     r = g_strdup_printf ("%s LOG-LANGUAGE USERNAME=", greeter_id);  
180     if (g_str_has_prefix (request, r))
181     {
182         LightDMUser *user;
183         const gchar *username, *language;
184
185         username = request + strlen (r);
186         user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
187         language = lightdm_user_get_language (user);
188
189         status_notify ("%s LOG-LANGUAGE USERNAME=%s LANGUAGE=%s", greeter_id, username, language ? language : "");
190     }
191     g_free (r);
192 }
193
194 int
195 main (int argc, char **argv)
196 {
197     gchar *display;
198
199     signal (SIGINT, signal_cb);
200     signal (SIGTERM, signal_cb);
201
202 #if !defined(GLIB_VERSION_2_36)
203     g_type_init ();
204 #endif
205
206     display = getenv ("DISPLAY");
207     if (display == NULL)
208         greeter_id = g_strdup ("GREETER-?");
209     else if (display[0] == ':')
210         greeter_id = g_strdup_printf ("GREETER-X-%s", display + 1);
211     else
212         greeter_id = g_strdup_printf ("GREETER-X-%s", display);
213
214     loop = g_main_loop_new (NULL, FALSE);
215
216     status_connect (request_cb);
217
218     status_notify ("%s START", greeter_id);
219
220     config = g_key_file_new ();
221     g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL);
222
223     if (g_key_file_has_key (config, "test-greeter-config", "return-value", NULL))
224     {
225         int return_value = g_key_file_get_integer (config, "test-greeter-config", "return-value", NULL);
226         status_notify ("%s EXIT CODE=%d", greeter_id, return_value);
227         return return_value;
228     }
229
230     connection = xcb_connect (NULL, NULL);
231
232     if (xcb_connection_has_error (connection))
233     {
234         status_notify ("%s FAIL-CONNECT-XSERVER", greeter_id);
235         return EXIT_FAILURE;
236     }
237
238     status_notify ("%s CONNECT-XSERVER", greeter_id);
239
240     greeter = lightdm_greeter_new ();
241     g_signal_connect (greeter, "show-message", G_CALLBACK (show_message_cb), NULL);
242     g_signal_connect (greeter, "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
243     g_signal_connect (greeter, "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
244     g_signal_connect (greeter, "autologin-timer-expired", G_CALLBACK (autologin_timer_expired_cb), NULL);
245
246     status_notify ("%s CONNECT-TO-DAEMON", greeter_id);
247     if (!lightdm_greeter_connect_sync (greeter, NULL))
248     {
249         status_notify ("%s FAIL-CONNECT-DAEMON", greeter_id);
250         return EXIT_FAILURE;
251     }
252
253     status_notify ("%s CONNECTED-TO-DAEMON", greeter_id);
254
255     if (lightdm_greeter_get_select_user_hint (greeter))
256         status_notify ("%s SELECT-USER-HINT USERNAME=%s", greeter_id, lightdm_greeter_get_select_user_hint (greeter));
257     if (lightdm_greeter_get_lock_hint (greeter))
258         status_notify ("%s LOCK-HINT", greeter_id);
259
260     g_main_loop_run (loop);
261
262     return EXIT_SUCCESS;
263 }