summaryrefslogblamecommitdiffstats
path: root/spec/rtems/task/req/set-priority.yml
blob: 491cc653e34fdb148ea05f6372d766f45e0ca056 (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                                     
                                                  




                          

                             
































                                                               
                                                            






                                                                               
                                                             








                                                                            
                                                     

































                                                                              






























                                                                           







                                                                               










                                                                               



                                                                               
                                                                  
                                                                    


































                                                                               




                                                                               
                                                                     
                                                                    

                                                                              






















                                                                             











                                              




                                        





                                                









                                                    









                                                           



































                                                                            
               
                                       







                                                     
               





                                               
                                                         




                            









                        
              

                
                     









                       
              
                




                 









                       

















                       









                       


                     









                       
              
                    
                     









                       
              
                

                 



                 
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
copyrights:
- Copyright (C) 2021 embedded brains GmbH & Co. KG
enabled-by: true
functional-type: action
links:
- role: interface-function
  uid: ../if/set-priority
- role: interface-function
  uid: ../if/current-priority
post-conditions:
- name: Status
  states:
  - name: Ok
    test-code: |
      T_rsc_success( ctx->status );
    text: |
      The return status of ${../if/set-priority:/name} shall be
      ${../../status/if/successful:/name}.
  - name: InvAddr
    test-code: |
      T_rsc( ctx->status, RTEMS_INVALID_ADDRESS );
    text: |
      The return status of ${../if/set-priority:/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/set-priority:/name} shall be
      ${../../status/if/invalid-id:/name}.
  - name: InvPrio
    test-code: |
      T_rsc( ctx->status, RTEMS_INVALID_PRIORITY );
    text: |
      The return status of ${../if/set-priority:/name} shall be
      ${../../status/if/invalid-priority:/name}.
  test-epilogue: null
  test-prologue: null
- name: Priority
  states:
  - name: Set
    test-code: |
      T_eq_u32( GetPriority( ctx->id ), ctx->new_priority );
    text: |
      The ${/glossary/priority-real:/term} of the task specified by the
      ${../if/set-priority:/params[0]/name} parameter shall be set to the value
      specified by the ${../if/set-priority:/params[1]/name} parameter at some
      point during the ${../if/set-priority:/name} call.
  - name: Nop
    test-code: |
      T_eq_u32( GetPriority( ctx->worker_id ), PRIO_NORMAL );
    text: |
      No ${/glossary/priority-real:/term} of a task shall be modified by the
      ${../if/set-priority:/name} call.
  test-epilogue: null
  test-prologue: null
- name: OldPriorityObj
  states:
  - name: Set
    test-code: |
      T_eq_u32( ctx->old_priority_obj, PRIO_NORMAL );
    text: |
      The value of the object referenced by the
      ${../if/set-priority:/params[2]/name} parameter shall be set after the
      return of the ${../if/set-priority:/name} call to the
      ${/glossary/priority-current:/term} of the task specified by the
      ${../if/set-priority:/params[0]/name} parameter at some point during the
      call and before the ${/glossary/priority-real:/term} is modified by the
      call if it is modified by the call.
  - name: Nop
    test-code: |
      T_eq_u32( ctx->old_priority_obj, PRIO_INVALID );
    text: |
      Objects referenced by the ${../if/set-priority:/params[2]/name}
      parameter in past calls to ${../if/set-priority:/name} shall
      not be accessed by the ${../if/set-priority:/name} call.
  test-epilogue: null
  test-prologue: null
pre-conditions:
- name: Id
  states:
  - name: Invalid
    test-code: |
      ctx->id = INVALID_ID;
    text: |
      While the ${../if/set-priority:/params[0]/name} parameter is not
      associated with a task.
  - name: Task
    test-code: |
      ctx->id = ctx->worker_id;
    text: |
      While the ${../if/set-priority:/params[0]/name} parameter is
      associated with a task.
  test-epilogue: null
  test-prologue: null
- name: State
  states:
  - name: Dormant
    test-code: |
      ctx->started = false;
    text: |
      While the task specified by the ${../if/set-priority:/params[0]/name}
      parameter is dormant.
  - name: Ready
    test-code: |
      ctx->started = true;
      ctx->blocked = false;
    text: |
      While the task specified by the ${../if/set-priority:/params[0]/name}
      parameter is ready.
  - name: Scheduled
    test-code: |
      ctx->started = false;
      ctx->id = rtems_task_self();
    text: |
      While the task specified by the ${../if/set-priority:/params[0]/name}
      parameter is scheduled.
  - name: Blocked
    test-code: |
      ctx->started = true;
      ctx->blocked = true;
    text: |
      While the task specified by the ${../if/set-priority:/params[0]/name}
      parameter is blocked.
  test-epilogue: null
  test-prologue: null
- name: NewPriority
  states:
  - name: Current
    test-code: |
      ctx->new_priority = RTEMS_CURRENT_PRIORITY;
    text: |
      While the value of the ${../if/set-priority:/params[1]/name} parameter is
      equal to ${../if/current-priority:/name}.
  - name: Other
    test-code: |
      ctx->new_priority = PRIO_NORMAL;
    text: |
      While the value of the ${../if/set-priority:/params[1]/name} parameter is
      not equal to ${../if/current-priority:/name}.
  test-epilogue: null
  test-prologue: null
- name: TaskPriority
  states:
  - name: High
    test-code: |
      ctx->new_priority = PRIO_HIGH;
    text: |
      While the value of the ${../if/set-priority:/params[1]/name} parameter is
      a valid ${/glossary/priority-task:/term} with respect to the
      ${/glossary/scheduler-home:/term} of the task specified by the
      ${../if/set-priority:/params[0]/name} parameter when the new priority is
      set,
      while the value of the ${../if/set-priority:/params[1]/name} parameter is
      higher than the ${/glossary/priority-task:/term} with respect to the
      ${/glossary/scheduler-home:/term} of the task specified by the
      ${../if/set-priority:/params[0]/name} parameter at time when the
      scheduler evaluates the new priority.
  - name: Equal
    test-code: |
      ctx->new_priority = PRIO_NORMAL;
    text: |
      While the value of the ${../if/set-priority:/params[1]/name} parameter is
      a valid ${/glossary/priority-task:/term} with respect to the
      ${/glossary/scheduler-home:/term} of the task specified by the
      ${../if/set-priority:/params[0]/name} parameter when the new priority is
      set,
      while the value of the ${../if/set-priority:/params[1]/name} parameter is
      equal to the ${/glossary/priority-task:/term} with respect to the
      ${/glossary/scheduler-home:/term} of the task specified by the
      ${../if/set-priority:/params[0]/name} parameter at time when the
      scheduler evaluates the new priority.
  - name: Low
    test-code: |
      ctx->new_priority = PRIO_LOW;
    text: |
      While the value of the ${../if/set-priority:/params[1]/name} parameter is
      a valid ${/glossary/priority-task:/term} with respect to the
      ${/glossary/scheduler-home:/term} of the task specified by the
      ${../if/set-priority:/params[0]/name} parameter when the new priority is
      set,
      while the value of the ${../if/set-priority:/params[1]/name} parameter is
      lower than the ${/glossary/priority-task:/term} with respect to the
      ${/glossary/scheduler-home:/term} of the task specified by the
      ${../if/set-priority:/params[0]/name} parameter at time when the
      scheduler evaluates the new priority.
  - name: Invalid
    test-code: |
      ctx->new_priority = PRIO_INVALID;
    text: |
      While the value of the ${../if/set-priority:/params[1]/name} parameter is
      an invalid ${/glossary/priority-task:/term} with respect to the
      ${/glossary/scheduler-home:/term} of the task specified by the
      ${../if/set-priority:/params[0]/name} parameter when the new priority is
      evaluated.
  test-epilogue: null
  test-prologue: null
- name: OldPriority
  states:
  - name: Valid
    test-code: |
      ctx->old_priority = &ctx->old_priority_obj;
    text: |
      While the ${../if/set-priority:/params[2]/name} parameter references an
      object of type ${../../type/if/priority:/name}.
  - name: 'Null'
    test-code: |
      ctx->old_priority = NULL;
    text: |
      While the ${../if/set-priority:/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: |
  if ( ctx->started ) {
    SetSelfPriority( PRIO_ULTRA_HIGH );
    StartTask( ctx->worker_id, Worker, NULL );

    if ( ctx->blocked ) {
      SetSelfPriority( PRIO_ULTRA_LOW );
      SetSelfPriority( PRIO_ULTRA_HIGH );
    }
  } else {
    SetSelfPriority( PRIO_NORMAL );
  }

  ctx->status = rtems_task_set_priority(
    ctx->id,
    ctx->new_priority,
    ctx->old_priority
  );

  if ( ctx->started ) {
    SendEvents( ctx->worker_id, RTEMS_EVENT_0 );
    SetSelfPriority( PRIO_ULTRA_LOW );
    SetSelfPriority( PRIO_ULTRA_HIGH );
  }
test-brief: null
test-cleanup: |
  DeleteTask( ctx->worker_id );
test-context:
- brief: |
    This member contains the worker task identifier.
  description: null
  member: |
    rtems_id worker_id
- brief: |
    If this member is true, then the task shall be started.
  description: null
  member: |
    bool started
- brief: |
    If this member is true, then the task shall be blocked.
  description: null
  member: |
    bool blocked
- brief: |
    This member provides the object referenced by the
    ${../if/set-priority:/params[2]/name} parameter.
  description: null
  member: |
    rtems_task_priority old_priority_obj
- brief: |
    This member contains the return value of the ${../if/set-priority:/name}
    call.
  description: null
  member: |
    rtems_status_code status
- brief: |
    This member specifies if the ${../if/set-priority:/params[0]/name}
    parameter value.
  description: null
  member: |
    rtems_id id
- brief: |
    This member specifies if the ${../if/set-priority:/params[1]/name}
    parameter value.
  description: null
  member: |
    rtems_task_priority new_priority
- brief: |
    This member specifies if the ${../if/set-priority:/params[2]/name}
    parameter value.
  description: null
  member: |
    rtems_task_priority *old_priority
test-context-support: null
test-description: null
test-header: null
test-includes:
- rtems.h
test-local-includes:
- tx-support.h
test-prepare: |
  ctx->old_priority_obj = PRIO_INVALID;
  ctx->worker_id = CreateTask( "WORK", PRIO_NORMAL );
  ctx->started = false;
  ctx->blocked = false;
test-setup:
  brief: null
  code: |
    SetSelfPriority( PRIO_ULTRA_HIGH );
  description: null
test-stop: null
test-support: |
  static void Worker( rtems_task_argument arg )
  {
    (void) ReceiveAnyEvents();
    (void) ReceiveAnyEvents();
  }
test-target: testsuites/validation/tc-task-set-priority.c
test-teardown:
  brief: null
  code: |
    RestoreRunnerPriority();
  description: null
text: ${.:text-template}
transition-map:
- enabled-by: true
  post-conditions:
    Status: Ok
    Priority: Nop
    OldPriorityObj: Set
  pre-conditions:
    Id:
    - Task
    State: all
    NewPriority:
    - Current
    TaskPriority: N/A
    OldPriority:
    - Valid
- enabled-by: true
  post-conditions:
    Status: Ok
    Priority: Set
    OldPriorityObj: Set
  pre-conditions:
    Id:
    - Task
    State: all
    NewPriority:
    - Other
    TaskPriority:
    - High
    - Equal
    - Low
    OldPriority:
    - Valid
- enabled-by: true
  post-conditions:
    Status: InvAddr
    Priority: Nop
    OldPriorityObj: Nop
  pre-conditions:
    Id:
    - Task
    State: all
    NewPriority:
    - Current
    TaskPriority: N/A
    OldPriority:
    - 'Null'
- enabled-by: true
  post-conditions:
    Status: InvAddr
    Priority: Nop
    OldPriorityObj: Nop
  pre-conditions:
    Id:
    - Task
    State: all
    NewPriority:
    - Other
    TaskPriority: all
    OldPriority:
    - 'Null'
- enabled-by: true
  post-conditions:
    Status: InvAddr
    Priority: Nop
    OldPriorityObj: Nop
  pre-conditions:
    Id:
    - Invalid
    State: N/A
    NewPriority: all
    TaskPriority: N/A
    OldPriority:
    - 'Null'
- enabled-by: true
  post-conditions:
    Status: InvId
    Priority: Nop
    OldPriorityObj: Nop
  pre-conditions:
    Id:
    - Invalid
    State: N/A
    NewPriority: all
    TaskPriority: N/A
    OldPriority:
    - Valid
- enabled-by: true
  post-conditions:
    Status: InvPrio
    Priority: Nop
    OldPriorityObj: Set
  pre-conditions:
    Id:
    - Task
    State: all
    NewPriority:
    - Other
    TaskPriority:
    - Invalid
    OldPriority:
    - Valid
type: requirement