[PATCH libevdev 5/6] test: check for the device nodes to exist before testing
Peter Hutterer
peter.hutterer at who-t.net
Fri Jun 15 05:22:52 UTC 2018
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 <peter.hutterer at who-t.net>
---
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 <config.h>
#include <check.h>
+#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ptrace.h>
#include <sys/resource.h>
#include <sys/wait.h>
+#include <sys/stat.h>
+#include <sys/types.h>
#include <libevdev/libevdev.h>
#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.14.4
More information about the Input-tools
mailing list