source: rtems/testsuites/sptests/sp43/init.c @ 3d54837

4.104.115
Last change on this file since 3d54837 was f0157b8, checked in by Ralf Corsepius <ralf.corsepius@…>, on 09/06/08 at 03:39:58

Convert to "bool".

  • Property mode set to 100644
File size: 12.0 KB
Line 
1/*
2 *  Exercise Object Manager Services
3 *
4 *  COPYRIGHT (c) 1989-2008.
5 *  On-Line Applications Research Corporation (OAR).
6 *
7 *  The license and distribution terms for this file may be
8 *  found in the file LICENSE in this distribution or at
9 *  http://www.rtems.com/license/LICENSE.
10 *
11 *  $Id$
12 */
13
14#define CONFIGURE_INIT
15#include "system.h"
16
17#undef rtems_build_id
18#undef rtems_build_name
19#undef rtems_object_id_api_maximum
20#undef rtems_object_id_api_minimum
21#undef rtems_object_id_get_api
22#undef rtems_object_id_get_class
23#undef rtems_object_id_get_index
24#undef rtems_object_id_get_node
25
26rtems_id         main_task;
27rtems_name       main_name;
28
29void print_class_info(
30  uint32_t                            api,
31  uint32_t                            class,
32  rtems_object_api_class_information *info
33)
34{
35  printf(
36    "%s API %s Information\n"
37    "    minimum id  : 0x%08x maximum id: 0x%08x\n"
38    "    maximum     :    %7d available : %d\n"
39    "    auto_extend : %s\n",
40    rtems_object_get_api_name(api),
41    rtems_object_get_api_class_name(api, class),
42    info->minimum_id,
43    info->maximum_id,
44    info->maximum,
45    info->unallocated,
46    ((info->auto_extend) ? "yes" : "no")
47  );
48}
49
50void change_name(
51  rtems_id    id,
52  const char *newName,
53  bool        printable
54)
55{
56  rtems_status_code    status;
57  char                 name[ 5 ];
58  char                *ptr;
59  const char          *c;
60
61  printf( "rtems_object_set_name - change name of init task to " );
62  if ( printable )
63    printf( "(%s)\n", newName );
64  else {
65    printf( "(" );
66    for (c=newName ; *c ; ) {
67       if (isprint(*c)) printf( "%c", *c );
68       else             printf( "0x%02x", *c );
69       c++;
70       if ( *c )
71         printf( "-" );
72    }
73    printf( ")\n" );
74  }
75
76  status = rtems_object_set_name( id, newName );
77  directive_failed( status, "rtems_object_set_name" );
78
79  status = rtems_object_get_classic_name( id, &main_name );
80  directive_failed( status, "rtems_object_get_classic_name" );
81  put_name( main_name, FALSE );
82  puts( " - name returned by rtems_object_get_classic_name" );
83
84  ptr = rtems_object_get_name( id, 5, name );
85  rtems_test_assert(ptr != NULL);
86  printf( "rtems_object_get_name returned (%s) for init task\n", ptr );
87}
88
89rtems_task Init(
90  rtems_task_argument argument
91)
92{
93  rtems_status_code                   status;
94  rtems_id                            tmpId;
95  rtems_name                          tmpName;
96  char                                name[5];
97  char                               *ptr;
98  const char                          newName[5] = "New1";
99  char                                tmpNameString[5];
100  uint32_t                            part;
101  rtems_object_api_class_information  info;
102
103  puts( "\n\n*** TEST 43 ***" );
104
105  printf( "RTEMS Version: %s\n", rtems_get_version_string() );
106
107  main_task = rtems_task_self();
108
109  puts( "rtems_object_get_classic_name - INVALID_ADDRESS" );
110  status = rtems_object_get_classic_name( main_task, NULL );
111  fatal_directive_status(
112    status,
113    RTEMS_INVALID_ADDRESS,
114    "rtems_object_get_classic_name #1"
115  );
116
117  puts( "rtems_object_get_classic_name - INVALID_ID (bad index)" );
118  status = rtems_object_get_classic_name( main_task + 5, &main_name );
119  fatal_directive_status(
120    status,
121    RTEMS_INVALID_ID,
122    "rtems_object_get_classic_name #2"
123  );
124
125  puts( "rtems_object_get_classic_name - INVALID_ID (unallocated index)" );
126  status = rtems_object_get_classic_name( main_task + 1, &main_name );
127  fatal_directive_status(
128    status,
129    RTEMS_INVALID_ID,
130    "rtems_object_get_classic_name #4"
131  );
132
133  puts( "rtems_object_get_classic_name - INVALID_ID (bad API)" );
134  tmpId = rtems_build_id( 0xff, OBJECTS_RTEMS_TASKS, 1, 1 ),
135  status = rtems_object_get_classic_name( tmpId, &main_name );
136  fatal_directive_status(
137    status,
138    RTEMS_INVALID_ID,
139    "rtems_object_get_classic_name #5"
140  );
141
142  status = rtems_object_get_classic_name( main_task, &main_name );
143  directive_failed( status, "rtems_object_get_classic_name" );
144  put_name( main_name, FALSE );
145  puts( " - name returned by rtems_object_get_classic_name for Init task id" );
146
147  status = rtems_object_get_classic_name( RTEMS_SELF, &main_name );
148  directive_failed( status, "rtems_object_get_classic_name" );
149  put_name( main_name, FALSE );
150  puts( " - name returned by rtems_object_get_classic_name for RTEMS_SELF" );
151
152  tmpName = rtems_build_name( 'T', 'E', 'M', 'P' );
153  put_name( tmpName, FALSE );
154  puts( " - rtems_build_name for TEMP" );
155
156 
157  /*
158   * rtems_object_get_name - cases
159   */
160  puts( "rtems_object_get_name - bad id for class with instances" );
161  ptr = rtems_object_get_name( main_task + 5, 5, name );
162  rtems_test_assert(ptr == NULL);
163
164  puts( "rtems_object_get_name - bad id for class without instances" );
165  ptr = rtems_object_get_name(
166    rtems_build_id( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_BARRIERS, 1, 1 ),
167    5,
168    name
169  );
170  rtems_test_assert(ptr == NULL);
171
172  puts( "rtems_object_get_name - bad length" );
173  ptr = rtems_object_get_name( main_task, 0, name );
174  rtems_test_assert(ptr == NULL);
175
176  puts( "rtems_object_get_name - bad pointer" );
177  ptr = rtems_object_get_name( main_task, 5, NULL );
178  rtems_test_assert(ptr == NULL);
179
180  ptr = rtems_object_get_name( main_task, 5, name );
181  rtems_test_assert(ptr != NULL);
182  printf( "rtems_object_get_name returned (%s) for init task id\n", ptr );
183
184  ptr = rtems_object_get_name( RTEMS_SELF, 5, name );
185  rtems_test_assert(ptr != NULL);
186  printf( "rtems_object_get_name returned (%s) for RTEMS_SELF\n", ptr );
187
188  /*
189   * rtems_object_set_name - errors
190   */
191
192  puts( "rtems_object_set_name - INVALID_ID (bad API)" );
193  tmpId = rtems_build_id( 0xff, OBJECTS_RTEMS_TASKS, 1, 1 ),
194  status = rtems_object_set_name( tmpId, newName );
195  fatal_directive_status(
196    status,
197    RTEMS_INVALID_ID,
198    "rtems_object_set_name #1"
199  );
200
201  puts( "rtems_object_set_name - INVALID_ID (bad index)" );
202  status = rtems_object_set_name( main_task + 10, newName );
203  fatal_directive_status(
204    status,
205    RTEMS_INVALID_ID,
206    "rtems_object_set_name #2"
207  );
208
209  /*
210   * rtems_object_set_name - change name of init task in various ways.
211   *
212   * This is strange but pushes the SuperCore code to do different things.
213   */
214
215  change_name( main_task,  "New1", TRUE );
216  change_name( main_task, "Ne1", TRUE );
217  change_name( main_task, "N1", TRUE );
218  change_name( main_task, "N", TRUE );
219  change_name( main_task, "", TRUE );
220  tmpNameString[0] = 'N';
221  tmpNameString[1] = 0x07;
222  tmpNameString[2] = 0x09;
223  tmpNameString[3] = '1';
224  tmpNameString[4] = '\0';
225  change_name( main_task, tmpNameString, FALSE );
226
227  /*
228   * Change object name using SELF ID
229   */
230
231  change_name( RTEMS_SELF,  "SELF", TRUE );
232
233  ptr = rtems_object_get_name( main_task, 5, name );
234  rtems_test_assert(ptr != NULL);
235  printf( "rtems_object_get_name returned (%s) for init task id\n", ptr );
236
237
238  /*
239   * Exercise id build and extraction routines
240   */
241
242  puts( "rtems_build_id - build an id to match init task" );
243  tmpId = rtems_build_id( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TASKS, 1, 1 ),
244  assert( tmpId == main_task );
245 
246  puts( "rtems_object_id_get_api - OK" );
247  part = rtems_object_id_get_api( main_task );
248  assert( part == OBJECTS_CLASSIC_API );
249
250  puts( "rtems_object_id_get_class - OK" );
251  part = rtems_object_id_get_class( main_task );
252  assert( part == OBJECTS_RTEMS_TASKS );
253
254  puts( "rtems_object_id_get_node - OK" );
255  part = rtems_object_id_get_node( main_task );
256  assert( part == 1 );
257
258  puts( "rtems_object_id_get_index - OK" );
259  part = rtems_object_id_get_index( main_task );
260  assert( part == 1 );
261
262  /*
263   * Start another screen and do the API/Class min/max routines
264   */
265  rtems_test_pause();
266
267  printf( "rtems_object_id_api_minimum returned %d\n",
268          rtems_object_id_api_minimum() );
269  printf( "rtems_object_id_api_maximum returned %d\n",
270          rtems_object_id_api_maximum() );
271
272  printf( "rtems_object_api_minimum_class(0) returned %d\n",
273          rtems_object_api_minimum_class(0) );
274  printf( "rtems_object_api_maximum_class(0) returned %d\n",
275          rtems_object_api_maximum_class(0) );
276
277  printf( "rtems_object_api_minimum_class(0) returned %d\n",
278          rtems_object_api_minimum_class(0) );
279  printf( "rtems_object_api_maximum_class(0) returned %d\n",
280          rtems_object_api_maximum_class(0) );
281  printf( "rtems_object_api_minimum_class(255) returned %d\n",
282          rtems_object_api_minimum_class(255) );
283  printf( "rtems_object_api_maximum_class(255) returned %d\n",
284          rtems_object_api_maximum_class(255) );
285
286  printf( "rtems_object_api_minimum_class(OBJECTS_INTERNAL_API) returned %d\n",
287          rtems_object_api_minimum_class(OBJECTS_INTERNAL_API) );
288  printf( "rtems_object_api_maximum_class(OBJECTS_INTERNAL_API) returned %d\n",
289          rtems_object_api_maximum_class(OBJECTS_INTERNAL_API) );
290
291  printf( "rtems_object_api_minimum_class(OBJECTS_CLASSIC_API) returned %d\n",
292          rtems_object_api_minimum_class(OBJECTS_CLASSIC_API) );
293  printf( "rtems_object_api_maximum_class(OBJECTS_CLASSIC_API) returned %d\n",
294          rtems_object_api_maximum_class(OBJECTS_CLASSIC_API) );
295
296  printf( "rtems_object_api_minimum_class(OBJECTS_ITRON_API) returned %d\n",
297          rtems_object_api_minimum_class(OBJECTS_ITRON_API) );
298  printf( "rtems_object_api_maximum_class(OBJECTS_ITRON_API) returned %d\n",
299          rtems_object_api_maximum_class(OBJECTS_ITRON_API) );
300
301  /*
302   *  Another screen break for the API and class name tests
303   */
304  rtems_test_pause();
305 
306  printf( "rtems_object_get_api_name(0) = %s\n", rtems_object_get_api_name(0) );
307  printf( "rtems_object_get_api_name(255) = %s\n",
308    rtems_object_get_api_name(255));
309
310  printf( "rtems_object_get_api_name(INTERNAL_API) = %s\n",
311     rtems_object_get_api_name(OBJECTS_INTERNAL_API) );
312  printf( "rtems_object_get_api_name(CLASSIC_API) = %s\n",
313     rtems_object_get_api_name(OBJECTS_CLASSIC_API) );
314  printf( "rtems_object_get_api_name(ITRON_API) = %s\n",
315     rtems_object_get_api_name(OBJECTS_ITRON_API) );
316
317  printf( "rtems_object_get_api_class_name(0, RTEMS_TASKS) = %s\n",
318    rtems_object_get_api_class_name( 0, OBJECTS_RTEMS_TASKS ) );
319  printf( "rtems_object_get_api_class_name(CLASSIC_API, 0) = %s\n",
320    rtems_object_get_api_class_name( OBJECTS_CLASSIC_API, 0 ) );
321  printf("rtems_object_get_api_class_name(INTERNAL_API, MUTEXES) = %s\n",
322    rtems_object_get_api_class_name(
323       OBJECTS_INTERNAL_API, OBJECTS_INTERNAL_MUTEXES));
324  printf("rtems_object_get_api_class_name(CLASSIC_API, RTEMS_BARRIERS) = %s\n",
325    rtems_object_get_api_class_name(
326       OBJECTS_CLASSIC_API, OBJECTS_RTEMS_BARRIERS));
327
328  /*
329   *  Another screen break for the information
330   */
331
332  rtems_test_pause();
333 
334  puts( "rtems_object_get_class_information - INVALID_ADDRESS" );
335  status = rtems_object_get_class_information(
336             OBJECTS_INTERNAL_API, OBJECTS_INTERNAL_THREADS, NULL );
337  fatal_directive_status(
338    status,
339    RTEMS_INVALID_ADDRESS,
340    "rtems_object_get_class_information"
341  );
342
343  puts( "rtems_object_get_class_information - INVALID_NUMBER (bad API)" );
344  status =
345    rtems_object_get_class_information(0, OBJECTS_INTERNAL_THREADS, &info);
346  fatal_directive_status(
347    status,
348    RTEMS_INVALID_NUMBER,
349    "rtems_object_get_class_information (API)"
350  );
351
352  puts( "rtems_object_get_class_information - INVALID_NUMBER (bad class)" );
353  status =
354    rtems_object_get_class_information( OBJECTS_INTERNAL_API, 0, &info );
355  fatal_directive_status(
356    status,
357    RTEMS_INVALID_NUMBER,
358    "rtems_object_get_class_information (API)"
359  );
360
361  puts( "rtems_object_get_class_information - Classic Tasks - OK" );
362  status = rtems_object_get_class_information(
363             OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TASKS, &info );
364  directive_failed( status, "rtems_object_get_class_information" );
365  print_class_info( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TASKS, &info );
366
367  puts( "rtems_object_get_class_information - Classic Timers - OK" );
368  status = rtems_object_get_class_information(
369             OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TIMERS, &info );
370  directive_failed( status, "rtems_object_get_class_information" );
371  print_class_info( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TIMERS, &info );
372
373
374  puts( "*** END OF TEST 43 ***" );
375  rtems_test_exit( 0 );
376}
Note: See TracBrowser for help on using the repository browser.