diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-08-11 11:24:02 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-08-31 07:13:56 +0200 |
commit | af60e1845e0311e15024aff8f12d3c6a46226856 (patch) | |
tree | 9f665baa776ab21d3294ef17fb7e53c368169f0e | |
parent | f05a61900adbc3c0f0c45d0fd543c963f2686ac2 (diff) |
validation: Test acfg option default values
-rw-r--r-- | spec/build/testsuites/validation/grp.yml | 2 | ||||
-rw-r--r-- | spec/build/testsuites/validation/validation-acfg-0.yml | 21 | ||||
-rw-r--r-- | testsuites/validation/tc-acfg-default.c | 312 | ||||
-rw-r--r-- | testsuites/validation/ts-validation-acfg-0.c | 135 |
4 files changed, 470 insertions, 0 deletions
diff --git a/spec/build/testsuites/validation/grp.yml b/spec/build/testsuites/validation/grp.yml index d20be5d091..3934ee10f5 100644 --- a/spec/build/testsuites/validation/grp.yml +++ b/spec/build/testsuites/validation/grp.yml @@ -51,6 +51,8 @@ links: - role: build-dependency uid: validation-2 - role: build-dependency + uid: validation-acfg-0 +- role: build-dependency uid: validation-dev-0 - role: build-dependency uid: validation-io-kernel diff --git a/spec/build/testsuites/validation/validation-acfg-0.yml b/spec/build/testsuites/validation/validation-acfg-0.yml new file mode 100644 index 0000000000..376c2a5836 --- /dev/null +++ b/spec/build/testsuites/validation/validation-acfg-0.yml @@ -0,0 +1,21 @@ +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause +build-type: test-program +cflags: [] +copyrights: +- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) +cppflags: [] +cxxflags: [] +enabled-by: true +features: c cprogram +includes: [] +ldflags: [] +links: [] +source: +- testsuites/validation/tc-acfg-default.c +- testsuites/validation/ts-validation-acfg-0.c +stlib: [] +target: testsuites/validation/ts-validation-acfg-0.exe +type: build +use-after: +- validation +use-before: [] diff --git a/testsuites/validation/tc-acfg-default.c b/testsuites/validation/tc-acfg-default.c new file mode 100644 index 0000000000..04e23a8ec5 --- /dev/null +++ b/testsuites/validation/tc-acfg-default.c @@ -0,0 +1,312 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSTestCaseAcfgValDefault + */ + +/* + * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems.h> +#include <string.h> + +#include "tx-support.h" + +#include <rtems/test.h> + +/** + * @defgroup RTEMSTestCaseAcfgValDefault spec:/acfg/val/default + * + * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg0 + * + * @brief Tests the default values of application configuration options. + * + * This test case performs the following actions: + * + * - Try to create a barrier. + * + * - Check that the returned status code is RTEMS_TOO_MANY. + * + * - Try to construct a message queue. + * + * - Check that the returned status code is RTEMS_TOO_MANY. + * + * - Try to create a partition. + * + * - Check that the returned status code is RTEMS_TOO_MANY. + * + * - Try to create a period. + * + * - Check that the returned status code is RTEMS_TOO_MANY. + * + * - Check that the processor maximum is one. + * + * - Try to create a semaphore. + * + * - Check that the returned status code is RTEMS_TOO_MANY. + * + * - Try to construct a task. + * + * - Check that the returned status code is RTEMS_TOO_MANY. + * + * - Try to create a timer. + * + * - Check that the returned status code is RTEMS_TOO_MANY. + * + * - Try to create a user extension set. + * + * - Check that the returned status code is RTEMS_TOO_MANY. + * + * @{ + */ + +#define NAME rtems_build_name( 'N', 'A', 'M', 'E' ) + +RTEMS_ALIGNED(RTEMS_TASK_STORAGE_ALIGNMENT) static char task_storage[ + RTEMS_TASK_STORAGE_SIZE( + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_ATTRIBUTES + ) +]; + +static const rtems_task_config task_config = { + .name = NAME, + .initial_priority = 1, + .storage_area = task_storage, + .storage_size = sizeof( task_storage ), + .maximum_thread_local_storage_size = 0, + .initial_modes = RTEMS_DEFAULT_MODES, + .attributes = RTEMS_DEFAULT_ATTRIBUTES +}; + +/** + * @brief Try to create a barrier. + */ +static void AcfgValDefault_Action_0( void ) +{ + rtems_status_code sc; + rtems_id id; + + sc = rtems_barrier_create( + NAME, + RTEMS_DEFAULT_ATTRIBUTES, + 1, + &id + ); + + /* + * Check that the returned status code is RTEMS_TOO_MANY. + */ + T_step_rsc( 0, sc, RTEMS_TOO_MANY ); +} + +/** + * @brief Try to construct a message queue. + */ +static void AcfgValDefault_Action_1( void ) +{ + rtems_message_queue_config config; + RTEMS_MESSAGE_QUEUE_BUFFER( 1 ) buffers[ 1 ]; + rtems_status_code sc; + rtems_id id; + + memset( &config, 0, sizeof( config ) ); + config.name = NAME; + config.maximum_pending_messages = 1; + config.maximum_message_size = 1; + config.storage_size = sizeof( buffers ); + config.storage_area = buffers; + config.attributes = RTEMS_DEFAULT_ATTRIBUTES; + + sc = rtems_message_queue_construct( &config, &id ); + + /* + * Check that the returned status code is RTEMS_TOO_MANY. + */ + T_step_rsc( 1, sc, RTEMS_TOO_MANY ); +} + +/** + * @brief Try to create a partition. + */ +static void AcfgValDefault_Action_2( void ) +{ + RTEMS_ALIGNED( RTEMS_PARTITION_ALIGNMENT ) uint8_t buffers[ 1 ][ 32 ]; + rtems_status_code sc; + rtems_id id; + + sc = rtems_partition_create( + NAME, + buffers, + sizeof( buffers ), + sizeof( buffers[ 0 ] ), + RTEMS_DEFAULT_ATTRIBUTES, + &id + ); + + /* + * Check that the returned status code is RTEMS_TOO_MANY. + */ + T_step_rsc( 2, sc, RTEMS_TOO_MANY ); +} + +/** + * @brief Try to create a period. + */ +static void AcfgValDefault_Action_3( void ) +{ + rtems_status_code sc; + rtems_id id; + + sc = rtems_rate_monotonic_create( NAME, &id ); + + /* + * Check that the returned status code is RTEMS_TOO_MANY. + */ + T_step_rsc( 3, sc, RTEMS_TOO_MANY ); +} + +/** + * @brief Check that the processor maximum is one. + */ +static void AcfgValDefault_Action_4( void ) +{ + T_step_eq_u32( 4, rtems_scheduler_get_processor_maximum(), 1 ); +} + +/** + * @brief Try to create a semaphore. + */ +static void AcfgValDefault_Action_5( void ) +{ + rtems_status_code sc; + rtems_id id; + + sc = rtems_semaphore_create( + NAME, + 0, + RTEMS_DEFAULT_ATTRIBUTES, + 0, + &id + ); + + /* + * Check that the returned status code is RTEMS_TOO_MANY. + */ + T_step_rsc( 5, sc, RTEMS_TOO_MANY ); +} + +/** + * @brief Try to construct a task. + */ +static void AcfgValDefault_Action_6( void ) +{ + rtems_status_code sc; + rtems_id id; + + sc = rtems_task_construct( &task_config, &id ); + + /* + * Check that the returned status code is RTEMS_TOO_MANY. + */ + T_step_rsc( 6, sc, RTEMS_TOO_MANY ); +} + +/** + * @brief Try to create a timer. + */ +static void AcfgValDefault_Action_7( void ) +{ + rtems_status_code sc; + rtems_id id; + + sc = rtems_timer_create( NAME, &id ); + + /* + * Check that the returned status code is RTEMS_TOO_MANY. + */ + T_step_rsc( 7, sc, RTEMS_TOO_MANY ); +} + +/** + * @brief Try to create a user extension set. + */ +static void AcfgValDefault_Action_8( void ) +{ + rtems_extensions_table table; + rtems_status_code sc; + rtems_id id; + + memset( &table, 0, sizeof( table ) ); + sc = rtems_extension_create( NAME, &table, &id ); + + /* + * Check that the returned status code is RTEMS_TOO_MANY. + */ + T_step_rsc( 8, sc, RTEMS_TOO_MANY ); +} + +/** + * @fn void T_case_body_AcfgValDefault( void ) + */ +T_TEST_CASE( AcfgValDefault ) +{ + T_plan( 9 ); + + AcfgValDefault_Action_0(); + AcfgValDefault_Action_1(); + AcfgValDefault_Action_2(); + AcfgValDefault_Action_3(); + AcfgValDefault_Action_4(); + AcfgValDefault_Action_5(); + AcfgValDefault_Action_6(); + AcfgValDefault_Action_7(); + AcfgValDefault_Action_8(); +} + +/** @} */ diff --git a/testsuites/validation/ts-validation-acfg-0.c b/testsuites/validation/ts-validation-acfg-0.c new file mode 100644 index 0000000000..73b05ae32a --- /dev/null +++ b/testsuites/validation/ts-validation-acfg-0.c @@ -0,0 +1,135 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSTestSuiteTestsuitesValidationAcfg0 + */ + +/* + * Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This file is part of the RTEMS quality process and was automatically + * generated. If you find something that needs to be fixed or + * worded better please post a report or patch to an RTEMS mailing list + * or raise a bug report: + * + * https://www.rtems.org/bugs.html + * + * For information on updating and regenerating please refer to the How-To + * section in the Software Requirements Engineering chapter of the + * RTEMS Software Engineering manual. The manual is provided as a part of + * a release. For development sources please refer to the online + * documentation at: + * + * https://docs.rtems.org + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <rtems/test.h> + +/** + * @defgroup RTEMSTestSuiteTestsuitesValidationAcfg0 \ + * spec:/testsuites/validation-acfg-0 + * + * @ingroup RTEMSTestSuites + * + * @brief This validation test suite is used to validate the default value of + * application configuration options. + * + * @{ + */ + +#include <rtems.h> +#include <rtems/bspIo.h> +#include <rtems/test-info.h> +#include <rtems/testopts.h> + +#include <rtems/test.h> + +#include "tx-support.h" +#include "ts-config.h" + +const char rtems_test_name[] = "ValidationAcfg0"; + +static char buffer[ 512 ]; + +static const T_action actions[] = { + T_report_hash_sha256 +}; + +static const T_config test_config = { + .name = rtems_test_name, + .buf = buffer, + .buf_size = sizeof( buffer ), + .putchar = rtems_put_char, + .verbosity = RTEMS_TEST_VERBOSITY, + .now = T_now_tick, + .allocate = T_memory_allocate, + .deallocate = T_memory_deallocate, + .action_count = T_ARRAY_SIZE( actions ), + .actions = actions +}; + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS 0 + +#define CONFIGURE_DISABLE_NEWLIB_REENTRANCY + +#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM + +#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION + +#define CONFIGURE_IDLE_TASK_STACK_SIZE TEST_MINIMUM_STACK_SIZE + +static void *IdleBody( uintptr_t ignored ) +{ + int exit_code; + + (void) ignored; + + rtems_test_begin( rtems_test_name, TEST_STATE ); + T_register(); + exit_code = T_main( &test_config ); + + if ( exit_code == 0 ) { + rtems_test_end( rtems_test_name ); + } + + rtems_fatal( RTEMS_FATAL_SOURCE_EXIT, (uint32_t) exit_code ); +} + +#define CONFIGURE_IDLE_TASK_BODY IdleBody + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> + +/** @} */ |