From: David Tardon Date: Fri, 1 Jul 2022 14:43:34 +0000 (+0200) Subject: test: add test for org.freedesktop.login1.Session SetDisplay X-Git-Tag: v252-rc1~664^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d1fa6c99bb0d2add9fcd6fce7277910bc8dc8769;p=thirdparty%2Fsystemd.git test: add test for org.freedesktop.login1.Session SetDisplay --- diff --git a/src/login/test-session-properties.c b/src/login/test-session-properties.c index 8406147a2c8..44d54811c3e 100644 --- a/src/login/test-session-properties.c +++ b/src/login/test-session-properties.c @@ -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;