git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9041 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
Giovanni Di Sirio 2016-03-06 15:32:09 +00:00
parent eda15708d2
commit cd2beca38c
2 changed files with 0 additions and 475 deletions

View File

@ -1,453 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include "hal.h"
#include "ch.h"
#include "osapi.h"
#include "ch_test.h"
/**
* @page test_sequence_001 Threads Functionality
*
* File: @ref test_sequence_001.c
*
* <h2>Description</h2>
* This sequence tests the NASA OSAL over ChibiOS/RT functionalities related
* to threading.
*
* <h2>Test Cases</h2>
* - @subpage test_001_001
* .
*/
/****************************************************************************
* Shared code.
****************************************************************************/
static void test_thread1(void) {
test_emit_token('A');
}
static void test_thread2(void) {
test_emit_token('B');
}
static void test_thread3(void) {
test_emit_token('C');
}
static void test_thread4(void) {
test_emit_token('D');
}
/****************************************************************************
* Test cases.
****************************************************************************/
#if TRUE || defined(__DOXYGEN__)
/**
* @page test_001_001 OS_TaskCreate() errors
*
* <h2>Description</h2>
* Parameters checking in OS_TaskCreate() is tested.
*
* <h2>Conditions</h2>
* None.
*
* <h2>Test Steps</h2>
* - Testing NULL task_id.
* - Testing NULL task_name.
* - Testing NULL stack_pointer.
* - Testing long task name.
* - Testing priority limits.
* - Testing insufficient stack size.
* - Testing task name or task stack conflict.
* .
*/
static void test_001_001_execute(void) {
/* Testing NULL task_id.*/
test_set_step(1);
{
int32 err;
err = OS_TaskCreate(NULL, /* Error.*/
"failing thread",
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
TASKS_BASE_PRIORITY,
0);
test_assert(err == OS_INVALID_POINTER, "NULL not detected");
test_assert_sequence("", "task executed");
}
/* Testing NULL task_name.*/
test_set_step(2);
{
int32 err;
uint32 tid;
err = OS_TaskCreate(&tid,
NULL, /* Error.*/
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
TASKS_BASE_PRIORITY,
0);
test_assert(err == OS_INVALID_POINTER, "NULL not detected");
test_assert_sequence("", "task executed");
}
/* Testing NULL stack_pointer.*/
test_set_step(3);
{
int32 err;
uint32 tid;
err = OS_TaskCreate(&tid,
"failing thread",
test_thread1,
(uint32 *)NULL, /* Error.*/
sizeof wa_test1,
TASKS_BASE_PRIORITY,
0);
test_assert(err == OS_INVALID_POINTER, "NULL not detected");
test_assert_sequence("", "task executed");
}
/* Testing long task name.*/
test_set_step(4);
{
int32 err;
uint32 tid;
err = OS_TaskCreate(&tid,
"this is a very very long task name", /* Error.*/
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
TASKS_BASE_PRIORITY,
0);
test_assert(err == OS_ERR_NAME_TOO_LONG, "name limit not detected");
test_assert_sequence("", "task executed");
}
/* Testing priority limits.*/
test_set_step(5);
{
int32 err;
uint32 tid;
err = OS_TaskCreate(&tid,
"failing thread",
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
0, /* Error.*/
0);
test_assert(err == OS_ERR_INVALID_PRIORITY, "priority error not detected");
test_assert_sequence("", "task executed");
err = OS_TaskCreate(&tid,
"failing thread",
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
256, /* Error.*/
0);
test_assert(err == OS_ERR_INVALID_PRIORITY, "priority error not detected");
test_assert_sequence("", "task executed");
}
/* Testing insufficient stack size.*/
test_set_step(6);
{
int32 err;
uint32 tid;
err = OS_TaskCreate(&tid,
"failing thread",
test_thread1,
(uint32 *)wa_test1,
16, /* Error.*/
TASKS_BASE_PRIORITY,
0);
test_assert(err == OS_INVALID_INT_NUM, "stack insufficient size not detected");
test_assert_sequence("", "task executed");
}
/* Testing task name or task stack conflict.*/
test_set_step(7);
{
int32 err;
uint32 tid;
err = OS_TaskCreate(&tid,
"running thread",
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
TASKS_BASE_PRIORITY,
0);
test_assert(err == OS_SUCCESS, "task creation failed");
err = OS_TaskCreate(&tid,
"running thread",
test_thread2,
(uint32 *)wa_test2,
sizeof wa_test2,
TASKS_BASE_PRIORITY,
0);
test_assert(err == OS_ERR_NAME_TAKEN, "name conflict not detected");
err = OS_TaskCreate(&tid,
"another running thread",
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
TASKS_BASE_PRIORITY,
0);
test_assert(err == OS_ERR_NO_FREE_IDS, "stack conflict not detected");
OS_TaskDelay(5);
test_assert_sequence("A", "task not executed");
err = OS_TaskCreate(&tid,
"running thread",
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
TASKS_BASE_PRIORITY,
0);
test_assert(err == OS_SUCCESS, "task creation failed");
OS_TaskDelay(5);
test_assert_sequence("A", "task not executed");
}
}
static const testcase_t test_001_001 = {
"OS_TaskCreate() errors",
NULL,
NULL,
test_001_001_execute
};
#endif /* TRUE */
#if TRUE || defined(__DOXYGEN__)
/**
* @page test_001_001 OS_TaskCreate() priority ordering
*
* <h2>Description</h2>
* Four tasks are created at different priorities and in different orders
* then their execution order is tested.
*
* <h2>Conditions</h2>
* None.
*
* <h2>Test Steps</h2>
* - Tasks are created in priority order from low to high.
* - Tasks are made runnable atomically and their execution order tested.
* - Tasks are created in priority order from high to low.
* - Tasks are made runnable atomically and their execution order tested.
* - Tasks are created in an not ordered way.
* - Tasks are made runnable atomically and their execution order tested.
* .
*/
static void test_001_002_execute(void) {
/* Tasks are created in priority order from low to high.*/
test_set_step(1);
{
int32 err;
uint32 tid1, tid2, tid3, tid4;
err = OS_TaskCreate(&tid4,
"running thread 4",
test_thread4,
(uint32 *)wa_test4,
sizeof wa_test4,
TASKS_BASE_PRIORITY - 0,
0);
test_assert(err == OS_SUCCESS, "task 4 creation failed");
err = OS_TaskCreate(&tid3,
"running thread 3",
test_thread3,
(uint32 *)wa_test3,
sizeof wa_test3,
TASKS_BASE_PRIORITY - 1,
0);
test_assert(err == OS_SUCCESS, "task 3 creation failed");
err = OS_TaskCreate(&tid2,
"running thread 2",
test_thread2,
(uint32 *)wa_test2,
sizeof wa_test2,
TASKS_BASE_PRIORITY - 2,
0);
test_assert(err == OS_SUCCESS, "task 2 creation failed");
err = OS_TaskCreate(&tid1,
"running thread 1",
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
TASKS_BASE_PRIORITY - 3,
0);
test_assert(err == OS_SUCCESS, "task 1 creation failed");
}
/* Tasks are made runnable atomically and their execution order tested.*/
test_set_step(2);
{
OS_TaskDelay(5);
test_assert_sequence("ABCD", "task order violation");
}
/* Tasks are created in priority order from high to low.*/
test_set_step(3);
{
int32 err;
uint32 tid1, tid2, tid3, tid4;
err = OS_TaskCreate(&tid1,
"running thread 1",
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
TASKS_BASE_PRIORITY - 3,
0);
test_assert(err == OS_SUCCESS, "task 1 creation failed");
err = OS_TaskCreate(&tid2,
"running thread 2",
test_thread2,
(uint32 *)wa_test2,
sizeof wa_test2,
TASKS_BASE_PRIORITY - 2,
0);
test_assert(err == OS_SUCCESS, "task 2 creation failed");
err = OS_TaskCreate(&tid3,
"running thread 3",
test_thread3,
(uint32 *)wa_test3,
sizeof wa_test3,
TASKS_BASE_PRIORITY - 1,
0);
test_assert(err == OS_SUCCESS, "task 3 creation failed");
err = OS_TaskCreate(&tid4,
"running thread 4",
test_thread4,
(uint32 *)wa_test4,
sizeof wa_test4,
TASKS_BASE_PRIORITY - 0,
0);
test_assert(err == OS_SUCCESS, "task 4 creation failed");
}
/* Tasks are made runnable atomically and their execution order tested.*/
test_set_step(4);
{
OS_TaskDelay(5);
test_assert_sequence("ABCD", "task order violation");
}
/* Tasks are created in an not ordered way.*/
test_set_step(5);
{
int32 err;
uint32 tid1, tid2, tid3, tid4;
err = OS_TaskCreate(&tid2,
"running thread 2",
test_thread2,
(uint32 *)wa_test2,
sizeof wa_test2,
TASKS_BASE_PRIORITY - 2,
0);
test_assert(err == OS_SUCCESS, "task 2 creation failed");
err = OS_TaskCreate(&tid1,
"running thread 1",
test_thread1,
(uint32 *)wa_test1,
sizeof wa_test1,
TASKS_BASE_PRIORITY - 3,
0);
test_assert(err == OS_SUCCESS, "task 1 creation failed");
err = OS_TaskCreate(&tid4,
"running thread 4",
test_thread4,
(uint32 *)wa_test4,
sizeof wa_test4,
TASKS_BASE_PRIORITY - 0,
0);
test_assert(err == OS_SUCCESS, "task 4 creation failed");
err = OS_TaskCreate(&tid3,
"running thread 3",
test_thread3,
(uint32 *)wa_test3,
sizeof wa_test3,
TASKS_BASE_PRIORITY - 1,
0);
test_assert(err == OS_SUCCESS, "task 3 creation failed");
}
/* Tasks are made runnable atomically and their execution order tested.*/
test_set_step(6);
{
OS_TaskDelay(5);
test_assert_sequence("ABCD", "task order violation");
}
}
static const testcase_t test_001_002 = {
"OS_TaskCreate() priority ordering",
NULL,
NULL,
test_001_002_execute
};
#endif /* TRUE */
/****************************************************************************
* Exported data.
****************************************************************************/
/**
* @brief Sequence brief description.
*/
const testcase_t * const test_sequence_001[] = {
#if TRUE || defined(__DOXYGEN__)
&test_001_001,
#endif
#if TRUE || defined(__DOXYGEN__)
&test_001_002,
#endif
NULL
};

View File

@ -1,22 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef _TEST_SEQUENCE_001_H_
#define _TEST_SEQUENCE_001_H_
extern const testcase_t * const test_sequence_001[];
#endif /* _TEST_SEQUENCE_001_H_ */