source: rtems/testsuites/sptests/sp43/init.c @ 67d6947

4.104.115
Last change on this file since 67d6947 was 67d6947, checked in by Joel Sherrill <joel.sherrill@…>, on 07/08/09 at 17:54:37

2009-07-08 Joel Sherrill <joel.sherrill@…>

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