summaryrefslogtreecommitdiff
path: root/tests/src/unity-system-compositor.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/unity-system-compositor.c')
-rw-r--r--tests/src/unity-system-compositor.c215
1 files changed, 0 insertions, 215 deletions
diff --git a/tests/src/unity-system-compositor.c b/tests/src/unity-system-compositor.c
deleted file mode 100644
index 2d7bb3e6..00000000
--- a/tests/src/unity-system-compositor.c
+++ /dev/null
@@ -1,215 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <glib-unix.h>
-
-#include "status.h"
-
-static GMainLoop *loop;
-static int exit_status = EXIT_SUCCESS;
-static int from_dm_fd = -1, to_dm_fd = -1;
-
-static GKeyFile *config;
-
-static void
-quit (int status)
-{
- exit_status = status;
- g_main_loop_quit (loop);
-}
-
-static gboolean
-sigint_cb (gpointer user_data)
-{
- status_notify ("UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=%d", SIGINT);
- quit (EXIT_SUCCESS);
- return TRUE;
-}
-
-static gboolean
-sigterm_cb (gpointer user_data)
-{
- status_notify ("UNITY-SYSTEM-COMPOSITOR TERMINATE SIGNAL=%d", SIGTERM);
- quit (EXIT_SUCCESS);
- return TRUE;
-}
-
-typedef enum
-{
- USC_MESSAGE_PING = 0,
- USC_MESSAGE_PONG = 1,
- USC_MESSAGE_READY = 2,
- USC_MESSAGE_SESSION_CONNECTED = 3,
- USC_MESSAGE_SET_ACTIVE_SESSION = 4,
- USC_MESSAGE_SET_NEXT_SESSION = 5,
-} USCMessageID;
-
-static void
-write_message (guint16 id, const guint8 *payload, guint16 payload_length)
-{
- gsize data_length = 4 + payload_length;
- guint8 *data = g_malloc (data_length);
- data[0] = id >> 8;
- data[1] = id & 0xFF;
- data[2] = payload_length >> 8;
- data[3] = payload_length & 0xFF;
- if (payload)
- memcpy (data + 4, payload, payload_length);
-
- if (write (to_dm_fd, data, data_length) < 0)
- fprintf (stderr, "Failed to write to daemon: %s\n", strerror (errno));
-}
-
-static gboolean
-read_message_cb (GIOChannel *channel, GIOCondition condition, gpointer data)
-{
- gchar header[4];
- gsize n_read;
- g_autoptr(GError) error = NULL;
- if (g_io_channel_read_chars (channel, header, 4, &n_read, &error) != G_IO_STATUS_NORMAL)
- {
- g_printerr ("Failed to read header: %s\n", error->message);
- return FALSE;
- }
- if (n_read != 4)
- {
- g_printerr ("Short read for header, %zi instead of expected 4\n", n_read);
- return FALSE;
- }
- guint16 id = header[0] << 8 | header[1];
- guint16 payload_length = header[2] << 8 | header[3];
- gchar *payload = g_malloc0 (payload_length + 1);
- if (g_io_channel_read_chars (channel, payload, payload_length, &n_read, &error) != G_IO_STATUS_NORMAL)
- {
- g_printerr ("Failed to read payload: %s\n", error->message);
- return FALSE;
- }
- if (n_read != payload_length)
- {
- g_printerr ("Short read for payload, %zi instead of expected %d\n", n_read, payload_length);
- return FALSE;
- }
-
- switch (id)
- {
- case USC_MESSAGE_PING:
- status_notify ("UNITY-SYSTEM-COMPOSITOR PING");
- break;
- case USC_MESSAGE_SET_ACTIVE_SESSION:
- status_notify ("UNITY-SYSTEM-COMPOSITOR SET-ACTIVE-SESSION ID=%s", (gchar *)payload);
- break;
- case USC_MESSAGE_SET_NEXT_SESSION:
- status_notify ("UNITY-SYSTEM-COMPOSITOR SET-NEXT-SESSION ID=%s", (gchar *)payload);
- break;
- default:
- g_printerr ("Ignoring message %d with %d octets\n", id, payload_length);
- break;
- }
-
- free (payload);
-
- return TRUE;
-}
-
-static void
-request_cb (const gchar *name, GHashTable *params)
-{
- if (!name)
- {
- g_main_loop_quit (loop);
- return;
- }
-
- if (strcmp (name, "PING") == 0)
- write_message (USC_MESSAGE_PING, NULL, 0);
-
- else if (strcmp (name, "PONG") == 0)
- write_message (USC_MESSAGE_PONG, NULL, 0);
-
- else if (strcmp (name, "READY") == 0)
- write_message (USC_MESSAGE_READY, NULL, 0);
-
- else if (strcmp (name, "CRASH") == 0)
- kill (getpid (), SIGSEGV);
-}
-
-int
-main (int argc, char **argv)
-{
-#if !defined(GLIB_VERSION_2_36)
- g_type_init ();
-#endif
-
- loop = g_main_loop_new (NULL, FALSE);
-
- g_unix_signal_add (SIGINT, sigint_cb, NULL);
- g_unix_signal_add (SIGTERM, sigterm_cb, NULL);
-
- status_connect (request_cb, "UNITY-SYSTEM-COMPOSITOR");
-
- gboolean test = FALSE, container = FALSE;
- int vt_number = -1;
- const gchar *file = NULL;
- for (int i = 1; i < argc; i++)
- {
- char *arg = argv[i];
-
- if (strcmp (arg, "--from-dm-fd") == 0)
- {
- from_dm_fd = atoi (argv[i+1]);
- i++;
- }
- else if (strcmp (arg, "--to-dm-fd") == 0)
- {
- to_dm_fd = atoi (argv[i+1]);
- i++;
- }
- else if (strcmp (arg, "--vt") == 0)
- {
- vt_number = atoi (argv[i+1]);
- i++;
- }
- else if (strcmp (arg, "--file") == 0)
- {
- file = argv[i+1];
- i++;
- }
- else if (strcmp (arg, "--test") == 0)
- test = TRUE;
- else if (strcmp (arg, "--container") == 0)
- container = TRUE;
- else
- return EXIT_FAILURE;
- }
-
- g_io_add_watch (g_io_channel_unix_new (from_dm_fd), G_IO_IN, read_message_cb, NULL);
-
- g_autoptr(GString) status_text = g_string_new ("UNITY-SYSTEM-COMPOSITOR START");
- if (file)
- g_string_append_printf (status_text, " FILE=%s", file);
- if (vt_number >= 0)
- g_string_append_printf (status_text, " VT=%d", vt_number);
- if (g_getenv ("XDG_VTNR"))
- g_string_append_printf (status_text, " XDG_VTNR=%s", g_getenv ("XDG_VTNR"));
- if (test)
- g_string_append (status_text, " TEST=TRUE");
- if (container)
- g_string_append (status_text, " CONTAINER=TRUE");
- status_notify ("%s", status_text->str);
-
- config = g_key_file_new ();
- g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL);
-
- if (g_key_file_has_key (config, "unity-system-compositor-config", "return-value", NULL))
- {
- int return_value = g_key_file_get_integer (config, "unity-system-compositor-config", "return-value", NULL);
- status_notify ("UNITY-SYSTEM-COMPOSITOR EXIT CODE=%d", return_value);
- return return_value;
- }
-
- g_main_loop_run (loop);
-
- return exit_status;
-}