]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blob - tests/src/unity-system-compositor.c
Add a regression test for Unity seat type
[sojka/lightdm.git] / tests / src / unity-system-compositor.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <errno.h>
5
6 #include "status.h"
7
8 static GMainLoop *loop;
9 static int exit_status = EXIT_SUCCESS;
10 static int from_dm_fd, to_dm_fd;
11
12 static void
13 quit (int status)
14 {
15     exit_status = status;
16     g_main_loop_quit (loop);
17 }
18
19 static void
20 signal_cb (int signum)
21 {
22     status_notify ("UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=%d", signum);
23     quit (EXIT_SUCCESS);
24 }
25
26 static void
27 request_cb (const gchar *request)
28 {
29     if (!request)
30     {
31         g_main_loop_quit (loop);
32         return;
33     }
34 }
35
36 typedef enum
37 {
38    USC_MESSAGE_PING = 0,
39    USC_MESSAGE_PONG = 1,
40    USC_MESSAGE_READY = 2,
41    USC_MESSAGE_SESSION_CONNECTED = 3,
42    USC_MESSAGE_SET_ACTIVE_SESSION = 4
43 } USCMessageID;
44
45 static void
46 write_message (guint16 id, const guint8 *payload, guint16 payload_length)
47 {
48     guint8 *data;
49     gsize data_length = 4 + payload_length;
50
51     data = g_malloc (data_length);
52     data[0] = id >> 8;
53     data[1] = id & 0xFF;
54     data[2] = payload_length >> 8;
55     data[3] = payload_length & 0xFF;
56     memcpy (data + 4, payload, payload_length);
57
58     if (write (to_dm_fd, data, data_length) < 0)
59         fprintf (stderr, "Failed to write to daemon: %s\n", strerror (errno));
60 }
61
62 int
63 main (int argc, char **argv)
64 {
65     signal (SIGINT, signal_cb);
66     signal (SIGTERM, signal_cb);
67     signal (SIGHUP, signal_cb);
68
69 #if !defined(GLIB_VERSION_2_36)
70     g_type_init ();
71 #endif
72
73     loop = g_main_loop_new (NULL, FALSE);
74
75     status_connect (request_cb);
76
77     if (argc != 3)
78         return EXIT_FAILURE;
79     from_dm_fd = atoi (argv[1]);
80     to_dm_fd = atoi (argv[2]);
81
82     status_notify ("UNITY-SYSTEM-COMPOSITOR START");
83
84     write_message (USC_MESSAGE_READY, NULL, 0);
85
86     g_main_loop_run (loop);
87
88     return exit_status;
89 }