Skip to content

Commit 1e9f16f

Browse files
tests: kernel: workq: add work_timeout test suite
Add work_timeout test suite which tests the work timeout feature. Signed-off-by: Bjarki Arge Andreasen <[email protected]>
1 parent dd5f612 commit 1e9f16f

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
cmake_minimum_required(VERSION 3.20.0)
4+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
5+
project(work_timeout)
6+
7+
FILE(GLOB app_sources src/test.c)
8+
target_sources(app PRIVATE ${app_sources})
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
CONFIG_ZTEST=y
2+
CONFIG_WORKQUEUE_WORK_TIMEOUT=y
3+
CONFIG_SYSTEM_WORKQUEUE_WORK_TIMEOUT_MS=1000
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/*
2+
* Copyright (c) 2025 Nordic Semiconductor ASA
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <zephyr/kernel.h>
8+
#include <zephyr/ztest.h>
9+
10+
#define TEST_SYS_WORKQ_WORK_TIMEOUT_MS \
11+
(CONFIG_SYSTEM_WORKQUEUE_WORK_TIMEOUT_MS)
12+
13+
#define TEST_SYS_WORKQ_WORK_TIMEOUT_TOLERANCE_MS \
14+
(TEST_SYS_WORKQ_WORK_TIMEOUT_MS / 10)
15+
16+
#define TEST_SYS_WORKQ_WORK_TIMEOUT_PRE_SLEEP_MS \
17+
(TEST_SYS_WORKQ_WORK_TIMEOUT_MS - TEST_SYS_WORKQ_WORK_TIMEOUT_TOLERANCE_MS)
18+
19+
#define TEST_SYS_WORKQ_WORK_TIMEOUT_POST_SLEEP_MS \
20+
(TEST_SYS_WORKQ_WORK_TIMEOUT_TOLERANCE_MS * 2)
21+
22+
#define TEST_SYS_WORKQ_WORK_TIMEOUT_UNBLOCK_SLEEP_MS \
23+
(TEST_SYS_WORKQ_WORK_TIMEOUT_TOLERANCE_MS)
24+
25+
static K_SEM_DEFINE(test_sem, 0, 1);
26+
27+
static void test_sys_work_handler(struct k_work *work)
28+
{
29+
k_sem_take(&test_sem, K_FOREVER);
30+
}
31+
32+
static K_WORK_DEFINE(test_sys_work, test_sys_work_handler);
33+
34+
ZTEST(work_timeout, test_system_workqueue)
35+
{
36+
zassert_false(k_sys_work_queue_is_blocked());
37+
k_work_submit(&test_sys_work);
38+
k_msleep(TEST_SYS_WORKQ_WORK_TIMEOUT_PRE_SLEEP_MS);
39+
zassert_false(k_sys_work_queue_is_blocked());
40+
k_msleep(TEST_SYS_WORKQ_WORK_TIMEOUT_POST_SLEEP_MS);
41+
zassert_true(k_sys_work_queue_is_blocked());
42+
k_sem_give(&test_sem);
43+
k_msleep(TEST_SYS_WORKQ_WORK_TIMEOUT_UNBLOCK_SLEEP_MS);
44+
zassert_false(k_sys_work_queue_is_blocked());
45+
}
46+
47+
ZTEST_SUITE(work_timeout, NULL, NULL, NULL, NULL, NULL);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
tests:
2+
kernel.workqueue.work_timeout:
3+
min_flash: 34
4+
tags: kernel
5+
# this platform fails to run due to #40376, all
6+
# the related CI checks got blocked, so exclude it.
7+
platform_exclude: hifive1

0 commit comments

Comments
 (0)