mirror of https://github.com/ARMmbed/mbed-os.git
Add test for ticker suspend and resume
Unit test the functions ticker_suspend and ticker_resume.pull/7524/head
parent
23e6d50000
commit
1bbf43ad38
|
@ -2268,6 +2268,82 @@ static void test_match_interval_passed_table()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check that suspend and resume work as expected
|
||||||
|
*
|
||||||
|
* Check the following
|
||||||
|
* -time does not change while suspended
|
||||||
|
* -restricted interface functions are not called
|
||||||
|
* -scheduling resumes correctly
|
||||||
|
*/
|
||||||
|
static void test_suspend_resume()
|
||||||
|
{
|
||||||
|
ticker_set_handler(&ticker_stub, NULL);
|
||||||
|
|
||||||
|
interface_stub.timestamp = 1000;
|
||||||
|
us_timestamp_t start = ticker_read_us(&ticker_stub);
|
||||||
|
TEST_ASSERT_EQUAL(1000, start);
|
||||||
|
|
||||||
|
/* Reset call count */
|
||||||
|
interface_stub.init_call = 0;
|
||||||
|
interface_stub.read_call = 0;
|
||||||
|
interface_stub.set_interrupt_call = 0;
|
||||||
|
|
||||||
|
/* Suspend the ticker */
|
||||||
|
ticker_suspend(&ticker_stub);
|
||||||
|
const timestamp_t suspend_time = queue_stub.present_time;
|
||||||
|
|
||||||
|
|
||||||
|
/* Simulate time passing */
|
||||||
|
interface_stub.timestamp = 1500;
|
||||||
|
us_timestamp_t next = ticker_read_us(&ticker_stub);
|
||||||
|
|
||||||
|
/* Time should not have passed and no calls to interface should have been made */
|
||||||
|
TEST_ASSERT_EQUAL(start, next);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.init_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.read_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.disable_interrupt_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.clear_interrupt_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.set_interrupt_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.fire_interrupt_call);
|
||||||
|
|
||||||
|
|
||||||
|
/* Simulate a reinit (time reset to 0) */
|
||||||
|
interface_stub.timestamp = 0;
|
||||||
|
next = ticker_read_us(&ticker_stub);
|
||||||
|
|
||||||
|
/* Time should not have passed and no calls to interface should have been made */
|
||||||
|
TEST_ASSERT_EQUAL(start, next);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.init_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.read_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.disable_interrupt_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.clear_interrupt_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.set_interrupt_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.fire_interrupt_call);
|
||||||
|
|
||||||
|
|
||||||
|
/* Insert an event in the past and future */
|
||||||
|
ticker_event_t event_past = { 0 };
|
||||||
|
const timestamp_t event_past_timestamp = suspend_time - 10;
|
||||||
|
ticker_insert_event_us(&ticker_stub, &event_past, event_past_timestamp, 0);
|
||||||
|
|
||||||
|
ticker_event_t event_future = { 0 };
|
||||||
|
const timestamp_t event_future_timestamp = suspend_time + 10;
|
||||||
|
ticker_insert_event_us(&ticker_stub, &event_future, event_future_timestamp, 0);
|
||||||
|
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.init_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.read_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.disable_interrupt_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.clear_interrupt_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.set_interrupt_call);
|
||||||
|
TEST_ASSERT_EQUAL(0, interface_stub.fire_interrupt_call);
|
||||||
|
|
||||||
|
/* Resume and verify everything starts again */
|
||||||
|
ticker_resume(&ticker_stub);
|
||||||
|
TEST_ASSERT_EQUAL(suspend_time, queue_stub.present_time);
|
||||||
|
TEST_ASSERT_EQUAL(1, interface_stub.fire_interrupt_call);
|
||||||
|
}
|
||||||
|
|
||||||
static const case_t cases[] = {
|
static const case_t cases[] = {
|
||||||
MAKE_TEST_CASE("ticker initialization", test_ticker_initialization),
|
MAKE_TEST_CASE("ticker initialization", test_ticker_initialization),
|
||||||
MAKE_TEST_CASE(
|
MAKE_TEST_CASE(
|
||||||
|
@ -2376,6 +2452,10 @@ static const case_t cases[] = {
|
||||||
MAKE_TEST_CASE(
|
MAKE_TEST_CASE(
|
||||||
"test_match_interval_passed_table",
|
"test_match_interval_passed_table",
|
||||||
test_match_interval_passed_table
|
test_match_interval_passed_table
|
||||||
|
),
|
||||||
|
MAKE_TEST_CASE(
|
||||||
|
"test_suspend_resume",
|
||||||
|
test_suspend_resume
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue