diff --git a/test/nasa_osal/.cproject b/test/nasa_osal/.cproject new file mode 100644 index 000000000..1f35e2ebb --- /dev/null +++ b/test/nasa_osal/.cproject @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/nasa_osal/.project b/test/nasa_osal/.project new file mode 100644 index 000000000..0247cf4b7 --- /dev/null +++ b/test/nasa_osal/.project @@ -0,0 +1,32 @@ + + + NASA OSAL Tests Generator + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + com.st.tools.spc5.spc5StudioPatchBuilder + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + com.st.tools.spc5.spc5StudioNature + + diff --git a/test/nasa_osal/.spc5project b/test/nasa_osal/.spc5project new file mode 100644 index 000000000..104c5aa76 --- /dev/null +++ b/test/nasa_osal/.spc5project @@ -0,0 +1,4 @@ + + + + diff --git a/test/nasa_osal/configuration.xml b/test/nasa_osal/configuration.xml new file mode 100644 index 000000000..4f89b0e1b --- /dev/null +++ b/test/nasa_osal/configuration.xml @@ -0,0 +1,296 @@ + + + + Test specification for the NASA OSAL ChibiOS extension. + + + + + + + + + This document has been automatically generated. + + + + + + + + + + + + + + Internal Tests + + + Threads Functionality + + + This sequence tests the NASA OSAL over ChibiOS/RT functionalities related to threading. + + + + + + + + OS_TaskCreate() errors + + + Parameters checking in OS_TaskCreate() is tested. + + + + + + + + + + + + + + + + + + + OS_TaskCreate() is invoked with task_id set to NULL, an error is expected. + + + + + + + + + + + OS_TaskCreate() is invoked with task_name set to NULL, an error is expected. + + + + + + + + + + + OS_TaskCreate() is invoked with stack_pointer set to NULL, an error is expected. + + + + + + + + + + + OS_TaskCreate() is invoked with a very long task name, an error is expected. + + + + + + + + + + + OS_TaskCreate() is invoked with priority below and above allowed range, an error is expected. + + + + + + + + + + + OS_TaskCreate() is invoked with a stack size below minimum, an error is expected. + + + + + + + + + + + OS_TaskCreate() is invoked twice with duplicated name and then duplicated stack, an error is expected in both cases. + + + + + + + + + + + + + + + + + + diff --git a/test/nasa_osal/patch.xml b/test/nasa_osal/patch.xml new file mode 100644 index 000000000..879b2ed23 --- /dev/null +++ b/test/nasa_osal/patch.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/test/nasa_osal/test_root.c b/test/nasa_osal/source/test/test_root.c similarity index 81% rename from test/nasa_osal/test_root.c rename to test/nasa_osal/source/test/test_root.c index e6a803c40..5c5ef9316 100644 --- a/test/nasa_osal/test_root.c +++ b/test/nasa_osal/source/test/test_root.c @@ -1,5 +1,5 @@ /* - ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio + ChibiOS - Copyright (C) 2006..2016 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. @@ -14,27 +14,31 @@ limitations under the License. */ +/** + * @mainpage Test Suite Specification + * This document has been automatically generated. + * + *

Test Sequences

+ * - @subpage test_sequence_001 + * . + */ + /** * @file test_root.c * @brief Test Suite root structures code. * - * @addtogroup CH_TEST_ROOT + * @addtogroup SPC5_TEST_ROOT * @{ */ #include "hal.h" #include "ch_test.h" -#include "osapi.h" +#include "test_root.h" /*===========================================================================*/ /* Module exported variables. */ /*===========================================================================*/ -THD_WORKING_AREA(wa_test1, TASKS_STACK_SIZE); -THD_WORKING_AREA(wa_test2, TASKS_STACK_SIZE); -THD_WORKING_AREA(wa_test3, TASKS_STACK_SIZE); -THD_WORKING_AREA(wa_test4, TASKS_STACK_SIZE); - /** * @brief Array of all the test sequences. */ @@ -47,4 +51,9 @@ const testcase_t * const *test_suite[] = { /* Shared code. */ /*===========================================================================*/ +THD_WORKING_AREA(wa_test1, TASKS_STACK_SIZE); +THD_WORKING_AREA(wa_test2, TASKS_STACK_SIZE); +THD_WORKING_AREA(wa_test3, TASKS_STACK_SIZE); +THD_WORKING_AREA(wa_test4, TASKS_STACK_SIZE); + /** @} */ diff --git a/test/nasa_osal/test_root.h b/test/nasa_osal/source/test/test_root.h similarity index 77% rename from test/nasa_osal/test_root.h rename to test/nasa_osal/source/test/test_root.h index a30317d22..53efafa5a 100644 --- a/test/nasa_osal/test_root.h +++ b/test/nasa_osal/source/test/test_root.h @@ -18,43 +18,24 @@ * @file test_root.h * @brief Test Suite root structures header. * - * @addtogroup CH_TEST_ROOT + * @addtogroup SPC5_TEST_ROOT * @{ */ -#ifndef _TEST_ROOT_H_ -#define _TEST_ROOT_H_ - -#include "ch.h" +#ifndef _SPC5_TEST_ROOT_H_ +#define _SPC5_TEST_ROOT_H_ #include "test_sequence_001.h" -/*===========================================================================*/ -/* Default definitions. */ -/*===========================================================================*/ - -/* Global test suite name, it is printed on top of the test - report header.*/ -#define TEST_SUITE_NAME "NASA OSAL over ChibiOS/RT Test Suite" - -#define TASKS_BASE_PRIORITY 200 -#define TASKS_STACK_SIZE 256 - /*===========================================================================*/ /* External declarations. */ /*===========================================================================*/ extern const testcase_t * const *test_suite[]; -extern THD_WORKING_AREA(wa_test1, TASKS_STACK_SIZE); -extern THD_WORKING_AREA(wa_test2, TASKS_STACK_SIZE); -extern THD_WORKING_AREA(wa_test3, TASKS_STACK_SIZE); -extern THD_WORKING_AREA(wa_test4, TASKS_STACK_SIZE); - #ifdef __cplusplus extern "C" { #endif - #ifdef __cplusplus } #endif @@ -63,6 +44,16 @@ extern "C" { /* Shared definitions. */ /*===========================================================================*/ -#endif /* _TEST_ROOT_H_ */ +#define TEST_SUITE_NAME "NASA OSAL over ChibiOS/RT Test Suite" + +#define TASKS_BASE_PRIORITY 200 +#define TASKS_STACK_SIZE 256 + +extern THD_WORKING_AREA(wa_test1, TASKS_STACK_SIZE); +extern THD_WORKING_AREA(wa_test2, TASKS_STACK_SIZE); +extern THD_WORKING_AREA(wa_test3, TASKS_STACK_SIZE); +extern THD_WORKING_AREA(wa_test4, TASKS_STACK_SIZE); + +#endif /* _SPC5_TEST_ROOT_H_ */ /** @} */ diff --git a/test/nasa_osal/source/test/test_sequence_001.c b/test/nasa_osal/source/test/test_sequence_001.c new file mode 100644 index 000000000..871a07f83 --- /dev/null +++ b/test/nasa_osal/source/test/test_sequence_001.c @@ -0,0 +1,276 @@ +/* + 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_test.h" +#include "test_root.h" + +/** + * @page test_sequence_001 Threads Functionality + * + * File: @ref test_sequence_001.c + * + *

