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 <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;
}
}