// SPDX-License-Identifier: GPL-2.0 #include #include #include /* Avoid any inconsistencies */ #define TH_LOG_STREAM stdout #include "../kselftest_harness.h" static void test_helper(struct __test_metadata *_metadata) { ASSERT_EQ(0, 0); } TEST(standalone_pass) { TH_LOG("before"); ASSERT_EQ(0, 0); EXPECT_EQ(0, 0); test_helper(_metadata); TH_LOG("after"); } TEST(standalone_fail) { TH_LOG("before"); EXPECT_EQ(0, 0); EXPECT_EQ(0, 1); ASSERT_EQ(0, 1); TH_LOG("after"); } TEST_SIGNAL(signal_pass, SIGUSR1) { TH_LOG("before"); ASSERT_EQ(0, 0); TH_LOG("after"); kill(getpid(), SIGUSR1); } TEST_SIGNAL(signal_fail, SIGUSR1) { TH_LOG("before"); ASSERT_EQ(0, 1); TH_LOG("after"); kill(getpid(), SIGUSR1); } FIXTURE(fixture) { pid_t testpid; }; FIXTURE_SETUP(fixture) { TH_LOG("setup"); self->testpid = getpid(); } FIXTURE_TEARDOWN(fixture) { TH_LOG("teardown same-process=%d", self->testpid == getpid()); } TEST_F(fixture, pass) { TH_LOG("before"); ASSERT_EQ(0, 0); test_helper(_metadata); standalone_pass(_metadata); TH_LOG("after"); } TEST_F(fixture, fail) { TH_LOG("before"); ASSERT_EQ(0, 1); fixture_pass(_metadata, self, variant); TH_LOG("after"); } TEST_F_TIMEOUT(fixture, timeout, 1) { TH_LOG("before"); sleep(2); TH_LOG("after"); } FIXTURE(fixture_parent) { pid_t testpid; }; FIXTURE_SETUP(fixture_parent) { TH_LOG("setup"); self->testpid = getpid(); } FIXTURE_TEARDOWN_PARENT(fixture_parent) { TH_LOG("teardown same-process=%d", self->testpid == getpid()); } TEST_F(fixture_parent, pass) { TH_LOG("before"); ASSERT_EQ(0, 0); TH_LOG("after"); } FIXTURE(fixture_setup_failure) { pid_t testpid; }; FIXTURE_SETUP(fixture_setup_failure) { TH_LOG("setup"); self->testpid = getpid(); ASSERT_EQ(0, 1); } FIXTURE_TEARDOWN(fixture_setup_failure) { TH_LOG("teardown same-process=%d", self->testpid == getpid()); } TEST_F(fixture_setup_failure, pass) { TH_LOG("before"); ASSERT_EQ(0, 0); TH_LOG("after"); } int main(int argc, char **argv) { /* * The harness uses abort() to signal assertion failures, which triggers coredumps. * This may be useful to debug real failures but not for this selftest, disable them. */ struct rlimit rlimit = { .rlim_cur = 0, .rlim_max = 0, }; prctl(PR_SET_DUMPABLE, 0, 0, 0, 0); setrlimit(RLIMIT_CORE, &rlimit); return test_harness_run(argc, argv); }