Description

+ * This sequence tests the NASA OSAL over ChibiOS/RT functionalities + * related to threading. + * + *

Test Cases

+ * - @subpage test_001_001 + * . + */ + +/**************************************************************************** + * Shared code. + ****************************************************************************/ + +#include "osapi.H" + +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. + ****************************************************************************/ + +/** + * @page test_001_001 OS_TaskCreate() errors + * + *

Description

+ * Parameters checking in OS_TaskCreate() is tested. + * + *

Test Steps

+ * - OS_TaskCreate() is invoked with task_id set to NULL, an error is + * expected. + * - OS_TaskCreate() is invoked with task_name set to NULL, an error is + * expected. + * - OS_TaskCreate() is invoked with stack_pointer set to NULL, an + * error is expected. + * - OS_TaskCreate() is invoked with a very long task name, an error is + * expected. + * - OS_TaskCreate() is invoked with priority below and above allowed + * range, an error is expected. + * - OS_TaskCreate() is invoked with a stack size below minimum, an + * error is expected. + * - OS_TaskCreate() is invoked twice with duplicated name and then + * duplicated stack, an error is expected in both cases. + * . + */ + +static void test_001_001_execute(void) { + + /* OS_TaskCreate() is invoked with task_id set to NULL, an error is + expected.*/ + 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"); + } + + /* OS_TaskCreate() is invoked with task_name set to NULL, an error is + expected.*/ + 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"); + } + + /* OS_TaskCreate() is invoked with stack_pointer set to NULL, an + error is expected.*/ + 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"); + } + + /* OS_TaskCreate() is invoked with a very long task name, an error is + expected.*/ + 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"); + } + + /* OS_TaskCreate() is invoked with priority below and above allowed + range, an error is expected.*/ + 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"); + } + + /* OS_TaskCreate() is invoked with a stack size below minimum, an + error is expected.*/ + 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"); + } + + /* OS_TaskCreate() is invoked twice with duplicated name and then + duplicated stack, an error is expected in both cases.*/ + 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 +}; + +/**************************************************************************** + * Exported data. + ****************************************************************************/ + +/** + * @brief Threads Functionality. + */ +const testcase_t * const test_sequence_001[] = { + &test_001_001, + NULL +}; diff --git a/test/nasa_osal/source/test/test_sequence_001.h b/test/nasa_osal/source/test/test_sequence_001.h new file mode 100644 index 000000000..83ef96518 --- /dev/null +++ b/test/nasa_osal/source/test/test_sequence_001.h @@ -0,0 +1,17 @@ +/* + 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. +*/ + +extern const testcase_t * const test_sequence_001[]; diff --git a/test/nasa_osal/test.mk b/test/nasa_osal/test.mk index dcaa7197f..daf008362 100644 --- a/test/nasa_osal/test.mk +++ b/test/nasa_osal/test.mk @@ -1,8 +1,8 @@ # List of all the NASA OSAL over ChibiOS/RT test files. TESTSRC = ${CHIBIOS}/test/lib/ch_test.c \ - ${CHIBIOS}/test/nasa_osal/test_root.c \ - ${CHIBIOS}/test/nasa_osal/test_sequence_001.c + ${CHIBIOS}/test/nasa_osal/source/test/test_root.c \ + ${CHIBIOS}/test/nasa_osal/source/test/test_sequence_001.c # Required include directories TESTINC = ${CHIBIOS}/test/lib \ - ${CHIBIOS}/test/nasa_osal + ${CHIBIOS}/test/nasa_osal/source/test/