summaryrefslogblamecommitdiffstats
path: root/spec/rtems/part/req/get-buffer.yml
blob: 610c768f95faa31a87e12c851911af9ad14bf318 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16















                                                                         

                                                             




                                                              

                                                             



                                                  


                                                             



                                                              



                                                             
              
         
             



                                                    



                                                                               


                                                              

                                                                             
                                     




                     
               
                
                           
           

                                                                               
              
                
                              
           
                                                                                  
                







                                         
                                                                           
                                



                         
                                                                
                          







                         
                                                                 




                                                                            
                                                           

























































































                                                                             
               
                 

           


           
          


                   
               
                 
              

            
           


                  
               
                 
              

           
       
           

                  
                 
               
                 

          


           
          
                 
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