Skip to content

Commit b337bba

Browse files
tests: test patch to hunt down infinite timeout in CI
Something is causing a test to sleep forever in CI, It can not be reproduces locally, so a bunch of logs have been added to try to see at least where it is failing. Signed-off-by: Bjarki Arge Andreasen <[email protected]>
1 parent 0433088 commit b337bba

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

tests/posix/common/src/nanosleep.c

+53
Original file line numberDiff line numberDiff line change
@@ -32,47 +32,86 @@ static inline uint64_t cycle_get_64(void)
3232
}
3333
}
3434

35+
static uint32_t trace_idx;
36+
static uint32_t trace_cycle;
37+
38+
static void trace_test_reset(void)
39+
{
40+
trace_idx = 0;
41+
trace_cycle = cycle_get_64();
42+
}
43+
44+
static void trace_test(void)
45+
{
46+
uint64_t cycle;
47+
uint64_t delta_cycle;
48+
49+
cycle = cycle_get_64();
50+
delta_cycle = cycle - trace_cycle;
51+
trace_cycle = cycle;
52+
53+
TC_PRINT("idx: %u, cycle: %llu, delta: %llu\n", trace_idx, cycle, delta_cycle);
54+
trace_idx++;
55+
}
56+
3557
static void common_errors(int selection, clockid_t clock_id, int flags)
3658
{
3759
struct timespec rem = {};
3860
struct timespec req = {};
3961

62+
trace_test();
63+
4064
/*
4165
* invalid parameters
4266
*/
4367
zassert_equal(select_nanosleep(selection, clock_id, flags, NULL, NULL), -1);
4468
zassert_equal(errno, EFAULT);
4569

70+
trace_test();
71+
4672
/* NULL request */
4773
errno = 0;
4874
zassert_equal(select_nanosleep(selection, clock_id, flags, NULL, &rem), -1);
4975
zassert_equal(errno, EFAULT);
76+
77+
trace_test();
78+
5079
/* Expect rem to be the same when function returns */
5180
zassert_equal(rem.tv_sec, 0, "actual: %d expected: %d", rem.tv_sec, 0);
5281
zassert_equal(rem.tv_nsec, 0, "actual: %d expected: %d", rem.tv_nsec, 0);
5382

83+
trace_test();
84+
5485
/* negative times */
5586
errno = 0;
5687
req = (struct timespec){.tv_sec = -1, .tv_nsec = 0};
5788
zassert_equal(select_nanosleep(selection, clock_id, flags, &req, NULL), -1);
5889
zassert_equal(errno, EINVAL);
5990

91+
trace_test();
92+
6093
errno = 0;
6194
req = (struct timespec){.tv_sec = 0, .tv_nsec = -1};
6295
zassert_equal(select_nanosleep(selection, clock_id, flags, &req, NULL), -1);
6396
zassert_equal(errno, EINVAL);
6497

98+
trace_test();
99+
65100
errno = 0;
66101
req = (struct timespec){.tv_sec = -1, .tv_nsec = -1};
67102
zassert_equal(select_nanosleep(selection, clock_id, flags, &req, NULL), -1);
68103
zassert_equal(errno, EINVAL);
69104

105+
trace_test();
106+
70107
/* nanoseconds too high */
71108
errno = 0;
72109
req = (struct timespec){.tv_sec = 0, .tv_nsec = 1000000000};
73110
zassert_equal(select_nanosleep(selection, clock_id, flags, &req, NULL), -1);
74111
zassert_equal(errno, EINVAL);
75112

113+
trace_test();
114+
76115
/*
77116
* Valid parameters
78117
*/
@@ -85,12 +124,16 @@ static void common_errors(int selection, clockid_t clock_id, int flags)
85124
zassert_equal(req.tv_sec, 1);
86125
zassert_equal(req.tv_nsec, 1);
87126

127+
trace_test();
128+
88129
/* Sleep for 0.0 s. Expect req & rem to be the same when function returns */
89130
zassert_equal(select_nanosleep(selection, clock_id, flags, &req, &rem), 0);
90131
zassert_equal(errno, 0);
91132
zassert_equal(rem.tv_sec, 0, "actual: %d expected: %d", rem.tv_sec, 0);
92133
zassert_equal(rem.tv_nsec, 0, "actual: %d expected: %d", rem.tv_nsec, 0);
93134

135+
trace_test();
136+
94137
/*
95138
* req and rem point to the same timespec
96139
*
@@ -102,10 +145,13 @@ static void common_errors(int selection, clockid_t clock_id, int flags)
102145
zassert_equal(errno, 0);
103146
zassert_equal(req.tv_sec, 0, "actual: %d expected: %d", req.tv_sec, 0);
104147
zassert_equal(req.tv_nsec, 0, "actual: %d expected: %d", req.tv_nsec, 0);
148+
149+
trace_test();
105150
}
106151

107152
ZTEST(nanosleep, test_nanosleep_errors_errno)
108153
{
154+
trace_test_reset();
109155
common_errors(SELECT_NANOSLEEP, CLOCK_REALTIME, 0);
110156
}
111157

@@ -114,19 +160,26 @@ ZTEST(nanosleep, test_clock_nanosleep_errors_errno)
114160
struct timespec rem = {};
115161
struct timespec req = {};
116162

163+
trace_test_reset();
117164
common_errors(SELECT_CLOCK_NANOSLEEP, CLOCK_MONOTONIC, TIMER_ABSTIME);
118165

166+
trace_test();
167+
119168
/* Absolute timeout in the past. */
120169
clock_gettime(CLOCK_MONOTONIC, &req);
121170
zassert_equal(clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &req, &rem), 0);
122171
zassert_equal(rem.tv_sec, 0, "actual: %d expected: %d", rem.tv_sec, 0);
123172
zassert_equal(rem.tv_nsec, 0, "actual: %d expected: %d", rem.tv_nsec, 0);
124173

174+
trace_test();
175+
125176
/* Absolute timeout in the past relative to the realtime clock. */
126177
clock_gettime(CLOCK_REALTIME, &req);
127178
zassert_equal(clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &req, &rem), 0);
128179
zassert_equal(rem.tv_sec, 0, "actual: %d expected: %d", rem.tv_sec, 0);
129180
zassert_equal(rem.tv_nsec, 0, "actual: %d expected: %d", rem.tv_nsec, 0);
181+
182+
trace_test();
130183
}
131184

132185
/**

0 commit comments

Comments
 (0)