SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause copyrights: - Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) enabled-by: true links: [] test-actions: - action-brief: | Check the effect of application configuration options with optional BSP-provided settings. action-code: | rtems_extensions_table bsp = BSP_INITIAL_EXTENSION; checks: - brief: | Check the configured ${/acfg/if/idle-task-body:/name}. code: | T_step_eq_ptr( ${.:/step}, rtems_configuration_get_idle_task(), IdleBody ); links: - role: validation uid: ../if/idle-task-body - role: validation uid: /rtems/config/req/get-idle-task - brief: | Check the default value of ${/acfg/if/idle-task-stack-size:/name} where the optional BSP-provided default value is enabled. code: | T_step_eq_sz( ${.:/step}, rtems_configuration_get_idle_task_stack_size(), #if defined(BSP_IDLE_TASK_STACK_SIZE) BSP_IDLE_TASK_STACK_SIZE #else CPU_STACK_MINIMUM_SIZE #endif ); links: - role: validation uid: ../if/idle-task-stack-size - role: validation uid: ../if/disable-bsp-settings - brief: | Check the default value of ${/acfg/if/interrupt-stack-size:/name} where the optional BSP-provided default value is enabled. code: | T_step_eq_sz( ${.:/step}, rtems_configuration_get_interrupt_stack_size(), #if defined(BSP_INTERRUPT_STACK_SIZE) BSP_INTERRUPT_STACK_SIZE #else CPU_STACK_MINIMUM_SIZE #endif ); links: - role: validation uid: ../if/interrupt-stack-size - role: validation uid: ../if/disable-bsp-settings - brief: | Check the BSP-provided initial extension is registered. code: | T_step_eq_sz( ${.:/step}, _User_extensions_Initial_count, 1 ); T_step_eq_ptr( ${.:/step}, _User_extensions_Initial_extensions[ 0 ].fatal, bsp.fatal ); links: - role: validation uid: ../req/bsp-initial-extension - role: validation uid: ../if/disable-bsp-settings links: [] - action-brief: | Try to create a barrier. action-code: | rtems_status_code sc; rtems_id id; sc = rtems_barrier_create( NAME, RTEMS_DEFAULT_ATTRIBUTES, 1, &id ); checks: - brief: | Check that the returned status code is ${/rtems/status/if/too-many:/name}. code: | T_step_rsc( ${.:/step}, sc, RTEMS_TOO_MANY ); links: - role: validation uid: ../if/max-barriers links: [] - action-brief: | Try to construct a message queue. action-code: | 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 ); checks: - brief: | Check that the returned status code is ${/rtems/status/if/too-many:/name}. code: | T_step_rsc( ${.:/step}, sc, RTEMS_TOO_MANY ); links: - role: validation uid: ../if/max-message-queues links: [] - action-brief: | Try to create a partition. action-code: | 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 ); checks: - brief: | Check that the returned status code is ${/rtems/status/if/too-many:/name}. code: | T_step_rsc( ${.:/step}, sc, RTEMS_TOO_MANY ); links: - role: validation uid: ../if/max-partitions links: [] - action-brief: | Try to create a period. action-code: | rtems_status_code sc; rtems_id id; sc = rtems_rate_monotonic_create( NAME, &id ); checks: - brief: | Check that the returned status code is ${/rtems/status/if/too-many:/name}. code: | T_step_rsc( ${.:/step}, sc, RTEMS_TOO_MANY ); links: - role: validation uid: ../if/max-periods links: [] - action-brief: | Check that the processor maximum is one. action-code: | T_step_eq_u32( ${.:/step}, rtems_scheduler_get_processor_maximum(), 1 ); checks: [] links: - role: validation uid: ../if/max-processors - action-brief: | Try to create a semaphore. action-code: | rtems_status_code sc; rtems_id id; sc = rtems_semaphore_create( NAME, 0, RTEMS_DEFAULT_ATTRIBUTES, 0, &id ); checks: - brief: | Check that the returned status code is ${/rtems/status/if/too-many:/name}. code: | T_step_rsc( ${.:/step}, sc, RTEMS_TOO_MANY ); links: - role: validation uid: ../if/max-semaphores links: [] - action-brief: | Try to construct a task. action-code: | rtems_status_code sc; rtems_id id; sc = rtems_task_construct( &task_config, &id ); checks: - brief: | Check that the returned status code is ${/rtems/status/if/too-many:/name}. code: | T_step_rsc( ${.:/step}, sc, RTEMS_TOO_MANY ); links: - role: validation uid: ../if/max-tasks - brief: | Check the default ${/acfg/if/max-tasks:/name} value. A maximum Classic API task value of zero is only configurable if ${../if/idle-task-init-appl:/name} is defined or ${../if/max-posix-threads:/name} is set to a positive value. The default value of zero for ${../if/max-posix-threads:/name} is used by the test suite containing the test case. The test suite defines ${../if/idle-task-init-appl:/name}. code: | T_step_eq_u32( ${.:/step}, rtems_configuration_get_maximum_tasks(), 0 ); links: - role: validation uid: ../req/max-tasks - role: validation uid: ../req/idle-task-init-appl - role: validation uid: /rtems/config/req/get-maximum-tasks links: [] - action-brief: | Try to create a timer. action-code: | rtems_status_code sc; rtems_id id; sc = rtems_timer_create( NAME, &id ); checks: - brief: | Check that the returned status code is ${/rtems/status/if/too-many:/name}. code: | T_step_rsc( ${.:/step}, sc, RTEMS_TOO_MANY ); links: - role: validation uid: ../if/max-timers links: [] - action-brief: | Try to create a user extension set. action-code: | rtems_extensions_table table; rtems_status_code sc; rtems_id id; memset( &table, 0, sizeof( table ) ); sc = rtems_extension_create( NAME, &table, &id ); checks: - brief: | Check that the returned status code is ${/rtems/status/if/too-many:/name}. code: | T_step_rsc( ${.:/step}, sc, RTEMS_TOO_MANY ); links: - role: validation uid: ../if/max-user-extensions links: [] test-brief: | Tests the default values of application configuration options. test-context: [] test-context-support: null test-description: null test-header: null test-includes: - bsp.h - string.h - rtems/score/userextdata.h test-local-includes: - tx-support.h test-setup: null test-stop: null test-support: | #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 }; test-target: testsuites/validation/tc-acfg-default.c test-teardown: null type: test-case