aboutsummaryrefslogtreecommitdiffstats
path: root/test/nasa_osal
diff options
context:
space:
mode:
authorGiovanni Di Sirio <gdisirio@gmail.com>2016-03-06 11:59:44 +0000
committerGiovanni Di Sirio <gdisirio@gmail.com>2016-03-06 11:59:44 +0000
commitfcbab787e69a4dec8285df9dbdc83bc876d0b141 (patch)
tree57729412e62991212ccee6b3308da9c5755e2723 /test/nasa_osal
parentab30e97aea7a488710da73d12df6d7a57e733c0f (diff)
downloadChibiOS-fcbab787e69a4dec8285df9dbdc83bc876d0b141.tar.gz
ChibiOS-fcbab787e69a4dec8285df9dbdc83bc876d0b141.tar.bz2
ChibiOS-fcbab787e69a4dec8285df9dbdc83bc876d0b141.zip
Test Generator prototype.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9035 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'test/nasa_osal')
-rw-r--r--test/nasa_osal/.cproject57
-rw-r--r--test/nasa_osal/.project32
-rw-r--r--test/nasa_osal/.spc5project4
-rw-r--r--test/nasa_osal/configuration.xml296
-rw-r--r--test/nasa_osal/patch.xml5
-rw-r--r--test/nasa_osal/source/test/test_root.c (renamed from test/nasa_osal/test_root.c)25
-rw-r--r--test/nasa_osal/source/test/test_root.h (renamed from test/nasa_osal/test_root.h)37
-rw-r--r--test/nasa_osal/source/test/test_sequence_001.c276
-rw-r--r--test/nasa_osal/source/test/test_sequence_001.h17
-rw-r--r--test/nasa_osal/test.mk6
10 files changed, 721 insertions, 34 deletions
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 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+ <storageModule moduleId="org.eclipse.cdt.core.settings">
+ <cconfiguration id="com.st.tools.spc5.configuration.default">
+ <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.tools.spc5.configuration.default" moduleId="org.eclipse.cdt.core.settings" name="Default">
+ <externalSettings/>
+ <extensions>
+ <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+ <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+ </extensions>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <configuration artifactName="${ProjName}" buildProperties="" description="" id="com.st.tools.spc5.configuration.default" name="Default" parent="org.eclipse.cdt.build.core.prefbase.cfg">
+ <folderInfo id="com.st.tools.spc5.configuration.default." name="/" resourcePath="">
+ <toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.1601604545" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
+ <targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.1601604545.979430051" name=""/>
+ <builder id="org.eclipse.cdt.build.core.settings.default.builder.1252703125" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder">
+ <outputEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="outputPath" name=""/>
+ </outputEntries>
+ </builder>
+ <tool id="org.eclipse.cdt.build.core.settings.holder.libs.758143064" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
+ <tool id="org.eclipse.cdt.build.core.settings.holder.466800556" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
+ <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.276542087" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+ </tool>
+ <tool id="org.eclipse.cdt.build.core.settings.holder.1590093401" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
+ <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1021209563" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+ </tool>
+ <tool id="org.eclipse.cdt.build.core.settings.holder.1880457386" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
+ <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.1710576459" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+ </tool>
+ </toolChain>
+ </folderInfo>
+ <sourceEntries>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="components"/>
+ <entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="source"/>
+ </sourceEntries>
+ </configuration>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+ </cconfiguration>
+ </storageModule>
+ <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+ <project id="NASA OSAL Tests Generator.null.1740439042" name="NASA OSAL Tests Generator"/>
+ </storageModule>
+ <storageModule moduleId="scannerConfiguration">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ <scannerConfigBuildInfo instanceId="com.st.tools.spc5.configuration.default">
+ <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+ </scannerConfigBuildInfo>
+ </storageModule>
+ <storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
+</cproject>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>NASA OSAL Tests Generator</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <triggers>clean,full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+ <triggers>full,incremental,</triggers>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.st.tools.spc5.spc5StudioPatchBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+ <nature>com.st.tools.spc5.spc5StudioNature</nature>
+ </natures>
+</projectDescription>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SPC5StudioProject>
+ <Properties />
+</SPC5StudioProject>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SPC5-Config version="1.0.0">
+ <application name="Test Suite" version="1.0.0" standalone="true" locked="false">
+ <description>Test specification for the NASA OSAL ChibiOS extension.</description>
+ <component id="org.chibios.spc5.components.platform.generic">
+ <component id="org.chibios.spc5.components.chibios_unitary_tests_engine" />
+ </component>
+ <instances>
+ <instance locked="false" id="org.chibios.spc5.components.platform.generic" />
+ <instance locked="false" id="org.chibios.spc5.components.chibios_unitary_tests_engine">
+ <description>
+ <introduction>
+ <value>This document has been automatically generated.</value>
+ </introduction>
+ </description>
+ <global_data_and_code>
+ <global_definitions>
+ <value><![CDATA[#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);]]></value>
+ </global_definitions>
+ <global_code>
+ <value><![CDATA[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);]]></value>
+ </global_code>
+ </global_data_and_code>
+ <sequences>
+ <sequence>
+ <type index="0">
+ <value>Internal Tests</value>
+ </type>
+ <brief>
+ <value>Threads Functionality</value>
+ </brief>
+ <description>
+ <value>This sequence tests the NASA OSAL over ChibiOS/RT functionalities related to threading.</value>
+ </description>
+ <shared_code>
+ <value><![CDATA[#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');
+}]]></value>
+ </shared_code>
+ <cases>
+ <case>
+ <brief>
+ <value>OS_TaskCreate() errors</value>
+ </brief>
+ <description>
+ <value>Parameters checking in OS_TaskCreate() is tested.</value>
+ </description>
+ <condition>
+ <value />
+ </condition>
+ <various_code>
+ <setup_code>
+ <value />
+ </setup_code>
+ <teardown_code>
+ <value />
+ </teardown_code>
+ <local_variables>
+ <value />
+ </local_variables>
+ </various_code>
+ <steps>
+ <step>
+ <description>
+ <value>OS_TaskCreate() is invoked with task_id set to NULL, an error is expected.</value>
+ </description>
+ <tags>
+ <value />
+ </tags>
+ <code>
+ <value><![CDATA[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");]]></value>
+ </code>
+ </step>
+ <step>
+ <description>
+ <value>OS_TaskCreate() is invoked with task_name set to NULL, an error is expected.</value>
+ </description>
+ <tags>
+ <value />
+ </tags>
+ <code>
+ <value><![CDATA[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");]]></value>
+ </code>
+ </step>
+ <step>
+ <description>
+ <value>OS_TaskCreate() is invoked with stack_pointer set to NULL, an error is expected.</value>
+ </description>
+ <tags>
+ <value />
+ </tags>
+ <code>
+ <value><![CDATA[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");]]></value>
+ </code>
+ </step>
+ <step>
+ <description>
+ <value>OS_TaskCreate() is invoked with a very long task name, an error is expected.</value>
+ </description>
+ <tags>
+ <value />
+ </tags>
+ <code>
+ <value><![CDATA[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");]]></value>
+ </code>
+ </step>
+ <step>
+ <description>
+ <value>OS_TaskCreate() is invoked with priority below and above allowed range, an error is expected.</value>
+ </description>
+ <tags>
+ <value />
+ </tags>
+ <code>
+ <value><![CDATA[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");]]></value>
+ </code>
+ </step>
+ <step>
+ <description>
+ <value>OS_TaskCreate() is invoked with a stack size below minimum, an error is expected.</value>
+ </description>
+ <tags>
+ <value />
+ </tags>
+ <code>
+ <value><![CDATA[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");]]></value>
+ </code>
+ </step>
+ <step>
+ <description>
+ <value>OS_TaskCreate() is invoked twice with duplicated name and then duplicated stack, an error is expected in both cases.</value>
+ </description>
+ <tags>
+ <value />
+ </tags>
+ <code>
+ <value><![CDATA[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");]]></value>
+ </code>
+ </step>
+ </steps>
+ </case>
+ </cases>
+ </sequence>
+ </sequences>
+ </instance>
+ </instances>
+ <exportedFeatures />
+ </application>
+</SPC5-Config>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SPC5-Patch version="1.0.0">
+ <!--It is your patch repository, do not break your XML File.-->
+ <files />
+</SPC5-Patch>
diff --git a/test/nasa_osal/test_root.c b/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.
@@ -15,26 +15,30 @@
*/
/**
+ * @mainpage Test Suite Specification
+ * This document has been automatically generated.
+ *
+ * <h2>Test Sequences</h2>
+ * - @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
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
+ *
+ * <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.
+ ****************************************************************************/
+
+#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
+ *
+ * <h2>Description</h2>
+ * Parameters checking in OS_TaskCreate() is tested.
+ *
+ * <h2>Test Steps</h2>
+ * - 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/