Skip to content

Commit 18c23de

Browse files
committed
tests: posix: common: free resource in after() for timer suite
Create a separate ZTEST_SUITE() to properly manage resources that are shared between test cases. Add some assertions where they were missing. Additionally, we don't need verbose printing in this testsuite, so change `printk()` to `LOG_DBG()` Signed-off-by: Christopher Friedt <[email protected]>
1 parent d810836 commit 18c23de

File tree

1 file changed

+38
-41
lines changed

1 file changed

+38
-41
lines changed

tests/posix/common/src/timer.c

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,73 +8,60 @@
88
#include <unistd.h>
99

1010
#include <zephyr/ztest.h>
11+
#include <zephyr/logging/log.h>
1112

1213
#define SECS_TO_SLEEP 2
1314
#define DURATION_SECS 1
1415
#define DURATION_NSECS 0
1516
#define PERIOD_SECS 0
1617
#define PERIOD_NSECS 100000000
1718

19+
#define TEST_SIGNAL_VAL SIGTSTP
20+
21+
LOG_MODULE_REGISTER(timer_test);
22+
1823
static int exp_count;
24+
static timer_t timerid = -1;
1925

2026
void handler(union sigval val)
2127
{
22-
printk("Handler Signal value :%d for %d times\n", val.sival_int,
23-
++exp_count);
28+
++exp_count;
29+
LOG_DBG("Handler Signal value %d for %d times", val.sival_int, exp_count);
30+
zassert_equal(val.sival_int, TEST_SIGNAL_VAL);
2431
}
2532

2633
void test_timer(int sigev_notify)
2734
{
28-
int ret;
29-
struct sigevent sig = { 0 };
30-
timer_t timerid;
35+
struct sigevent sig = {0};
3136
struct itimerspec value, ovalue;
3237
struct timespec ts, te;
3338
int64_t nsecs_elapsed, secs_elapsed;
3439

3540
exp_count = 0;
3641
sig.sigev_notify = sigev_notify;
3742
sig.sigev_notify_function = handler;
38-
sig.sigev_value.sival_int = 20;
39-
40-
if (sigev_notify == SIGEV_SIGNAL)
41-
printk("POSIX timer test SIGEV_SIGNAL\n");
42-
else
43-
printk("POSIX timer test SIGEV_THREAD\n");
44-
45-
ret = timer_create(CLOCK_MONOTONIC, &sig, &timerid);
43+
sig.sigev_value.sival_int = TEST_SIGNAL_VAL;
4644

4745
/*TESTPOINT: Check if timer is created successfully*/
48-
zassert_false(ret, "POSIX timer create failed");
46+
zassert_ok(timer_create(CLOCK_MONOTONIC, &sig, &timerid));
4947

5048
value.it_value.tv_sec = DURATION_SECS;
5149
value.it_value.tv_nsec = DURATION_NSECS;
5250
value.it_interval.tv_sec = PERIOD_SECS;
5351
value.it_interval.tv_nsec = PERIOD_NSECS;
54-
ret = timer_settime(timerid, 0, &value, &ovalue);
52+
zassert_ok(timer_settime(timerid, 0, &value, &ovalue));
5553
usleep(100 * USEC_PER_MSEC);
56-
ret = timer_gettime(timerid, &value);
57-
zassert_false(ret, "Failed to get time to expire.");
58-
59-
if (ret == 0) {
60-
printk("Timer fires every %d secs and %d nsecs\n",
61-
(int) value.it_interval.tv_sec,
62-
(int) value.it_interval.tv_nsec);
63-
printk("Time remaining to fire %d secs and %d nsecs\n",
64-
(int) value.it_value.tv_sec,
65-
(int) value.it_value.tv_nsec);
66-
}
67-
68-
clock_gettime(CLOCK_MONOTONIC, &ts);
69-
7054
/*TESTPOINT: Check if timer has started successfully*/
71-
zassert_false(ret, "POSIX timer failed to start");
55+
zassert_ok(timer_gettime(timerid, &value));
7256

73-
sleep(SECS_TO_SLEEP);
57+
LOG_DBG("Timer fires every %d secs and %d nsecs", (int)value.it_interval.tv_sec,
58+
(int)value.it_interval.tv_nsec);
59+
LOG_DBG("Time remaining to fire %d secs and %d nsecs", (int)value.it_value.tv_sec,
60+
(int)value.it_value.tv_nsec);
7461

62+
clock_gettime(CLOCK_MONOTONIC, &ts);
63+
sleep(SECS_TO_SLEEP);
7564
clock_gettime(CLOCK_MONOTONIC, &te);
76-
zassert_equal(ret, 0, "Number of timer overruns is incorrect");
77-
timer_delete(timerid);
7865

7966
if (te.tv_nsec >= ts.tv_nsec) {
8067
secs_elapsed = te.tv_sec - ts.tv_sec;
@@ -95,34 +82,44 @@ void test_timer(int sigev_notify)
9582
exp_count, expected_signal_count);
9683
}
9784

98-
ZTEST(timer, test_timer)
85+
ZTEST(timer, test_SIGEV_SIGNAL)
9986
{
10087
test_timer(SIGEV_SIGNAL);
88+
}
89+
90+
ZTEST(timer, test_SIGEV_THREAD)
91+
{
10192
test_timer(SIGEV_THREAD);
10293
}
10394

10495
ZTEST(timer, test_timer_overrun)
10596
{
106-
timer_t timerid;
10797
struct sigevent sig = { 0 };
10898
struct itimerspec value;
10999

110100
sig.sigev_notify = SIGEV_NONE;
111101

112-
timer_create(CLOCK_MONOTONIC, &sig, &timerid);
102+
zassert_ok(timer_create(CLOCK_MONOTONIC, &sig, &timerid));
113103

114104
/*Set the timer to expire every 500 milliseconds*/
115105
value.it_interval.tv_sec = 0;
116106
value.it_interval.tv_nsec = 500000000;
117107
value.it_value.tv_sec = 0;
118108
value.it_value.tv_nsec = 500000000;
119-
timer_settime(timerid, 0, &value, NULL);
109+
zassert_ok(timer_settime(timerid, 0, &value, NULL));
120110
k_sleep(K_MSEC(2500));
121111

122-
int overruns = timer_getoverrun(timerid);
112+
zassert_equal(timer_getoverrun(timerid), 4, "Number of overruns is incorrect");
113+
}
114+
115+
static void after(void *arg)
116+
{
117+
ARG_UNUSED(arg);
123118

124-
timer_delete(timerid);
125-
zassert_equal(overruns, 4, "Number of overruns is incorrect");
119+
if (timerid != -1) {
120+
(void)timer_delete(timerid);
121+
timerid = -1;
122+
}
126123
}
127124

128-
ZTEST_SUITE(timer, NULL, NULL, NULL, NULL, NULL);
125+
ZTEST_SUITE(timer, NULL, NULL, NULL, after, NULL);

0 commit comments

Comments
 (0)