[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