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 <peter.hutterer@who-t.net>
This commit is contained in:
Peter Hutterer 2018-06-15 15:08:53 +10:00
parent 805706a816
commit 1f9e087dac

View file

@ -22,12 +22,15 @@
#include <config.h> #include <config.h>
#include <check.h> #include <check.h>
#include <errno.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include <sys/ptrace.h> #include <sys/ptrace.h>
#include <sys/resource.h> #include <sys/resource.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <libevdev/libevdev.h> #include <libevdev/libevdev.h>
#include "test-common.h" #include "test-common.h"
@ -60,6 +63,24 @@ is_debugger_attached(void)
return rc; 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; extern const struct libevdev_test __start_test_section, __stop_test_section;
int main(void) int main(void)
@ -70,10 +91,16 @@ int main(void)
for (t = &__start_test_section; t < &__stop_test_section; t++) { for (t = &__start_test_section; t < &__stop_test_section; t++) {
if (t->needs_root_privileges) { if (t->needs_root_privileges) {
if (getuid() != 0) { if (getuid() != 0) {
fprintf(stderr, "This test needs to run as root\n"); fprintf(stderr, "This test needs to run as root\n");
return 77; return 77;
} }
if (!device_nodes_exist()) {
fprintf(stderr, "This test needs /dev/input and /dev/uinput to exist\n");
return 77;
}
break; break;
} }
} }