From 4df16578980ef3d2b11bb364626ba4f9e16cfcc0 Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Mon, 2 Aug 2021 18:48:34 -0700 Subject: Tests: Add coverage for sys$alarm() success case --- Tests/Kernel/TestKernelAlarm.cpp | 46 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'Tests/Kernel') diff --git a/Tests/Kernel/TestKernelAlarm.cpp b/Tests/Kernel/TestKernelAlarm.cpp index 6bdc7dc251..f4b85e910c 100644 --- a/Tests/Kernel/TestKernelAlarm.cpp +++ b/Tests/Kernel/TestKernelAlarm.cpp @@ -4,10 +4,56 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include +#include #include +#include +#include #include +class SuccessContext { +public: + static Atomic alarm_fired; + + static Core::ElapsedTimer signal_timer; + + static constexpr auto timer_value = Time::from_seconds(1); + + static void test_signal_handler(int signal) + { + auto actual_duration = Time::from_milliseconds(SuccessContext::signal_timer.elapsed()); + auto expected_duration = SuccessContext::timer_value; + + // Add a small buffer to allow for latency on the system. + constexpr auto buffer_duration = Time::from_milliseconds(50); + + dbgln("Signal Times - Actual: {} Expected: {}", actual_duration.to_milliseconds(), expected_duration.to_milliseconds()); + EXPECT(actual_duration >= expected_duration); + EXPECT(actual_duration < expected_duration + buffer_duration); + + EXPECT_EQ(signal, SIGALRM); + SuccessContext::alarm_fired = true; + } +}; + +Atomic SuccessContext::alarm_fired { false }; +Core::ElapsedTimer SuccessContext::signal_timer {}; + +TEST_CASE(success_case) +{ + signal(SIGALRM, SuccessContext::test_signal_handler); + + SuccessContext::signal_timer.start(); + auto previous_time = alarm(SuccessContext::timer_value.to_seconds()); + EXPECT_EQ(previous_time, 0u); + + auto sleep_time = SuccessContext::timer_value + Time::from_seconds(1); + sleep(sleep_time.to_seconds()); + + EXPECT(SuccessContext::alarm_fired); +} + // Regression test for issues #9071 // See: https://github.com/SerenityOS/serenity/issues/9071 TEST_CASE(regression_inifinite_loop) -- cgit v1.2.3