From 1f9e087dac9b2a8dd89728785dba2ab7cf9301e4 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 15 Jun 2018 15:08:53 +1000 Subject: [PATCH] test: check for the device nodes to exist before testing Even if we're root we may be running in a container without input device nodes. In which case we should skip the test, not fail. Signed-off-by: Peter Hutterer --- test/test-main.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/test-main.c b/test/test-main.c index 42a8802..fa4c48c 100644 --- a/test/test-main.c +++ b/test/test-main.c @@ -22,12 +22,15 @@ #include #include +#include #include #include #include #include #include #include +#include +#include #include #include "test-common.h" @@ -60,6 +63,24 @@ is_debugger_attached(void) return rc; } +static bool +device_nodes_exist(void) +{ + struct stat st; + int rc; + + rc = stat("/dev/uinput", &st); + if (rc == -1 && errno == ENOENT) + return false; + + rc = stat("/dev/input", &st); + if (rc == -1 && errno == ENOENT) + return false; + + /* Any issues but ENOENT we just let the test suite blow up later */ + return true; +} + extern const struct libevdev_test __start_test_section, __stop_test_section; int main(void) @@ -70,10 +91,16 @@ int main(void) for (t = &__start_test_section; t < &__stop_test_section; t++) { if (t->needs_root_privileges) { + if (getuid() != 0) { fprintf(stderr, "This test needs to run as root\n"); return 77; } + if (!device_nodes_exist()) { + fprintf(stderr, "This test needs /dev/input and /dev/uinput to exist\n"); + return 77; + } + break; } } -- 2.7.4