libevdev/test/test-main.c

118 lines
2.3 KiB
C
Raw Normal View History

Change to the (always intended) MIT license Due to what must've been a copy/paste error many years ago, the license text for libevdev wasn't actually the MIT license. Let's rectify this, it was always MIT intended anyway. To make this more obvious and reduce the chance of copy/paste mistakes, use the SPDX license identifier in the various source files. The two installed public header files have the full license text. All contributors with copyrightable contributions have ACKed the license change to MIT, either in the MR directly [1] or privately in reply to an email. [1] https://gitlab.freedesktop.org/libevdev/libevdev/-/merge_requests/69 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Acked-by: Alexander Dahl <ada@thorsis.com> Acked-by: Andreas Pokorny <andreas.pokorny@canonical.com> Acked-by: Armin K <krejzi@email.com> Acked-by: Benjamin Tissoires <btissoir@redhat.com> Acked-by: David Herrmann <dh.herrmann@gmail.com> Acked-by: Deepa Dinamani <deepa.kernel@gmail.com> Acked-by: Emmanuele Bassi <ebassi@gnome.org> Acked-by: Gaetan Nadon <memsize@videotron.ca> Acked-by: George Thomas <georgefsthomas@gmail.com> Acked-by: Michael Forney <mforney@mforney.org> Acked-by: Nayan Deshmukh <nayan26deshmukh@gmail.com> Acked-by: Niclas Zeising <zeising@daemonic.se> Acked-by: Owen W. Taylor <otaylor@fishsoup.net> Acked-by: Peter Seiderer <ps.report@gmx.net> Acked-by: Ran Benita <ran234@gmail.com> Acked-by: Rosen Penev <rosenp@gmail.com> Acked-by: Scott Jann <sjann@knight-rider.org> Acked-by: Thilo Schulz <thilo@tjps.eu> Acked-by: polyphemus <rolfmorel@gmail.com>
2020-09-17 15:56:41 +10:00
// SPDX-License-Identifier: MIT
/*
* Copyright © 2013 Red Hat, Inc.
*/
#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"
static int
is_debugger_attached(void)
{
int rc = 1;
/*
* FreeBSD does not support PTRACE_ATTACH, disable attaching a debugger
* on FreeBSD by skipping the rest of the function and just return 1.
*/
#ifndef __FreeBSD__
int status;
int pid = fork();
if (pid == -1)
return 0;
if (pid == 0) {
int ppid = getppid();
if (ptrace(PTRACE_ATTACH, ppid, NULL, NULL) == 0) {
waitpid(ppid, NULL, 0);
ptrace(PTRACE_CONT, NULL, NULL);
ptrace(PTRACE_DETACH, ppid, NULL, NULL);
rc = 0;
}
_exit(rc);
} else {
waitpid(pid, &status, 0);
rc = WEXITSTATUS(status);
}
#endif /* !__FreeBSD__ */
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)
{
const struct libevdev_test *t;
const struct rlimit corelimit = {0, 0};
int failed;
for (t = &__start_test_section; t < &__stop_test_section; t++) {
if (t->needs_root_privileges) {
if (getenv("LIBEVDEV_SKIP_ROOT_TESTS"))
return 77;
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;
}
}
if (is_debugger_attached())
setenv("CK_FORK", "no", 0);
if (setrlimit(RLIMIT_CORE, &corelimit) != 0)
perror("WARNING: Core dumps not disabled. Reason");
libevdev_set_log_function(test_logfunc_abort_on_error, NULL);
SRunner *sr = srunner_create(NULL);
for (t = &__start_test_section; t < &__stop_test_section; t++) {
srunner_add_suite(sr, t->setup());
}
srunner_run_all(sr, CK_NORMAL);
failed = srunner_ntests_failed(sr);
srunner_free(sr);
return failed;
}