From 8f4684d61b0b5bfc7fd12e1856d31e20a150b8ee Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 4 Aug 2021 09:56:42 +0200 Subject: validation: More SMP system initialization tests --- spec/build/testsuites/validation/grp.yml | 2 + .../validation/validation-smp-only-2.yml | 22 ++++ .../tc-start-of-optional-processor-failed.c | 116 +++++++++++++++++++++ .../ts-fatal-mandatory-processor-not-present.c | 2 +- testsuites/validation/ts-validation-smp-only-2.c | 102 ++++++++++++++++++ 5 files changed, 243 insertions(+), 1 deletion(-) create mode 100644 spec/build/testsuites/validation/validation-smp-only-2.yml create mode 100644 testsuites/validation/tc-start-of-optional-processor-failed.c create mode 100644 testsuites/validation/ts-validation-smp-only-2.c diff --git a/spec/build/testsuites/validation/grp.yml b/spec/build/testsuites/validation/grp.yml index 7f53735f32..3f3b93922f 100644 --- a/spec/build/testsuites/validation/grp.yml +++ b/spec/build/testsuites/validation/grp.yml @@ -58,6 +58,8 @@ links: uid: validation-smp-only-0 - role: build-dependency uid: validation-smp-only-1 +- role: build-dependency + uid: validation-smp-only-2 type: build use-after: - rtemstest diff --git a/spec/build/testsuites/validation/validation-smp-only-2.yml b/spec/build/testsuites/validation/validation-smp-only-2.yml new file mode 100644 index 0000000000..7185a93c70 --- /dev/null +++ b/spec/build/testsuites/validation/validation-smp-only-2.yml @@ -0,0 +1,22 @@ +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: RTEMS_SMP +features: c cprogram +includes: [] +ldflags: +- -Wl,-wrap=_CPU_SMP_Start_processor +links: [] +source: +- testsuites/validation/tc-start-of-optional-processor-failed.c +- testsuites/validation/ts-validation-smp-only-2.c +stlib: [] +target: testsuites/validation/ts-validation-smp-only-2.exe +type: build +use-after: +- validation +use-before: [] diff --git a/testsuites/validation/tc-start-of-optional-processor-failed.c b/testsuites/validation/tc-start-of-optional-processor-failed.c new file mode 100644 index 0000000000..b033a18bae --- /dev/null +++ b/testsuites/validation/tc-start-of-optional-processor-failed.c @@ -0,0 +1,116 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSTestCaseScoreSmpValStartOfOptionalProcessorFailed + */ + +/* + * 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 + +#include + +/** + * @defgroup RTEMSTestCaseScoreSmpValStartOfOptionalProcessorFailed \ + * spec:/score/smp/val/start-of-optional-processor-failed + * + * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly2 + * + * @brief Tests the state of an optional processor which failed to start. + * + * This test case performs the following actions: + * + * - The test action was carried by the system initialization. If we execute + * this test case, then the failed start of an optional processor did not + * abort the system initialization. + * + * - Check that the boot processor is online. + * + * - Check that the optional processor which failed to start is not online. + * + * @{ + */ + +/** + * @brief The test action was carried by the system initialization. If we + * execute this test case, then the failed start of an optional processor did + * not abort the system initialization. + */ +static void ScoreSmpValStartOfOptionalProcessorFailed_Action_0( void ) +{ + /* Nothing to do */ + + /* + * Check that the boot processor is online. + */ + T_step_true( + 0, + _Per_CPU_Is_processor_online( _Per_CPU_Get_by_index( 0 ) ) + ); + + /* + * Check that the optional processor which failed to start is not online. + */ + T_step_false( + 1, + _Per_CPU_Is_processor_online( _Per_CPU_Get_by_index( 1 ) ) + ); +} + +/** + * @fn void T_case_body_ScoreSmpValStartOfOptionalProcessorFailed( void ) + */ +T_TEST_CASE( ScoreSmpValStartOfOptionalProcessorFailed ) +{ + T_plan( 2 ); + + ScoreSmpValStartOfOptionalProcessorFailed_Action_0(); +} + +/** @} */ diff --git a/testsuites/validation/ts-fatal-mandatory-processor-not-present.c b/testsuites/validation/ts-fatal-mandatory-processor-not-present.c index 51763c4d99..3645313755 100644 --- a/testsuites/validation/ts-fatal-mandatory-processor-not-present.c +++ b/testsuites/validation/ts-fatal-mandatory-processor-not-present.c @@ -90,7 +90,7 @@ RTEMS_SCHEDULER_EDF_SMP( a ); #define CONFIGURE_SCHEDULER_ASSIGNMENTS \ RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \ - RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL ), \ + RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \ RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \ RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \ RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \ diff --git a/testsuites/validation/ts-validation-smp-only-2.c b/testsuites/validation/ts-validation-smp-only-2.c new file mode 100644 index 0000000000..74cf5e1db8 --- /dev/null +++ b/testsuites/validation/ts-validation-smp-only-2.c @@ -0,0 +1,102 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSTestSuiteTestsuitesValidationSmpOnly2 + */ + +/* + * 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 "ts-config.h" + +#include + +/** + * @defgroup RTEMSTestSuiteTestsuitesValidationSmpOnly2 \ + * spec:/testsuites/validation-smp-only-2 + * + * @ingroup RTEMSTestSuites + * + * @brief This SMP-only test suite validates the clustered scheduler + * configuration through an application configuration with a processor + * maximum of two. The second processor has a optional scheduler assigned + * and fails to start. + * + * @{ + */ + +const char rtems_test_name[] = "ValidationSMPOnly2"; + +bool __wrap__CPU_SMP_Start_processor( uint32_t cpu_index ); + +bool __wrap__CPU_SMP_Start_processor( uint32_t cpu_index ) +{ + (void) cpu_index; + return false; +} + +#define CONFIGURE_MAXIMUM_PROCESSORS 2 + +#include + +#define CONFIGURE_SCHEDULER_EDF_SMP + +#include + +RTEMS_SCHEDULER_EDF_SMP( a ); + +#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \ + RTEMS_SCHEDULER_TABLE_EDF_SMP( a, TEST_SCHEDULER_A_NAME ) + +#define CONFIGURE_SCHEDULER_ASSIGNMENTS \ + RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY ), \ + RTEMS_SCHEDULER_ASSIGN( 0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL ) + +#include "ts-default.h" + +/** @} */ -- cgit v1.2.3