summaryrefslogblamecommitdiffstats
path: root/spec/rtems/task/req/get-affinity.yml
blob: 9327fe8745fb279f299408f485f68d175a5812b0 (plain) (tree)











































































































































































































































                                                                               
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
functional-type: action
links:
- role: interface-function
  uid: ../if/get-affinity
post-conditions:
- name: Status
  states:
  - name: Ok
    test-code: |
      T_rsc_success( ctx->status );
    text: |
      The return status of ${../if/get-affinity:/name} shall be
      ${../../status/if/successful:/name}.
  - name: InvAddr
    test-code: |
      T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
    text: |
      The return status of ${../if/get-affinity:/name} shall be
      ${../../status/if/invalid-address:/name}.
  - name: InvId
    test-code: |
      T_rsc( ctx->status, RTEMS_INVALID_ID );
    text: |
      The return status of ${../if/get-affinity:/name} shall be
      ${../../status/if/invalid-id:/name}.
  - name: InvSize
    test-code: |
      T_rsc( ctx->status, RTEMS_INVALID_SIZE );
    text: |
      The return status of ${../if/get-affinity:/name} shall be
      ${../../status/if/invalid-size:/name}.
  test-epilogue: null
  test-prologue: null
- name: CPUSetObj
  states:
  - name: Set
    test-code: |
      CPU_ZERO( &set );

      cpu_max = rtems_scheduler_get_processor_maximum();

      /* We need the online processors */
      if ( cpu_max > 4 ) {
        cpu_max = 4;
      }

      for ( cpu_index = 0; cpu_index < cpu_max; ++cpu_index ) {
        CPU_SET( (int) cpu_index, &set );
      }

      T_eq_int( CPU_CMP( &ctx->cpuset_obj, &set ), 0 );
    text: |
      The value of the object referenced by the
      ${../if/get-affinity:/params[2]/name} parameter shall be set to the
      processor affinity set of the task specified by the
      ${../if/get-affinity:/params[0]/name} parameter at some point during the
      call after the return of the ${../if/get-affinity:/name} call.
  - name: Nop
    test-code: |
      CPU_ZERO( &set );
      T_eq_int( CPU_CMP( &ctx->cpuset_obj, &set ), 0 );
    text: |
      Objects referenced by the ${../if/get-affinity:/params[2]/name}
      parameter in past calls to ${../if/get-affinity:/name} shall
      not be accessed by the ${../if/get-affinity:/name} call.
  test-epilogue: null
  test-prologue: |
    cpu_set_t set;
    uint32_t  cpu_index;
    uint32_t  cpu_max;
pre-conditions:
- name: Id
  states:
  - name: Invalid
    test-code: |
      ctx->id = INVALID_ID;
    text: |
      While the ${../if/get-affinity:/params[0]/name} parameter is not
      associated with a task.
  - name: Task
    test-code: |
      ctx->id = RTEMS_SELF;
    text: |
      While the ${../if/get-affinity:/params[0]/name} parameter is
      associated with a task.
  test-epilogue: null
  test-prologue: null
- name: CPUSetSize
  states:
  - name: Valid
    test-code: |
      ctx->cpusetsize = sizeof( ctx->cpuset_obj );
    text: |
      While the ${../if/get-affinity:/params[1]/name} parameter is an integral
      multiple of the size of long, while the
      ${../if/get-affinity:/params[1]/name} parameter specifies a processor set
      which is large enough to contain the processor affinity set of the task.
  - name: TooSmall
    test-code: |
      ctx->cpusetsize = 0;
    text: |
      While the ${../if/get-affinity:/params[1]/name} parameter is an integral
      multiple of the size of long, while the
      ${../if/get-affinity:/params[1]/name} parameter specifies a processor set
      which is not large enough to contain the processor affinity set of the
      task.
  - name: Askew
    test-code: |
      ctx->cpusetsize = SIZE_MAX;
    text: |
      While the ${../if/get-affinity:/params[1]/name} parameter is not an
      integral multiple of the size of long.
  test-epilogue: null
  test-prologue: null
- name: CPUSet
  states:
  - name: Valid
    test-code: |
      ctx->cpuset = &ctx->cpuset_obj;
    text: |
      While the ${../if/get-affinity:/params[2]/name} parameter references an
      object of type ${/c/if/cpu_set_t:/name}.
  - name: 'Null'
    test-code: |
      ctx->cpuset = NULL;
    text: |
      While the ${../if/get-affinity:/params[2]/name} parameter is equal to
      ${/c/if/null:/name}.
  test-epilogue: null
  test-prologue: null
rationale: null
references: []
requirement-type: functional
skip-reasons: {}
test-action: |
  ctx->status = rtems_task_get_affinity(
    ctx->id,
    ctx->cpusetsize,
    ctx->cpuset
  );
test-brief: null
test-cleanup: null
test-context:
- brief: |
    This member provides the object referenced by the
    ${../if/get-affinity:/params[2]/name} parameter.
  description: null
  member: |
    cpu_set_t cpuset_obj
- brief: |
    This member contains the return value of the ${../if/get-affinity:/name}
    call.
  description: null
  member: |
    rtems_status_code status
- brief: |
    This member specifies if the ${../if/get-affinity:/params[0]/name}
    parameter value.
  description: null
  member: |
    rtems_id id
- brief: |
    This member specifies if the ${../if/get-affinity:/params[1]/name}
    parameter value.
  description: null
  member: |
    size_t cpusetsize
- brief: |
    This member specifies if the ${../if/get-affinity:/params[2]/name}
    parameter value.
  description: null
  member: |
    cpu_set_t *cpuset
test-context-support: null
test-description: null
test-header: null
test-includes:
- rtems.h
test-local-includes:
- tx-support.h
test-prepare: |
  CPU_ZERO( &ctx->cpuset_obj );
test-setup: null
test-stop: null
test-support: null
test-target: testsuites/validation/tc-task-get-affinity.c
test-teardown: null
text: ${.:text-template}
transition-map:
- enabled-by: true
  post-conditions:
    Status: Ok
    CPUSetObj: Set
  pre-conditions:
    Id:
    - Task
    CPUSetSize:
    - Valid
    CPUSet:
    - Valid
- enabled-by: true
  post-conditions:
    Status: InvAddr
    CPUSetObj: Nop
  pre-conditions:
    Id: all
    CPUSetSize: all
    CPUSet:
    - 'Null'
- enabled-by: true
  post-conditions:
    Status: InvId
    CPUSetObj: Nop
  pre-conditions:
    Id:
    - Invalid
    CPUSetSize: all
    CPUSet:
    - Valid
- enabled-by: true
  post-conditions:
    Status: InvSize
    CPUSetObj: Nop
  pre-conditions:
    Id:
    - Task
    CPUSetSize:
    - TooSmall
    - Askew
    CPUSet:
    - Valid
type: requirement