]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: add test for org.freedesktop.login1.Session SetDisplay 23882/head
authorDavid Tardon <dtardon@redhat.com>
Fri, 1 Jul 2022 14:43:34 +0000 (16:43 +0200)
committerDavid Tardon <dtardon@redhat.com>
Wed, 13 Jul 2022 11:53:13 +0000 (13:53 +0200)
src/login/test-session-properties.c

index 8406147a2c8d62f86e292547e672da0f8914b1fd..44d54811c3e75e78cc8e784608370a2e9d3c948f 100644 (file)
@@ -55,6 +55,45 @@ TEST(set_type) {
         assert_se(streq(type, "tty"));
 }
 
+/* Tests org.freedesktop.logind.Session SetDisplay */
+TEST(set_display) {
+        _cleanup_(sd_bus_flush_close_unrefp) sd_bus* bus = NULL;
+        _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+        _cleanup_free_ char *display = NULL;
+
+        assert_se(sd_bus_open_system(&bus) >= 0);
+
+        /* Display is unset by default */
+        assert_se(bus_get_property_string(bus, &session, "Display", NULL, &display) >= 0);
+        assert_se(isempty(display));
+
+        /* Display can only be set by the session controller (which we're not ATM) */
+        assert_se(bus_call_method(bus, &session, "SetDisplay", &error, NULL, "s", ":0") < 0);
+        assert_se(sd_bus_error_has_name(&error, BUS_ERROR_NOT_IN_CONTROL));
+
+        assert_se(bus_call_method(bus, &session, "TakeControl", NULL, NULL, "b", true) >= 0);
+
+        /* Display can only be set on a graphical session */
+        assert_se(bus_call_method(bus, &session, "SetType", NULL, NULL, "s", "tty") >= 0);
+        sd_bus_error_free(&error);
+        assert_se(bus_call_method(bus, &session, "SetDisplay", &error, NULL, "s", ":0") < 0);
+        assert_se(sd_bus_error_has_name(&error, SD_BUS_ERROR_NOT_SUPPORTED));
+
+        assert_se(bus_call_method(bus, &session, "SetType", NULL, NULL, "s", "x11") >= 0);
+
+        /* Non-empty display can be set */
+        assert_se(bus_call_method(bus, &session, "SetDisplay", NULL, NULL, "s", ":0") >= 0);
+        display = mfree(display);
+        assert_se(bus_get_property_string(bus, &session, "Display", NULL, &display) >= 0);
+        assert_se(streq(display, ":0"));
+
+        /* Empty display can be set too */
+        assert_se(bus_call_method(bus, &session, "SetDisplay", NULL, NULL, "s", "") >= 0);
+        display = mfree(display);
+        assert_se(bus_get_property_string(bus, &session, "Display", NULL, &display) >= 0);
+        assert_se(isempty(display));
+}
+
 static int intro(void) {
         if (saved_argc <= 1)
                 return EXIT_FAILURE;