SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause copyrights: - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) enabled-by: true functional-type: action links: - role: interface-function uid: ../if/get-buffer post-conditions: - name: Status states: - name: Ok test-code: | T_rsc_success( ctx->status ); T_eq_ptr( ctx->buffer_pointer, buffers ); text: | The return status of ${../if/get-buffer:/name} shall be ${../../status/if/successful:/name}. - name: InvId test-code: | T_rsc( ctx->status, RTEMS_INVALID_ID ); T_eq_ptr( ctx->buffer_pointer, (void *) (uintptr_t) 1 ); text: | The return status of ${../if/get-buffer:/name} shall be ${../../status/if/invalid-id:/name}. - name: InvAddr test-code: | T_rsc( ctx->status, RTEMS_INVALID_ADDRESS ); text: | The return status of ${../if/get-buffer:/name} shall be ${../../status/if/invalid-address:/name}. - name: Unsat test-code: | T_rsc( ctx->status, RTEMS_UNSATISFIED ); T_eq_ptr( ctx->buffer_pointer, (void *) (uintptr_t) 1 ); text: | The return status of ${../if/get-buffer:/name} shall be ${../../status/if/unsatisfied:/name}. test-epilogue: null test-prologue: null - name: BufVar states: - name: Set test-code: | T_eq_ptr( ctx->buffer, &ctx->buffer_pointer ); T_eq_ptr( ctx->buffer_pointer, buffers ); text: | The value of the object referenced by the ${../if/create:/params[1]/name} parameter shall be set to the object identifier of the begin address of the returned buffer after the return of the ${../if/create:/name} call. - name: Nop test-code: | T_eq_ptr( ctx->buffer_pointer, (void *) (uintptr_t) 1 ); text: | Objects referenced by the ${../if/get-buffer:/params[1]/name} parameter in past calls to ${../if/get-buffer:/name} shall not be accessed by the ${../if/get-buffer:/name} call. test-epilogue: null test-prologue: null pre-conditions: - name: Id states: - name: NoObj test-code: | ctx->id = 0xffffffff; text: | While the ${../if/get-buffer:/params[0]/name} parameter is not associated with a partition. - name: Part test-code: | ctx->id = ctx->id_value; text: | While the ${../if/get-buffer:/params[0]/name} parameter is associated with a partition. test-epilogue: null test-prologue: null - name: Buf states: - name: Valid test-code: | ctx->buffer = &ctx->buffer_pointer; text: | While the ${../if/get-buffer:/params[1]/name} parameter references an object of type ``void *``. - name: 'Null' test-code: | ctx->buffer = NULL; text: | While the ${../if/get-buffer:/params[1]/name} parameter is ${/c/if/null:/name}. test-epilogue: null test-prologue: null - name: Avail states: - name: 'Yes' test-code: | /* Nothing to do */ text: | While the partition has at least one free buffer available. - name: 'No' test-code: | sc = rtems_partition_get_buffer( ctx->id_value, &ctx->stolen_buffer ); T_rsc_success( sc ); text: | While the partition does not have a buffer available. test-epilogue: null test-prologue: | rtems_status_code sc; rationale: null references: [] requirement-type: functional skip-reasons: {} test-action: | ctx->status = rtems_partition_get_buffer( ctx->id, ctx->buffer ); test-brief: null test-cleanup: | rtems_status_code sc; if ( (uintptr_t) ctx->buffer_pointer != 1 ) { sc = rtems_partition_return_buffer( ctx->id_value, ctx->buffer_pointer ); T_rsc_success( sc ); } if ( ctx->stolen_buffer != NULL ) { sc = rtems_partition_return_buffer( ctx->id_value, ctx->stolen_buffer ); T_rsc_success( sc ); } test-context: - brief: null description: null member: rtems_status_code status - brief: null description: null member: rtems_id id - brief: null description: null member: rtems_id id_value - brief: null description: null member: void **buffer - brief: null description: null member: void *buffer_pointer - brief: null description: null member: void *stolen_buffer test-context-support: null test-description: null test-header: null test-includes: - rtems.h test-local-includes: [] test-prepare: | ctx->buffer_pointer = (void *) (uintptr_t) 1; ctx->stolen_buffer = NULL; test-setup: brief: null code: | rtems_status_code sc; ctx->id_value = 0; sc = rtems_partition_create( rtems_build_name( 'N', 'A', 'M', 'E' ), buffers, sizeof( buffers ), sizeof( buffers[ 0 ] ), RTEMS_DEFAULT_ATTRIBUTES, &ctx->id_value ); T_assert_rsc_success( sc ); description: null test-stop: null test-support: | #define BUFFER_COUNT 1 #define BUFFER_SIZE ( 2 * sizeof( void * ) ) static RTEMS_ALIGNED( RTEMS_PARTITION_ALIGNMENT ) uint8_t buffers[ BUFFER_COUNT ][ BUFFER_SIZE ]; test-target: testsuites/validation/tc-part-get.c test-teardown: brief: null code: | if ( ctx->id_value != 0 ) { rtems_status_code sc; sc = rtems_partition_delete( ctx->id_value ); T_rsc_success( sc ); } description: null text: ${.:text-template} transition-map: - enabled-by: true post-conditions: Status: Ok BufVar: Set pre-conditions: Avail: - 'Yes' Buf: - Valid Id: - Part - enabled-by: true post-conditions: Status: InvAddr BufVar: Nop pre-conditions: Avail: all Buf: - 'Null' Id: all - enabled-by: true post-conditions: Status: InvId BufVar: Nop pre-conditions: Avail: all Buf: - Valid Id: - NoObj - enabled-by: true post-conditions: Status: Unsat BufVar: Nop pre-conditions: Avail: - 'No' Buf: - Valid Id: - Part type: requirement