diff --git a/os/common/abstractions/nasa_osal/include/osapi-os-custom.h b/os/common/abstractions/nasa_osal/include/osapi-os-custom.h new file mode 100644 index 000000000..f14c4fd33 --- /dev/null +++ b/os/common/abstractions/nasa_osal/include/osapi-os-custom.h @@ -0,0 +1,66 @@ +/* + 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. + 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. +*/ + +/** + * @file osapi-os-custom.h + * @brief Custom OSAPI extensions header. + * + * @addtogroup osapi-custom + * @{ + */ + +#ifndef _OSAPI_CUSTOM_H_ +#define _OSAPI_CUSTOM_H_ + +/*===========================================================================*/ +/* Module constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Derived constants and error checks. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Module macros. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + boolean OS_TaskDeleteCheck(void); +#ifdef __cplusplus +} +#endif + +/*===========================================================================*/ +/* Module inline functions. */ +/*===========================================================================*/ + +#endif /* _OSAPI_CUSTOM_H_ */ + +/** @} */ diff --git a/os/common/abstractions/nasa_osal/include/osapi.h b/os/common/abstractions/nasa_osal/include/osapi.h index 46f6dc031..72a7c340a 100644 --- a/os/common/abstractions/nasa_osal/include/osapi.h +++ b/os/common/abstractions/nasa_osal/include/osapi.h @@ -133,6 +133,7 @@ //#include "osapi-os-net.h" //#include "osapi-os-loader.h" #include "osapi-os-timer.h" +#include "osapi-os-custom.h" #ifdef __cplusplus } diff --git a/os/common/abstractions/nasa_osal/src/osapi.c b/os/common/abstractions/nasa_osal/src/osapi.c index c68154be3..aac0cf4bd 100644 --- a/os/common/abstractions/nasa_osal/src/osapi.c +++ b/os/common/abstractions/nasa_osal/src/osapi.c @@ -1777,10 +1777,26 @@ int32 OS_TaskInstallDeleteHandler(void *function_pointer) { return OS_SUCCESS; } +/** + * @brief Check for task termination request. + * @note This is a ChibiOS/RT extension, direct task delete is not + * allowed in RT. + * + * @return The termination request flag. + * @retval false if termination has not been requested. + * @retval true if termination has been requested. + * + * @api + */ +boolean OS_TaskDeleteCheck(void) { + + return (boolean)chThdShouldTerminateX(); +} + /** * @brief Task delete. * @note Limitation, it does not actually kill the thread, it just sets a - * flag in the thread that has then to terminate volountarly. The + * flag in the thread that has then to terminate voluntarily. The * flag can be checked using @p chThdShouldTerminateX(). * * @param[in] task_id the task id diff --git a/test/nasa_osal/configuration.xml b/test/nasa_osal/configuration.xml index 824637759..7eab9b5a9 100644 --- a/test/nasa_osal/configuration.xml +++ b/test/nasa_osal/configuration.xml @@ -10,7 +10,7 @@ - This document has been automatically generated. + Test suite for NASA OSAL implementation over ChibiOS/RT. The purpose of this suite is to perform unit tests on the OSAL module and to converge to 100% code coverage through successive improvements. @@ -44,7 +44,7 @@ THD_WORKING_AREA(wa_test4, TASKS_STACK_SIZE);]]> This sequence tests the NASA OSAL over ChibiOS/RT functionalities related to threading. - @@ -490,6 +498,67 @@ test_assert_sequence("ABCD", "task order violation");]]> + + + OS_TaskDelete() errors + + + Parameters checking in OS_TaskDelete() is tested. + + + + + + + + + + + + + + + + + + + OS_TaskDelete() is invoked with task_id set to -1, an error is expected. + + + + + + + + + + + + + OS_TaskDelete() and OS_TaskInstallDeleteHandler() functionality + + + OS_TaskDelete() and OS_TaskInstallDeleteHandler() are tested for functionality. + + + + + + + + + + + + + + + + + diff --git a/test/nasa_osal/source/test/test_root.c b/test/nasa_osal/source/test/test_root.c index 5c5ef9316..0a1119188 100644 --- a/test/nasa_osal/source/test/test_root.c +++ b/test/nasa_osal/source/test/test_root.c @@ -16,7 +16,9 @@ /** * @mainpage Test Suite Specification - * This document has been automatically generated. + * Test suite for NASA OSAL implementation over ChibiOS/RT. The purpose + * of this suite is to perform unit tests on the OSAL module and to + * converge to 100% code coverage through successive improvements. * *

Test Sequences

* - @subpage test_sequence_001 diff --git a/test/nasa_osal/source/test/test_sequence_001.c b/test/nasa_osal/source/test/test_sequence_001.c index c5863f171..7c7829d8a 100644 --- a/test/nasa_osal/source/test/test_sequence_001.c +++ b/test/nasa_osal/source/test/test_sequence_001.c @@ -30,6 +30,8 @@ *

Test Cases

* - @subpage test_001_001 * - @subpage test_001_002 + * - @subpage test_001_003 + * - @subpage test_001_004 * . */ @@ -57,6 +59,14 @@ static void test_thread3(void) { static void test_thread4(void) { test_emit_token('D'); +} + +static void test_thread_delete(void) { + + while (!OS_TaskDeleteCheck()) { + OS_TaskDelay(1); + } + test_emit_token('A'); } /**************************************************************************** @@ -448,6 +458,58 @@ static const testcase_t test_001_002 = { test_001_002_execute }; +/** + * @page test_001_003 OS_TaskDelete() errors + * + *

Description

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

Test Steps

+ * - OS_TaskDelete() is invoked with task_id set to -1, an error is + * expected. + * . + */ + +static void test_001_003_execute(void) { + + /* OS_TaskDelete() is invoked with task_id set to -1, an error is + expected.*/ + test_set_step(1); + { + int32 err; + + err = OS_TaskDelete((uint32)-1); + test_assert(err == OS_ERR_INVALID_ID, "wrong task id not detected"); + } +} + +static const testcase_t test_001_003 = { + "OS_TaskDelete() errors", + NULL, + NULL, + test_001_003_execute +}; + +/** + * @page test_001_004 OS_TaskDelete() and OS_TaskInstallDeleteHandler() functionality + * + *

Description

+ * OS_TaskDelete() and OS_TaskInstallDeleteHandler() are tested for + * functionality. + * + *

Test Steps

+ */ + +static void test_001_004_execute(void) { +} + +static const testcase_t test_001_004 = { + "OS_TaskDelete() and OS_TaskInstallDeleteHandler() functionality", + NULL, + NULL, + test_001_004_execute +}; + /**************************************************************************** * Exported data. ****************************************************************************/ @@ -458,5 +520,7 @@ static const testcase_t test_001_002 = { const testcase_t * const test_sequence_001[] = { &test_001_001, &test_001_002, + &test_001_003, + &test_001_004, NULL };