sptests/spthreadlife01: Add self delete test case

This commit is contained in:
Sebastian Huber
2016-05-17 07:36:27 +02:00
parent 9fd72713c9
commit adc819ef76

View File

@@ -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 * embedded brains GmbH
* Dornierstr. 4 * Dornierstr. 4
@@ -27,6 +27,7 @@
#define PRIO_HIGH 2 #define PRIO_HIGH 2
#define PRIO_MID 3 #define PRIO_MID 3
#define PRIO_LOW 4 #define PRIO_LOW 4
#define PRIO_VERY_LOW 5
const char rtems_test_name[] = "SPTHREADLIFE 1"; const char rtems_test_name[] = "SPTHREADLIFE 1";
@@ -56,6 +57,10 @@ typedef enum {
DELETE_4, DELETE_4,
DELETE_5, DELETE_5,
DELETE_6, DELETE_6,
DELETE_SELF,
DELETE_7,
DELETE_8,
DELETE_9,
INVALID INVALID
} test_state; } test_state;
@@ -167,15 +172,19 @@ static void delete_extension(
rtems_test_assert(executing != deleted); rtems_test_assert(executing != deleted);
rtems_test_assert(ctx->main_task_id == rtems_task_self()); rtems_test_assert(ctx->main_task_id == rtems_task_self());
assert_priority(PRIO_INIT);
switch (ctx->current) { switch (ctx->current) {
case DELETE_2: case DELETE_2:
assert_priority(PRIO_INIT);
ctx->current = DELETE_3; ctx->current = DELETE_3;
break; break;
case DELETE_5: case DELETE_5:
assert_priority(PRIO_INIT);
ctx->current = DELETE_6; ctx->current = DELETE_6;
break; break;
case DELETE_8:
assert_priority(PRIO_VERY_LOW);
ctx->current = DELETE_9;
break;
default: default:
rtems_test_assert(0); rtems_test_assert(0);
break; break;
@@ -189,20 +198,26 @@ static void terminate_extension(Thread_Control *executing)
rtems_test_assert(ctx->worker_task_id == rtems_task_self()); rtems_test_assert(ctx->worker_task_id == rtems_task_self());
assert_priority(PRIO_INIT);
switch (ctx->current) { switch (ctx->current) {
case DELETE_0: case DELETE_0:
assert_priority(PRIO_INIT);
ctx->current = DELETE_1; ctx->current = DELETE_1;
sc = rtems_task_delete(RTEMS_SELF); sc = rtems_task_delete(RTEMS_SELF);
rtems_test_assert(sc == RTEMS_SUCCESSFUL); rtems_test_assert(sc == RTEMS_SUCCESSFUL);
break; break;
case DELETE_1: case DELETE_1:
assert_priority(PRIO_INIT);
ctx->current = DELETE_2; ctx->current = DELETE_2;
break; break;
case DELETE_4: case DELETE_4:
assert_priority(PRIO_INIT);
ctx->current = DELETE_5; ctx->current = DELETE_5;
break; break;
case DELETE_7:
assert_priority(PRIO_LOW);
ctx->current = DELETE_8;
wake_up_main(ctx);
break;
default: default:
rtems_test_assert(0); rtems_test_assert(0);
break; break;
@@ -269,6 +284,11 @@ static void worker_task(rtems_task_argument arg)
ctx->current = DELETE_4; ctx->current = DELETE_4;
_Thread_Enable_dispatch(); _Thread_Enable_dispatch();
break; break;
case DELETE_SELF:
ctx->current = DELETE_7;
rtems_task_delete(RTEMS_SELF);
rtems_test_assert(0);
break;
default: default:
rtems_test_assert(0); rtems_test_assert(0);
break; break;
@@ -370,7 +390,14 @@ static void test(void)
rtems_test_assert(rtems_resource_snapshot_check(&snapshot)); 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) static void Init(rtems_task_argument arg)
@@ -397,6 +424,8 @@ static void Init(rtems_task_argument arg)
}, \ }, \
RTEMS_TEST_INITIAL_EXTENSION RTEMS_TEST_INITIAL_EXTENSION
#define CONFIGURE_INIT_TASK_INITIAL_MODES RTEMS_DEFAULT_MODES
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_INIT #define CONFIGURE_INIT