Test Generator prototype.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9035 35acf78f-673a-0410-8e92-d51de3d6d3f4master
parent
ab30e97aea
commit
fcbab787e6
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<SPC5StudioProject>
|
||||
<Properties />
|
||||
</SPC5StudioProject>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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.
|
||||
*
|
||||
* <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);
|
||||
|
||||
/** @} */
|
|
@ -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_ */
|
||||
|
||||
/** @} */
|
|
@ -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
|
||||
};
|
|
@ -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[];
|
|
@ -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/
|
||||
|
|
Loading…
Reference in New Issue