source: rtems/testsuites/sptests/sp07/init.c @ 3d73642

5
Last change on this file since 3d73642 was 3d73642, checked in by Sebastian Huber <sebastian.huber@…>, on 04/17/20 at 08:00:15

sapi: Add param check to rtems_extension_create()

Check that the extensions table is not NULL. Change format.

Update #3953.

  • Property mode set to 100644
File size: 6.6 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989-2009.
3 *  On-Line Applications Research Corporation (OAR).
4 *
5 *  The license and distribution terms for this file may be
6 *  found in the file LICENSE in this distribution or at
7 *  http://www.rtems.org/license/LICENSE.
8 */
9
10#ifdef HAVE_CONFIG_H
11#include "config.h"
12#endif
13
14#define CONFIGURE_INIT
15#include "system.h"
16
17const char rtems_test_name[] = "SP 7";
18
19static void Task_harmless_extension_one(
20  rtems_tcb *unused_one
21)
22{
23  /* Do nothing */
24}
25
26static void Task_harmless_extension_two(
27  rtems_tcb *unused_one,
28  rtems_tcb *unused_two
29)
30{
31  /* Do nothing */
32}
33
34static bool Task_harmless_extension_true_two(
35  rtems_tcb *unused_one,
36  rtems_tcb *unused_two
37)
38{
39  return true;
40}
41
42static const rtems_extensions_table Harmless_extensions = {
43  Task_harmless_extension_true_two,
44  Task_harmless_extension_two,
45  Task_harmless_extension_two,
46  Task_harmless_extension_two,
47  Task_harmless_extension_two,
48  Task_harmless_extension_one,
49  Task_harmless_extension_one,
50  NULL
51};
52
53rtems_extensions_table Extensions = {
54  Task_create_extension,     /* task create user extension */
55  Task_start_extension,      /* task start user extension */
56  Task_restart_extension,    /* task restart user extension */
57  Task_delete_extension,     /* task delete user extension */
58  NULL,                      /* task switch user extension */
59  NULL,                      /* begin user extension */
60  Task_exit_extension,       /* task exitted user extension */
61  NULL                       /* fatal error extension */
62};
63
64rtems_task Init(
65  rtems_task_argument argument
66)
67{
68  rtems_status_code status;
69  rtems_id          id;
70
71  TEST_BEGIN();
72
73  Extension_name[ 1 ] =  rtems_build_name( 'E', 'X', 'T', '1' );
74  Extension_name[ 2 ] =  rtems_build_name( 'E', 'X', 'T', '2' );
75
76  puts  ( "rtems_extension_create - bad table -- RTEMS_INVALID_ADDRESS" );
77  status = rtems_extension_create( 0xa5a5a5a5, NULL, &id );
78  fatal_directive_status(
79    status, RTEMS_INVALID_ADDRESS, "rtems_extension_create" );
80
81  puts  ( "rtems_extension_create - bad id pointer -- RTEMS_INVALID_ADDRESS" );
82  status = rtems_extension_create( 0xa5a5a5a5, &Extensions, NULL );
83  fatal_directive_status(
84    status, RTEMS_INVALID_ADDRESS, "rtems_extension_create" );
85
86  puts  ( "rtems_extension_create - bad name -- RTEMS_INVALID_NAME" );
87  status = rtems_extension_create( 0, &Extensions, &id );
88  fatal_directive_status(
89    status, RTEMS_INVALID_NAME, "rtems_extension_create #1" );
90
91  puts( "rtems_extension_create - first one -- OK" );
92  status = rtems_extension_create(
93    Extension_name[ 1 ],
94    &Extensions,
95    &Extension_id[ 1 ]
96  );
97  directive_failed( status, "rtems_extension_create" );
98
99  puts( "rtems_extension_create - second one-- OK" );
100  status = rtems_extension_create(
101    Extension_name[ 2 ],
102    &Extensions,
103    &Extension_id[ 2 ]
104  );
105  directive_failed( status, "rtems_extension_create #2" );
106
107  puts  ( "rtems_extension_create -- RTEMS_TOO_MANY" );
108  status = rtems_extension_create( 0xa5a5a5a5, &Extensions, &id );
109  fatal_directive_status( status, RTEMS_TOO_MANY, "rtems_extension_create" );
110
111  puts( "rtems_extension_delete - second one -- OK" );
112  status = rtems_extension_delete( Extension_id[ 2 ] );
113  directive_failed( status, "rtems_extension_delete #2" );
114
115  puts( "rtems_extension_delete - second one again -- RTEMS_INVALID_ID" );
116  status = rtems_extension_delete( Extension_id[ 2 ] );
117  fatal_directive_status(
118    status,
119    RTEMS_INVALID_ID,
120    "rtems_extension_delete #2 bad"
121  );
122
123  puts  ( "rtems_extension_ident -- OK" );
124  status = rtems_extension_ident( Extension_name[1], &id );
125  directive_failed( status, "rtems_extension_ident" );
126
127  puts  ( "rtems_extension_ident - bad name -- RTEMS_INVALID_NAME" );
128  status = rtems_extension_ident( Extension_name[2], &id );
129  fatal_directive_status( status, RTEMS_INVALID_NAME, "rtems_extension_ident" );
130
131  puts  ( "rtems_extension_ident - bad name -- RTEMS_INVALID_ADDRESS" );
132  status = rtems_extension_ident( Extension_name[2], NULL );
133  fatal_directive_status(
134    status,
135    RTEMS_INVALID_ADDRESS,
136    "rtems_extension_ident"
137  );
138
139  puts( "rtems_extension_create - harmless -- OK" );
140  status = rtems_extension_create(
141    Extension_name[ 2 ],
142    &Harmless_extensions,
143    &Extension_id[ 2 ]
144  );
145  directive_failed( status, "rtems_extension_create #3" );
146
147  Task_name[ 1 ] = rtems_build_name( 'T', 'A', '1', ' ' );
148  Task_name[ 2 ] = rtems_build_name( 'T', 'A', '2', ' ' );
149  Task_name[ 3 ] = rtems_build_name( 'T', 'A', '3', ' ' );
150  Task_name[ 4 ] = rtems_build_name( 'T', 'A', '4', ' ' );
151
152  status = rtems_task_create(
153    Task_name[ 1 ],
154    4,
155    RTEMS_MINIMUM_STACK_SIZE * 2,
156    RTEMS_DEFAULT_MODES,
157    RTEMS_DEFAULT_ATTRIBUTES,
158    &Task_id[ 1 ]
159  );
160  directive_failed( status, "rtems_task_create of TA1" );
161  assert_extension_counts( &Task_created[ 0 ], 0x2 );
162
163  status = rtems_task_create(
164    Task_name[ 2 ],
165    4,
166    RTEMS_MINIMUM_STACK_SIZE * 2,
167    RTEMS_DEFAULT_MODES,
168    RTEMS_DEFAULT_ATTRIBUTES,
169    &Task_id[ 2 ]
170  );
171  directive_failed( status, "rtems_task_create of TA2" );
172  assert_extension_counts( &Task_created[ 0 ], 0x2 | 0x4 );
173
174#define TA3_PRIORITY (RTEMS_MAXIMUM_PRIORITY - 4u)
175  status = rtems_task_create(
176    Task_name[ 3 ],
177    TA3_PRIORITY,
178    RTEMS_MINIMUM_STACK_SIZE * 2,
179    RTEMS_DEFAULT_MODES,
180    RTEMS_DEFAULT_ATTRIBUTES,
181    &Task_id[ 3 ]
182  );
183  directive_failed( status, "rtems_task_create of TA3" );
184  assert_extension_counts( &Task_created[ 0 ], 0x2 | 0x4 | 0x8 );
185
186#define TA4_PRIORITY (RTEMS_MAXIMUM_PRIORITY - 1u)
187  status = rtems_task_create(
188    Task_name[ 4 ],
189    TA4_PRIORITY,
190    RTEMS_MINIMUM_STACK_SIZE * 2,
191    RTEMS_DEFAULT_MODES,
192    RTEMS_DEFAULT_ATTRIBUTES,
193    &Task_id[ 4 ]
194  );
195  directive_failed( status, "rtems_task_create of TA4" );
196  assert_extension_counts( &Task_created[ 0 ], 0x2 | 0x4 | 0x8 | 0x10 );
197
198  status = rtems_task_start( Task_id[ 1 ], Task_1, 0 );
199  directive_failed( status, "rtems_task_start of TA1" );
200  assert_extension_counts( &Task_started[ 0 ], 0x2 );
201
202  status = rtems_task_start( Task_id[ 2 ], Task_2, 0 );
203  directive_failed( status, "rtems_task_start of TA2" );
204  assert_extension_counts( &Task_started[ 0 ], 0x2 | 0x4 );
205
206  status = rtems_task_start( Task_id[ 3 ], Task_3, 0 );
207  directive_failed( status, "rtems_task_start of TA3" );
208  assert_extension_counts( &Task_started[ 0 ], 0x2 | 0x4 | 0x8 );
209
210  status = rtems_task_start( Task_id[ 4 ], Task_4, 0 );
211  directive_failed( status, "rtems_task_start of TA4" );
212  assert_extension_counts( &Task_started[ 0 ], 0x2 | 0x4 | 0x8 | 0x10 );
213
214  status = rtems_task_restart( Task_id[ 2 ], 0 );
215  directive_failed( status, "rtems_task_restart of TA3" );
216  assert_extension_counts( &Task_restarted[ 0 ], 0x0 );
217
218  rtems_task_exit();
219}
Note: See TracBrowser for help on using the repository browser.