summaryrefslogtreecommitdiffstats
path: root/spec/rtems/task/req/ident.yml
blob: e1276cc924e21e2738aaf879b8e1ef122c39dbe3 (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
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: /rtems/task/if/ident
post-conditions:
- name: Post
  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 status shall be RTEMS_SUCCESSFUL.  The value of the object identifier
      referenced by the id parameter shall be the identifier of the executing
      thread.
  - name: Generic
    test-code: |
      /* Checks performed by ${../../req/ident:/test-run}() */
    text: |
      The post-condition status shall be specified by ${../req/ident}.
  test-epilogue: null
  test-prologue: null
pre-conditions:
- name: Pre
  states:
  - name: Self
    test-code: |
      ctx->id_value = 0xffffffff;
      ctx->id = &ctx->id_value;
    text: |
      The name parameter shall be RTEMS_SELF.
  - name: Generic
    test-code: |
      ctx->id = NULL;
      /* Preparation performed by ${../../req/ident:/test-run}() */
    text: |
      The pre-condition status 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: null
text: ${.:text-template}
transition-map:
- enabled-by: true
  post-conditions:
    Post: OkAndSelfId
  pre-conditions:
    Pre:
    - Self
- enabled-by: true
  post-conditions:
    Post: Generic
  pre-conditions:
    Pre:
    - Generic
type: requirement