forked from Imagelibrary/rtems
sptests/spthreadlife01: Add self delete test case
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014 embedded brains GmbH. All rights reserved.
|
||||
* Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
@@ -27,6 +27,7 @@
|
||||
#define PRIO_HIGH 2
|
||||
#define PRIO_MID 3
|
||||
#define PRIO_LOW 4
|
||||
#define PRIO_VERY_LOW 5
|
||||
|
||||
const char rtems_test_name[] = "SPTHREADLIFE 1";
|
||||
|
||||
@@ -56,6 +57,10 @@ typedef enum {
|
||||
DELETE_4,
|
||||
DELETE_5,
|
||||
DELETE_6,
|
||||
DELETE_SELF,
|
||||
DELETE_7,
|
||||
DELETE_8,
|
||||
DELETE_9,
|
||||
INVALID
|
||||
} test_state;
|
||||
|
||||
@@ -167,15 +172,19 @@ static void delete_extension(
|
||||
rtems_test_assert(executing != deleted);
|
||||
rtems_test_assert(ctx->main_task_id == rtems_task_self());
|
||||
|
||||
assert_priority(PRIO_INIT);
|
||||
|
||||
switch (ctx->current) {
|
||||
case DELETE_2:
|
||||
assert_priority(PRIO_INIT);
|
||||
ctx->current = DELETE_3;
|
||||
break;
|
||||
case DELETE_5:
|
||||
assert_priority(PRIO_INIT);
|
||||
ctx->current = DELETE_6;
|
||||
break;
|
||||
case DELETE_8:
|
||||
assert_priority(PRIO_VERY_LOW);
|
||||
ctx->current = DELETE_9;
|
||||
break;
|
||||
default:
|
||||
rtems_test_assert(0);
|
||||
break;
|
||||
@@ -189,20 +198,26 @@ static void terminate_extension(Thread_Control *executing)
|
||||
|
||||
rtems_test_assert(ctx->worker_task_id == rtems_task_self());
|
||||
|
||||
assert_priority(PRIO_INIT);
|
||||
|
||||
switch (ctx->current) {
|
||||
case DELETE_0:
|
||||
assert_priority(PRIO_INIT);
|
||||
ctx->current = DELETE_1;
|
||||
sc = rtems_task_delete(RTEMS_SELF);
|
||||
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
|
||||
break;
|
||||
case DELETE_1:
|
||||
assert_priority(PRIO_INIT);
|
||||
ctx->current = DELETE_2;
|
||||
break;
|
||||
case DELETE_4:
|
||||
assert_priority(PRIO_INIT);
|
||||
ctx->current = DELETE_5;
|
||||
break;
|
||||
case DELETE_7:
|
||||
assert_priority(PRIO_LOW);
|
||||
ctx->current = DELETE_8;
|
||||
wake_up_main(ctx);
|
||||
break;
|
||||
default:
|
||||
rtems_test_assert(0);
|
||||
break;
|
||||
@@ -269,6 +284,11 @@ static void worker_task(rtems_task_argument arg)
|
||||
ctx->current = DELETE_4;
|
||||
_Thread_Enable_dispatch();
|
||||
break;
|
||||
case DELETE_SELF:
|
||||
ctx->current = DELETE_7;
|
||||
rtems_task_delete(RTEMS_SELF);
|
||||
rtems_test_assert(0);
|
||||
break;
|
||||
default:
|
||||
rtems_test_assert(0);
|
||||
break;
|
||||
@@ -370,7 +390,14 @@ static void test(void)
|
||||
|
||||
rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
|
||||
|
||||
rtems_test_assert(ctx->current == DELETE_6);
|
||||
create_and_start_worker(ctx);
|
||||
|
||||
change_state(ctx, DELETE_6, DELETE_SELF, INVALID);
|
||||
set_priority(PRIO_VERY_LOW);
|
||||
|
||||
rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
|
||||
|
||||
rtems_test_assert(ctx->current == DELETE_9);
|
||||
}
|
||||
|
||||
static void Init(rtems_task_argument arg)
|
||||
@@ -397,6 +424,8 @@ static void Init(rtems_task_argument arg)
|
||||
}, \
|
||||
RTEMS_TEST_INITIAL_EXTENSION
|
||||
|
||||
#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
|
||||
|
||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
|
||||
Reference in New Issue
Block a user