mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-11 05:17:44 +03:00
test: add test for org.freedesktop.login1.Session SetType
This commit is contained in:
parent
bd681a7eb0
commit
9ac0855b61
@ -103,4 +103,7 @@ tests += [
|
|||||||
[liblogind_core,
|
[liblogind_core,
|
||||||
libshared],
|
libshared],
|
||||||
[threads]],
|
[threads]],
|
||||||
|
|
||||||
|
[files('test-session-properties.c'),
|
||||||
|
[], [], [], '', 'manual'],
|
||||||
]
|
]
|
||||||
|
71
src/login/test-session-properties.c
Normal file
71
src/login/test-session-properties.c
Normal file
@ -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);
|
@ -474,6 +474,21 @@ EOF
|
|||||||
assert_eq "$(systemctl --property SubState --value show user@"$(id -u logind-test-user)".service)" "dead"
|
assert_eq "$(systemctl --property SubState --value show user@"$(id -u logind-test-user)".service)" "dead"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
: >/failed
|
||||||
|
|
||||||
setup_test_user
|
setup_test_user
|
||||||
@ -485,6 +500,7 @@ test_shutdown
|
|||||||
test_session
|
test_session
|
||||||
test_lock_idle_action
|
test_lock_idle_action
|
||||||
test_no_user_instance_for_cron
|
test_no_user_instance_for_cron
|
||||||
|
test_session_properties
|
||||||
|
|
||||||
touch /testok
|
touch /testok
|
||||||
rm /failed
|
rm /failed
|
||||||
|
Loading…
Reference in New Issue
Block a user