From fcbab787e69a4dec8285df9dbdc83bc876d0b141 Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Sun, 6 Mar 2016 11:59:44 +0000 Subject: Test Generator prototype. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9035 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- test/nasa_osal/source/test/test_root.c | 59 ++++++ test/nasa_osal/source/test/test_root.h | 59 ++++++ test/nasa_osal/source/test/test_sequence_001.c | 276 +++++++++++++++++++++++++ test/nasa_osal/source/test/test_sequence_001.h | 17 ++ 4 files changed, 411 insertions(+) create mode 100644 test/nasa_osal/source/test/test_root.c create mode 100644 test/nasa_osal/source/test/test_root.h create mode 100644 test/nasa_osal/source/test/test_sequence_001.c create mode 100644 test/nasa_osal/source/test/test_sequence_001.h (limited to 'test/nasa_osal/source') diff --git a/test/nasa_osal/source/test/test_root.c b/test/nasa_osal/source/test/test_root.c new file mode 100644 index 000000000..5c5ef9316 --- /dev/null +++ b/test/nasa_osal/source/test/test_root.c @@ -0,0 +1,59 @@ +/* + 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. +*/ + +/** + * @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 SPC5_TEST_ROOT + * @{ + */ + +#include "hal.h" +#include "ch_test.h" +#include "test_root.h" + +/*===========================================================================*/ +/* Module exported variables. */ +/*===========================================================================*/ + +/** + * @brief Array of all the test sequences. + */ +const testcase_t * const *test_suite[] = { + test_sequence_001, + NULL +}; + +/*===========================================================================*/ +/* 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/source/test/test_root.h b/test/nasa_osal/source/test/test_root.h new file mode 100644 index 000000000..53efafa5a --- /dev/null +++ b/test/nasa_osal/source/test/test_root.h @@ -0,0 +1,59 @@ +/* + 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. +*/ + +/** + * @file test_root.h + * @brief Test Suite root structures header. + * + * @addtogroup SPC5_TEST_ROOT + * @{ + */ + +#ifndef _SPC5_TEST_ROOT_H_ +#define _SPC5_TEST_ROOT_H_ + +#include "test_sequence_001.h" + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +extern const testcase_t * const *test_suite[]; + +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif + +/*===========================================================================*/ +/* Shared definitions. */ +/*===========================================================================*/ + +#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[]; -- cgit v1.2.3