summaryrefslogtreecommitdiffstats
path: root/spec/rtems/task/req/ident.yml
blob: a2926dd662d170fe0979176bc39a04fb680821a5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
copyrights:
- Copyright (C) 2020 embedded brains GmbH & Co. KG
enabled-by: true
functional-type: action
links:
- role: interface-function
  uid: ../if/ident
- role: interface-function
  uid: ../../object/if/who-am-i
post-conditions:
- name: Status
  states:
  - name: OkAndWhoAmI
    test-code: |
      T_rsc( ctx->status, RTEMS_SUCCESSFUL );
      T_eq_ptr( ctx->id, &ctx->id_value );
      T_eq_u32( ctx->id_value, rtems_task_self() );
    text: |
      The return status of ${../if/ident:/name} shall be
      ${../../status/if/successful:/name}.  The value of the object identifier
      referenced by the ${../if/ident:/params[0]/name} parameter shall be the
      identifier of the executing thread.
  - name: Skip
    test-code: |
      /* Checks performed by ${../../req/ident:/test-run}() */
    text: |
      There is no status to validate.
  test-epilogue: null
  test-prologue: null
pre-conditions:
- name: Name
  states:
  - name: WhoAmI
    test-code: |
      ctx->id_value = 0xffffffff;
      ctx->id = &ctx->id_value;
    text: |
      While the ${../if/ident:/params[0]/name} parameter is equal to
      ${../../object/if/who-am-i:/name},
      while ${../if/ident:/params[2]/name} parameter is not equal to
      ${/c/if/null:/name}.
  - name: NotWhoAmI
    test-code: |
      ctx->id = NULL;
      /* Preparation performed by ${../../req/ident:/test-run}() */
    text: |
      While the ${../if/ident:/params[0]/name} is not equal to
      ${../../object/if/who-am-i:/name} or ${../if/ident:/params[2]/name}
      parameter is equal to ${/c/if/null:/name},
      the behaviour of ${../if/ident:/name} shall be specified by
      ${../../req/ident:/spec}.
  test-epilogue: null
  test-prologue: null
rationale: null
references: []
requirement-type: functional
skip-reasons: {}
test-action: |
  if ( ctx->id != NULL ) {
    ctx->status = rtems_task_ident( RTEMS_SELF, 0xdeadbeef, ctx->id );
  } else {
    ${../../req/ident:/test-run}(
      ctx->id_local_object,
      DefaultTaskConfig.name,
      ClassicTaskIdentAction
    );
  }
test-brief: null
test-cleanup: null
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: rtems_id id_local_object
test-context-support: null
test-description: null
test-header: null
test-includes: []
test-local-includes:
- tr-object-ident.h
- tx-support.h
test-prepare: null
test-setup:
  brief: null
  code: |
    rtems_status_code sc;

    sc = rtems_task_construct(
      &DefaultTaskConfig,
      &ctx->id_local_object
    );
    T_assert_rsc_success( sc );
  description: null
test-stop: null
test-support: |
  static rtems_status_code ClassicTaskIdentAction(
    rtems_name name,
    uint32_t   node,
    rtems_id  *id
  )
  {
    return rtems_task_ident( name, node, id );
  }
test-target: testsuites/validation/tc-task-ident.c
test-teardown:
  brief: null
  code: |
    if ( ctx->id_local_object != 0 ) {
      rtems_status_code sc;

      sc = rtems_task_delete( ctx->id_local_object );
      T_rsc_success( sc );
    }
  description: null
text: ${.:text-template}
transition-map:
- enabled-by: true
  post-conditions:
    Status: OkAndWhoAmI
  pre-conditions:
    Name:
    - WhoAmI
- enabled-by: true
  post-conditions:
    Status: Skip
  pre-conditions:
    Name:
    - NotWhoAmI
type: requirement