Having the system suspend or shutdown halfway through a test run is a tad annoying. So let's talk to logind and tell it to inhibit the various keys we're testing.
https://bugs.freedesktop.org/show_bug.cgi?id=104720 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> --- meson.build | 7 ++++++- test/litest.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 3a14681c..5b8317a4 100644 --- a/meson.build +++ b/meson.build @@ -521,6 +521,10 @@ if get_option('tests') dep_libunwind = dependency('libunwind', required : false) config_h.set10('HAVE_LIBUNWIND', dep_libunwind.found()) + # for inhibit support during test run + dep_libsystemd = dependency('libsystemd', required : false) + config_h.set10('HAVE_LIBSYSTEMD', dep_libsystemd.found()) + lib_litest_sources = [ 'test/litest.h', 'test/litest-int.h', @@ -609,7 +613,8 @@ if get_option('tests') dep_udev, dep_libevdev, dep_dl, - dep_lm + dep_lm, + dep_libsystemd, ] configure_file(input : 'udev/80-libinput-test-device.rules', diff --git a/test/litest.c b/test/litest.c index d4874d43..befb486a 100644 --- a/test/litest.c +++ b/test/litest.c @@ -48,6 +48,9 @@ #include <sys/stat.h> #include <sys/types.h> #include <libudev.h> +#if HAVE_LIBSYSTEMD +#include <systemd/sd-bus.h> +#endif #include "litest.h" #include "litest-int.h" @@ -942,10 +945,60 @@ litest_fork_subtests(struct list *tests, int max_forks) return failed; } +static inline int +inhibit(void) +{ + int lock_fd = -1; +#if HAVE_LIBSYSTEMD + sd_bus_error error = SD_BUS_ERROR_NULL; + sd_bus_message *m = NULL; + sd_bus *bus = NULL; + int rc; + + rc = sd_bus_open_system(&bus); + if (rc != 0) { + fprintf(stderr, "Warning: inhibit failed: %s\n", strerror(-rc)); + goto out; + } + + rc = sd_bus_call_method(bus, + "org.freedesktop.login1", + "/org/freedesktop/login1", + "org.freedesktop.login1.Manager", + "Inhibit", + &error, + &m, + "ssss", + "handle-lid-switch:handle-power-key:handle-suspend-key:handle-hibernate-key", + "libinput test-suite runner", + "testing in progress", + "block"); + if (rc < 0) { + fprintf(stderr, "Warning: inhibit failed: %s\n", error.message); + goto out; + } + + rc = sd_bus_message_read(m, "h", &lock_fd); + if (rc < 0) { + fprintf(stderr, "Warning: inhibit failed: %s\n", strerror(-rc)); + goto out; + } + + lock_fd = dup(lock_fd); +out: + sd_bus_error_free(&error); + sd_bus_message_unref(m); + sd_bus_close(bus); + sd_bus_unref(bus); +#endif + return lock_fd; +} + static inline int litest_run(int argc, char **argv) { int failed = 0; + int inhibit_lock_fd; list_init(&created_files_list); @@ -962,11 +1015,15 @@ litest_run(int argc, char **argv) litest_setup_sighandler(SIGINT); + inhibit_lock_fd = inhibit(); + if (jobs == 1) failed = litest_run_suite(&all_tests, 1, 1, STDERR_FILENO); else failed = litest_fork_subtests(&all_tests, jobs); + close(inhibit_lock_fd); + litest_free_test_list(&all_tests); litest_remove_udev_rules(&created_files_list); -- 2.14.3 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel