You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.7 KiB
138 lines
4.7 KiB
From 24e6f79352a94e6c0d13aefe355c5c316274103d Mon Sep 17 00:00:00 2001 |
|
From: David Tardon <dtardon@redhat.com> |
|
Date: Mon, 27 Jun 2022 08:37:22 +0200 |
|
Subject: [PATCH] test: add test for org.freedesktop.login1.Session SetType |
|
|
|
(cherry picked from commit 9ac0855b614b068e699092be7ec8cb39559ff88f) |
|
|
|
Related: #2100464 |
|
--- |
|
src/login/meson.build | 3 ++ |
|
src/login/test-session-properties.c | 71 +++++++++++++++++++++++++++++ |
|
test/units/testsuite-35.sh | 16 +++++++ |
|
3 files changed, 90 insertions(+) |
|
create mode 100644 src/login/test-session-properties.c |
|
|
|
diff --git a/src/login/meson.build b/src/login/meson.build |
|
index 92f491665c..8ee364144c 100644 |
|
--- a/src/login/meson.build |
|
+++ b/src/login/meson.build |
|
@@ -110,4 +110,7 @@ tests += [ |
|
[liblogind_core, |
|
libshared], |
|
[threads]], |
|
+ |
|
+ [files('test-session-properties.c'), |
|
+ [], [], [], '', 'manual'], |
|
] |
|
diff --git a/src/login/test-session-properties.c b/src/login/test-session-properties.c |
|
new file mode 100644 |
|
index 0000000000..8406147a2c |
|
--- /dev/null |
|
+++ b/src/login/test-session-properties.c |
|
@@ -0,0 +1,71 @@ |
|
+/* SPDX-License-Identifier: LGPL-2.1-or-later */ |
|
+ |
|
+/* Usage: |
|
+ * ./test-session-properties <SESSION-OBJECT-PATH> |
|
+ * e.g., |
|
+ * ./test-session-properties /org/freedesktop/login1/session/_32 |
|
+ */ |
|
+ |
|
+#include "alloc-util.h" |
|
+#include "bus-common-errors.h" |
|
+#include "bus-locator.h" |
|
+#include "string-util.h" |
|
+#include "tests.h" |
|
+ |
|
+static BusLocator session; |
|
+ |
|
+/* Tests org.freedesktop.logind.Session SetType */ |
|
+TEST(set_type) { |
|
+ _cleanup_(sd_bus_flush_close_unrefp) sd_bus* bus = NULL; |
|
+ _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; |
|
+ const char* types[] = {"tty", "x11", "wayland", "mir", "web"}; |
|
+ _cleanup_free_ char *type = NULL, *type2 = NULL; |
|
+ |
|
+ assert_se(sd_bus_open_system(&bus) >= 0); |
|
+ |
|
+ /* Default type is set */ |
|
+ assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type) >= 0); |
|
+ assert_se(streq(type, "tty")); |
|
+ |
|
+ /* Type can only be set by the session controller (which we're not ATM) */ |
|
+ assert_se(bus_call_method(bus, &session, "SetType", &error, NULL, "s", "x11") < 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); |
|
+ |
|
+ /* All defined session types can be set */ |
|
+ for (size_t i = 0; i < ELEMENTSOF(types); i++) { |
|
+ type = mfree(type); |
|
+ assert_se(bus_call_method(bus, &session, "SetType", NULL, NULL, "s", types[i]) >= 0); |
|
+ assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type) >= 0); |
|
+ assert_se(streq(type, types[i])); |
|
+ } |
|
+ |
|
+ /* An unknown type is rejected */ |
|
+ sd_bus_error_free(&error); |
|
+ assert_se(bus_call_method(bus, &session, "SetType", &error, NULL, "s", "hello") < 0); |
|
+ assert_se(sd_bus_error_has_name(&error, SD_BUS_ERROR_INVALID_ARGS)); |
|
+ assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type2) >= 0); |
|
+ |
|
+ /* Type is reset to the original value when we release control of the session */ |
|
+ assert_se(!streq(type, "tty")); |
|
+ assert_se(bus_call_method(bus, &session, "ReleaseControl", NULL, NULL, "") >= 0); |
|
+ type = mfree(type); |
|
+ assert_se(bus_get_property_string(bus, &session, "Type", NULL, &type) >= 0); |
|
+ assert_se(streq(type, "tty")); |
|
+} |
|
+ |
|
+static int intro(void) { |
|
+ if (saved_argc <= 1) |
|
+ return EXIT_FAILURE; |
|
+ |
|
+ session = (BusLocator) { |
|
+ .destination = "org.freedesktop.login1", |
|
+ .path = saved_argv[1], |
|
+ .interface = "org.freedesktop.login1.Session", |
|
+ }; |
|
+ |
|
+ return EXIT_SUCCESS; |
|
+} |
|
+ |
|
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro); |
|
diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh |
|
index ad14d8a73c..4fb2944e2d 100755 |
|
--- a/test/units/testsuite-35.sh |
|
+++ b/test/units/testsuite-35.sh |
|
@@ -373,6 +373,21 @@ EOF |
|
assert_in "user:logind-test-user:rw-" "$(getfacl -p "$dev")" |
|
} |
|
|
|
+test_session_properties() { |
|
+ local s |
|
+ |
|
+ if [[ ! -c /dev/tty2 ]]; then |
|
+ echo "/dev/tty2 does not exist, skipping test ${FUNCNAME[0]}." |
|
+ return |
|
+ fi |
|
+ |
|
+ trap cleanup_session RETURN |
|
+ create_session |
|
+ |
|
+ s=$(loginctl list-sessions --no-legend | awk '$3 == "logind-test-user" { print $1 }') |
|
+ /usr/lib/systemd/tests/manual/test-session-properties "/org/freedesktop/login1/session/_3${s?}" |
|
+} |
|
+ |
|
: >/failed |
|
|
|
setup_test_user |
|
@@ -382,6 +397,7 @@ test_started |
|
test_suspend_on_lid |
|
test_shutdown |
|
test_session |
|
+test_session_properties |
|
|
|
touch /testok |
|
rm /failed
|
|
|