Path: blob/master/tools/testing/selftests/kselftest_harness/harness-selftest.c
26292 views
// SPDX-License-Identifier: GPL-2.012#include <stdio.h>34#include <sys/resource.h>5#include <sys/prctl.h>67/* Avoid any inconsistencies */8#define TH_LOG_STREAM stdout910#include "../kselftest_harness.h"1112static void test_helper(struct __test_metadata *_metadata)13{14ASSERT_EQ(0, 0);15}1617TEST(standalone_pass) {18TH_LOG("before");19ASSERT_EQ(0, 0);20EXPECT_EQ(0, 0);21test_helper(_metadata);22TH_LOG("after");23}2425TEST(standalone_fail) {26TH_LOG("before");27EXPECT_EQ(0, 0);28EXPECT_EQ(0, 1);29ASSERT_EQ(0, 1);30TH_LOG("after");31}3233TEST_SIGNAL(signal_pass, SIGUSR1) {34TH_LOG("before");35ASSERT_EQ(0, 0);36TH_LOG("after");37kill(getpid(), SIGUSR1);38}3940TEST_SIGNAL(signal_fail, SIGUSR1) {41TH_LOG("before");42ASSERT_EQ(0, 1);43TH_LOG("after");44kill(getpid(), SIGUSR1);45}4647FIXTURE(fixture) {48pid_t testpid;49};5051FIXTURE_SETUP(fixture) {52TH_LOG("setup");53self->testpid = getpid();54}5556FIXTURE_TEARDOWN(fixture) {57TH_LOG("teardown same-process=%d", self->testpid == getpid());58}5960TEST_F(fixture, pass) {61TH_LOG("before");62ASSERT_EQ(0, 0);63test_helper(_metadata);64standalone_pass(_metadata);65TH_LOG("after");66}6768TEST_F(fixture, fail) {69TH_LOG("before");70ASSERT_EQ(0, 1);71fixture_pass(_metadata, self, variant);72TH_LOG("after");73}7475TEST_F_TIMEOUT(fixture, timeout, 1) {76TH_LOG("before");77sleep(2);78TH_LOG("after");79}8081FIXTURE(fixture_parent) {82pid_t testpid;83};8485FIXTURE_SETUP(fixture_parent) {86TH_LOG("setup");87self->testpid = getpid();88}8990FIXTURE_TEARDOWN_PARENT(fixture_parent) {91TH_LOG("teardown same-process=%d", self->testpid == getpid());92}9394TEST_F(fixture_parent, pass) {95TH_LOG("before");96ASSERT_EQ(0, 0);97TH_LOG("after");98}99100FIXTURE(fixture_setup_failure) {101pid_t testpid;102};103104FIXTURE_SETUP(fixture_setup_failure) {105TH_LOG("setup");106self->testpid = getpid();107ASSERT_EQ(0, 1);108}109110FIXTURE_TEARDOWN(fixture_setup_failure) {111TH_LOG("teardown same-process=%d", self->testpid == getpid());112}113114TEST_F(fixture_setup_failure, pass) {115TH_LOG("before");116ASSERT_EQ(0, 0);117TH_LOG("after");118}119120int main(int argc, char **argv)121{122/*123* The harness uses abort() to signal assertion failures, which triggers coredumps.124* This may be useful to debug real failures but not for this selftest, disable them.125*/126struct rlimit rlimit = {127.rlim_cur = 0,128.rlim_max = 0,129};130131prctl(PR_SET_DUMPABLE, 0, 0, 0, 0);132setrlimit(RLIMIT_CORE, &rlimit);133134return test_harness_run(argc, argv);135}136137138