diff options
Diffstat (limited to 'testsuites/validation/ts-space-profile.c')
-rw-r--r-- | testsuites/validation/ts-space-profile.c | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/testsuites/validation/ts-space-profile.c b/testsuites/validation/ts-space-profile.c new file mode 100644 index 0000000000..7b35042ad2 --- /dev/null +++ b/testsuites/validation/ts-space-profile.c @@ -0,0 +1,225 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ + +/** + * @file + * + * @ingroup RTEMSTestSuiteTestsuitesValidationProfile + */ + +/* + * Copyright (C) 2020 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 <rtems/bspIo.h> +#include <rtems/sysinit.h> +#include <rtems/score/sysstate.h> + +#include <rtems/test.h> + +/** + * @defgroup RTEMSTestSuiteTestsuitesValidationProfile \ + * spec:/testsuites/validation/profile + * + * @ingroup RTEMSTestSuites + * + * @brief This test suite contains test cases which call in combination all + * functions included in the space profile. + * + * @{ + */ + +#define NAME rtems_build_name('N', 'A', 'M', 'E') + +static void fatal_extension( + rtems_fatal_source source, + bool always_set_to_false, + rtems_fatal_code error +) +{ + T_make_runner(); + T_step_eq_int(0, source, RTEMS_FATAL_SOURCE_APPLICATION); + T_step_false(1, always_set_to_false, "always_set_to_false"); + T_step_eq_ulong(2, error, 123); + T_case_end(); + T_run_finalize(); +} + +static void Init(rtems_task_argument arg) +{ + (void) arg; + + T_make_runner(); + T_register(); + T_run_all(); + T_case_begin("SpaceProfileFatalError", NULL); + T_plan(3); + rtems_fatal(RTEMS_FATAL_SOURCE_APPLICATION, 123); +} + +#define INIT_TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES + +#define MAX_TLS_SIZE RTEMS_ALIGN_UP(64, RTEMS_TASK_STORAGE_ALIGNMENT) + +RTEMS_ALIGNED(RTEMS_TASK_STORAGE_ALIGNMENT) static char init_task_storage[ + RTEMS_TASK_STORAGE_SIZE( + MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE, + INIT_TASK_ATTRIBUTES + ) +]; + +static char buffer[512]; + +static void check_task_context(T_event event, const char *name) +{ + if (_System_state_Is_up(_System_state_Get())) { + T_check_task_context(event, name); + } +} + +static const T_action actions[] = { + T_report_hash_sha256, + check_task_context, + T_check_rtems_barriers, + T_check_rtems_extensions, + T_check_rtems_message_queues, + T_check_rtems_partitions, + T_check_rtems_periods, + T_check_rtems_semaphores, + T_check_rtems_tasks, + T_check_rtems_timers +}; + +static const T_config test_config = { + .name = "SpaceProfile", + .buf = buffer, + .buf_size = sizeof(buffer), + .putchar = rtems_put_char, + .verbosity = T_VERBOSE, + .now = T_now_clock, + .action_count = T_ARRAY_SIZE(actions), + .actions = actions +}; + +static const rtems_task_config task_config = { + .name = NAME, + .initial_priority = 1, + .storage_area = init_task_storage, + .storage_size = sizeof(init_task_storage), + .maximum_thread_local_storage_size = MAX_TLS_SIZE, + .initial_modes = RTEMS_DEFAULT_MODES, + .attributes = INIT_TASK_ATTRIBUTES +}; + +static void init_task(void) +{ + rtems_id id; + rtems_status_code sc; + + T_run_initialize(&test_config); + T_case_begin("SpaceProfileTaskBuild", NULL); + T_plan(2); + + sc = rtems_task_construct(&task_config, &id); + T_step_rsc_success(0, sc); + + sc = rtems_task_start(id, Init, 0); + T_step_rsc_success(1, sc); + + T_check_rtems_tasks(T_EVENT_RUN_INITIALIZE_EARLY, T_case_name()); + T_case_end(); +} + +RTEMS_SYSINIT_ITEM( + init_task, + RTEMS_SYSINIT_CLASSIC_USER_TASKS, + RTEMS_SYSINIT_ORDER_MIDDLE +); + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_PROCESSORS 4 + +#define CONFIGURE_MAXIMUM_BARRIERS 1 + +#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1 + +#define CONFIGURE_MAXIMUM_PARTITIONS 1 + +#define CONFIGURE_MAXIMUM_PERIODS 1 + +#define CONFIGURE_MAXIMUM_SEMAPHORES 1 + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_MAXIMUM_TIMERS 1 + +#define CONFIGURE_MAXIMUM_USER_EXTENSIONS 1 + +#define CONFIGURE_MESSAGE_BUFFER_MEMORY 1 + +#define CONFIGURE_MICROSECONDS_PER_TICK 10000 + +#define CONFIGURE_SCHEDULER_NAME NAME + +#define CONFIGURE_INITIAL_EXTENSIONS { .fatal = fatal_extension } + +/* Mandatory for space profile */ + +#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_BODY _CPU_Thread_Idle_body + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> + +/** @} */ |