summaryrefslogtreecommitdiffstats
path: root/spec/rtems/task/req/ident.yml
blob: df187d09ff3ed89b159399b544ec2ffc55cae361 (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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
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/ident
post-conditions:
- name: Status
  states:
  - name: OkAndSelfId
    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: Self
    test-code: |
      ctx->id_value = 0xffffffff;
      ctx->id = &ctx->id_value;
    text: |
      The ${../if/ident:/params[0]/name} parameter shall be
      ${../if/self:/name}.
  - name: NotSelf
    test-code: |
      ctx->id = NULL;
      /* Preparation performed by ${../../req/ident:/test-run}() */
    text: |
      When the ${../if/ident:/params[0]/name} is not ${../if/self:/name} or
      ${../if/ident:/params[2]/name} parameter is ${/c/if/null:/name}, the
      behaviour of ${../if/ident:/name} shall be specified by
      ${../../req/ident}.
  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,
      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
test-prepare: null
test-setup:
  brief: null
  code: |
    rtems_status_code sc;

    sc = rtems_task_construct(
      &ClassicTaskIdentConfig,
      &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 );
  }

  #define TASK_ATTRIBUTES RTEMS_DEFAULT_ATTRIBUTES

  #define MAX_TLS_SIZE RTEMS_ALIGN_UP( 64, RTEMS_TASK_STORAGE_ALIGNMENT )

  RTEMS_ALIGNED( RTEMS_TASK_STORAGE_ALIGNMENT )
  static char ClassicTaskIdentStorage[
    RTEMS_TASK_STORAGE_SIZE(
      MAX_TLS_SIZE + RTEMS_MINIMUM_STACK_SIZE,
      TASK_ATTRIBUTES
    )
  ];

  static const rtems_task_config ClassicTaskIdentConfig = {
    .name = ClassicObjectIdentName,
    .initial_priority = 1,
    .storage_area = ClassicTaskIdentStorage,
    .storage_size = sizeof( ClassicTaskIdentStorage ),
    .maximum_thread_local_storage_size = MAX_TLS_SIZE,
    .initial_modes = RTEMS_DEFAULT_MODES,
    .attributes = TASK_ATTRIBUTES
  };
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: OkAndSelfId
  pre-conditions:
    Name:
    - Self
- enabled-by: true
  post-conditions:
    Status: Skip
  pre-conditions:
    Name:
    - NotSelf
type: requirement