tests: kernel: added test case k_is_preempt_thread
tests/kernel/threads_scheduling/schedule_api: added test case to cover k_is_preempt_thread. Jira: ZEP-1242 Change-Id: I4327438dffaa59abcfe1e41813b45abee88506b2 Signed-off-by: Sharron LIU <sharron.liu@intel.com>
This commit is contained in:
parent
0dc4dd46d4
commit
d15d264da9
5 changed files with 91 additions and 1 deletions
|
@ -1 +1,2 @@
|
|||
CONFIG_ZTEST=y
|
||||
CONFIG_IRQ_OFFLOAD=y
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
include $(ZEPHYR_BASE)/tests/Makefile.test
|
||||
|
||||
obj-y = main.o test_sched_priority.o test_sched_timeslice_and_lock.o
|
||||
obj-y += test_sched_is_preempt_thread.o
|
||||
|
|
|
@ -27,7 +27,8 @@ void test_main(void *p1, void *p2, void *p3)
|
|||
ztest_unit_test(test_time_slicing_preemptible),
|
||||
ztest_unit_test(test_time_slicing_disable_preemptible),
|
||||
ztest_unit_test(test_lock_preemptible),
|
||||
ztest_unit_test(test_unlock_preemptible)
|
||||
ztest_unit_test(test_unlock_preemptible),
|
||||
ztest_unit_test(test_sched_is_preempt_thread)
|
||||
);
|
||||
ztest_run_test_suite(test_threads_scheduling);
|
||||
}
|
||||
|
|
|
@ -31,5 +31,6 @@ void test_time_slicing_preemptible(void);
|
|||
void test_time_slicing_disable_preemptible(void);
|
||||
void test_lock_preemptible(void);
|
||||
void test_unlock_preemptible(void);
|
||||
void test_sched_is_preempt_thread(void);
|
||||
|
||||
#endif /* __TEST_SCHED_H__ */
|
||||
|
|
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* Copyright (c) 2017 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup t_sched_api
|
||||
* @{
|
||||
* @defgroup t_sched_is_preempt_thread test_sched_is_preempt_thread
|
||||
* @brief TestPurpose: verify context type is preempt thread
|
||||
* - API coverage
|
||||
* -# k_is_preempt_thread
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include <ztest.h>
|
||||
#include <irq_offload.h>
|
||||
|
||||
/*macro definition*/
|
||||
#define STACK_SIZE 512
|
||||
|
||||
/*local variables*/
|
||||
static char __noinit __stack tstack[STACK_SIZE];
|
||||
static struct k_sem end_sema;
|
||||
|
||||
static void tIsr(void *data)
|
||||
{
|
||||
/** TESTPOINT: The code is running at ISR.*/
|
||||
assert_false(k_is_preempt_thread(), NULL);
|
||||
}
|
||||
|
||||
static void tpreempt_ctx(void *p1, void *p2, void *p3)
|
||||
{
|
||||
/** TESTPOINT: The thread's priority is in the preemptible range.*/
|
||||
assert_true(k_is_preempt_thread(), NULL);
|
||||
k_sched_lock();
|
||||
/** TESTPOINT: The thread has locked the scheduler.*/
|
||||
assert_false(k_is_preempt_thread(), NULL);
|
||||
k_sched_unlock();
|
||||
/** TESTPOINT: The thread has not locked the scheduler.*/
|
||||
assert_true(k_is_preempt_thread(), NULL);
|
||||
k_thread_priority_set(k_current_get(), K_PRIO_COOP(1));
|
||||
/** TESTPOINT: The thread's priority is in the cooperative range.*/
|
||||
assert_false(k_is_preempt_thread(), NULL);
|
||||
k_sem_give(&end_sema);
|
||||
}
|
||||
|
||||
static void tcoop_ctx(void *p1, void *p2, void *p3)
|
||||
{
|
||||
/** TESTPOINT: The thread's priority is in the cooperative range.*/
|
||||
assert_false(k_is_preempt_thread(), NULL);
|
||||
k_thread_priority_set(k_current_get(), K_PRIO_PREEMPT(1));
|
||||
/** TESTPOINT: The thread's priority is in the preemptible range.*/
|
||||
assert_true(k_is_preempt_thread(), NULL);
|
||||
k_sched_lock();
|
||||
/** TESTPOINT: The thread has locked the scheduler.*/
|
||||
assert_false(k_is_preempt_thread(), NULL);
|
||||
k_sched_unlock();
|
||||
/** TESTPOINT: The thread has not locked the scheduler.*/
|
||||
assert_true(k_is_preempt_thread(), NULL);
|
||||
k_sem_give(&end_sema);
|
||||
}
|
||||
|
||||
/*test cases*/
|
||||
void test_sched_is_preempt_thread(void)
|
||||
{
|
||||
k_sem_init(&end_sema, 0, 1);
|
||||
|
||||
/*create preempt thread*/
|
||||
k_tid_t tid = k_thread_spawn(tstack, STACK_SIZE,
|
||||
tpreempt_ctx, NULL, NULL, NULL,
|
||||
K_PRIO_PREEMPT(1), 0, 0);
|
||||
k_sem_take(&end_sema, K_FOREVER);
|
||||
k_thread_abort(tid);
|
||||
|
||||
/*create coop thread*/
|
||||
tid = k_thread_spawn(tstack, STACK_SIZE,
|
||||
tcoop_ctx, NULL, NULL, NULL,
|
||||
K_PRIO_COOP(1), 0, 0);
|
||||
k_sem_take(&end_sema, K_FOREVER);
|
||||
k_thread_abort(tid);
|
||||
|
||||
/*invoke isr*/
|
||||
irq_offload(tIsr, NULL);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue