source: rtems/testsuites/psxtests/psx07/init.c @ 5f08fd6

4.104.114.84.95
Last change on this file since 5f08fd6 was 76de65b3, checked in by Joel Sherrill <joel.sherrill@…>, on 08/08/96 at 21:46:40

added cases to increase coverage of pthread_create. cases added tested
error paths as well as inherit scheduling attributes.

  • Property mode set to 100644
File size: 15.5 KB
Line 
1/*
2 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
3 *  On-Line Applications Research Corporation (OAR).
4 *  All rights assigned to U.S. Government, 1994.
5 *
6 *  This material may be reproduced by or for the U.S. Government pursuant
7 *  to the copyright license under the clause at DFARS 252.227-7013.  This
8 *  notice must appear in all copies of this file and its derivatives.
9 *
10 *  $Id$
11 */
12
13#define CONFIGURE_INIT
14#include "system.h"
15#include <errno.h>
16
17void print_schedparam(
18  char               *prefix,
19  struct sched_param *schedparam
20)
21{
22  printf( "%ssched priority      = %d\n", prefix, schedparam->sched_priority );
23#if defined(_POSIX_SPORADIC_SERVER)
24  printf( "%sss_low_priority     = %d\n", prefix, schedparam->ss_low_priority );
25  printf( "%sss_replenish_period = (%ld, %ld)\n", prefix,
26     schedparam->ss_replenish_period.tv_sec,
27     schedparam->ss_replenish_period.tv_nsec );
28  printf( "%sss_initial_budget = (%ld, %ld)\n", prefix,
29     schedparam->ss_initial_budget.tv_sec,
30     schedparam->ss_initial_budget.tv_nsec );
31#else
32  printf( "%s_POSIX_SPORADIC_SERVER is not defined\n" );
33#endif
34}
35
36void *POSIX_Init(
37  void *argument
38)
39{
40  int                 status;
41  int                 scope;
42  int                 inheritsched;
43  int                 schedpolicy;
44  size_t              stacksize;
45  void               *stackaddr;
46  int                 detachstate;
47  struct sched_param  schedparam;
48  pthread_attr_t      attr;
49  pthread_attr_t      destroyed_attr;
50
51  puts( "\n\n*** POSIX TEST 7 ***" );
52
53  /* set the time of day, and print our buffer in multiple ways */
54
55  set_time( TM_FRIDAY, TM_MAY, 24, 96, 11, 5, 0 );
56
57  /* get id of this thread */
58
59  Init_id = pthread_self();
60  printf( "Init's ID is 0x%08x\n", Init_id );
61 
62  /* exercise init and destroy */
63
64  puts( "Init: pthread_attr_init - EINVAL (NULL attr)" );
65  status = pthread_attr_init( NULL );
66  assert( status == EINVAL );
67
68  puts( "Init: pthread_attr_init - SUCCESSFUL" );
69  status = pthread_attr_init( &attr );
70  assert( !status );
71
72  puts( "Init: initialize and destroy an attribute - SUCCESSFUL" );
73  status = pthread_attr_init( &destroyed_attr );
74  assert( !status );
75
76  status = pthread_attr_destroy( &destroyed_attr );
77  assert( !status );
78
79  puts( "Init: pthread_attr_destroy - EINVAL (NULL attr)" );
80  status = pthread_attr_destroy( NULL );
81  assert( status == EINVAL );
82
83  puts( "Init: pthread_attr_destroy - EINVAL (not initialized)" );
84  status = pthread_attr_destroy( &destroyed_attr );
85  assert( status == EINVAL );
86
87  /* check some errors in pthread_create */
88
89  puts( "Init: pthread_create - EINVAL (attr not initialized)" );
90  status = pthread_create( &Task_id, &destroyed_attr, Task_1, NULL );
91  assert( status == EINVAL );
92
93  /* junk stack address */
94  status = pthread_attr_setstackaddr( &attr, (void *)&schedparam );
95  assert( !status );
96 
97  /* must go around pthread_attr_setstacksize to set a bad stack size */
98  attr.stacksize = 0;
99 
100  puts( "Init: pthread_create - EINVAL (stacksize too small)" );
101  status = pthread_create( &Task_id, &attr, Task_1, NULL );
102  assert( status == EINVAL );
103
104  status = pthread_attr_init( &attr );
105  assert( !status );
106
107  /* must go around pthread_attr_set routines to set a bad value */
108  attr.inheritsched = -1;
109 
110  puts( "Init: pthread_create - EINVAL (invalid inherit scheduler)" );
111  status = pthread_create( &Task_id, &attr, Task_1, NULL );
112  assert( status == EINVAL );
113
114  /* check out the error case for system scope not supported */
115
116  status = pthread_attr_init( &attr );
117  assert( !status );
118
119  /* must go around pthread_attr_set routines to set a bad value */
120  attr.contentionscope = PTHREAD_SCOPE_SYSTEM;
121
122  puts( "Init: pthread_create - ENOSYS (unsupported system contention scope)" );
123  status = pthread_create( &Task_id, &attr, Task_1, NULL );
124  assert( status == ENOSYS );
125
126  status = pthread_attr_init( &attr );
127  assert( !status );
128
129  /* now check out pthread_create for inherit scheduler */
130
131  status = pthread_attr_setinheritsched( &attr, PTHREAD_INHERIT_SCHED );
132  assert( !status );
133 
134  puts( "Init: pthread_create - SUCCESSFUL (inherit scheduler)" );
135  status = pthread_create( &Task_id, &attr, Task_1, NULL );
136  assert( !status );
137
138  status = pthread_join( Task_id, NULL );
139  assert( !status );
140
141    /* switch to Task_1 */
142
143  /* exercise get and set scope */
144
145  empty_line();
146
147  status = pthread_attr_init( &attr );
148  assert( !status );
149
150  puts( "Init: pthread_attr_setscope - EINVAL (NULL attr)" );
151  status = pthread_attr_setscope( NULL, PTHREAD_SCOPE_PROCESS );
152  assert( status == EINVAL );
153
154  puts( "Init: pthread_attr_setscope - ENOSYS" );
155  status = pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );
156  assert( status == ENOSYS );
157
158  puts( "Init: pthread_attr_setscope - EINVAL (not initialized attr)" );
159  status = pthread_attr_setscope( &destroyed_attr, PTHREAD_SCOPE_PROCESS );
160  assert( status == EINVAL );
161
162  puts( "Init: pthread_attr_setscope - EINVAL (invalid scope)" );
163  status = pthread_attr_setscope( &attr, -1 );
164  assert( status == EINVAL );
165
166  puts( "Init: pthread_attr_setscope - SUCCESSFUL" );
167  status = pthread_attr_setscope( &attr, PTHREAD_SCOPE_PROCESS );
168  assert( !status );
169 
170  puts( "Init: pthread_attr_getscope - EINVAL (NULL attr)" );
171  status = pthread_attr_getscope( NULL, &scope );
172  assert( status == EINVAL );
173 
174  puts( "Init: pthread_attr_getscope - EINVAL (not initialized attr)" );
175  status = pthread_attr_getscope( &destroyed_attr, &scope );
176  assert( status == EINVAL );
177 
178  puts( "Init: pthread_attr_getscope - SUCCESSFUL" );
179  status = pthread_attr_getscope( &attr, &scope );
180  assert( !status );
181  printf( "Init: current scope attribute = %d\n", scope );
182
183  /* exercise get and set inherit scheduler */
184
185  empty_line();
186
187  puts( "Init: pthread_attr_setinheritsched - EINVAL (NULL attr)" );
188  status = pthread_attr_setinheritsched( NULL, PTHREAD_INHERIT_SCHED );
189  assert( status == EINVAL );
190 
191  puts( "Init: pthread_attr_setinheritsched - EINVAL (not initialized attr)" );
192  status =
193     pthread_attr_setinheritsched( &destroyed_attr, PTHREAD_INHERIT_SCHED );
194  assert( status == EINVAL );
195 
196  puts( "Init: pthread_attr_setinheritsched - EINVAL (invalid inheritsched)" );
197  status = pthread_attr_setinheritsched( &attr, -1 );
198  assert( status == EINVAL );
199 
200  puts( "Init: pthread_attr_setinheritsched - SUCCESSFUL" );
201  status = pthread_attr_setinheritsched( &attr, PTHREAD_INHERIT_SCHED );
202  assert( !status );
203 
204  puts( "Init: pthread_attr_getinheritsched - EINVAL (NULL attr)" );
205  status = pthread_attr_getinheritsched( NULL, &inheritsched );
206  assert( status == EINVAL );
207 
208  puts( "Init: pthread_attr_getinheritsched - EINVAL (not initialized attr)" );
209  status = pthread_attr_getinheritsched( &destroyed_attr, &inheritsched );
210  assert( status == EINVAL );
211 
212  puts( "Init: pthread_attr_getinheritsched - SUCCESSFUL" );
213  status = pthread_attr_getinheritsched( &attr, &inheritsched );
214  assert( !status );
215  printf( "Init: current inherit scheduler attribute = %d\n", inheritsched );
216
217  /* exercise get and set inherit scheduler */
218 
219  empty_line();
220 
221  puts( "Init: pthread_attr_setschedpolicy - EINVAL (NULL attr)" );
222  status = pthread_attr_setschedpolicy( NULL, SCHED_FIFO );
223  assert( status == EINVAL );
224 
225  puts( "Init: pthread_attr_setschedpolicy - EINVAL (not initialized attr)" );
226  status =
227     pthread_attr_setschedpolicy( &destroyed_attr, SCHED_OTHER );
228  assert( status == EINVAL );
229 
230  puts( "Init: pthread_attr_setschedpolicy - EINVAL (invalid schedpolicy)" );
231  status = pthread_attr_setschedpolicy( &attr, -1 );
232  assert( status == EINVAL );
233 
234  puts( "Init: pthread_attr_setschedpolicy - SUCCESSFUL" );
235  status = pthread_attr_setschedpolicy( &attr, SCHED_RR );
236  assert( !status );
237 
238  puts( "Init: pthread_attr_getschedpolicy - EINVAL (NULL attr)" );
239  status = pthread_attr_getschedpolicy( NULL, &schedpolicy );
240  assert( status == EINVAL );
241 
242  puts( "Init: pthread_attr_getschedpolicy - EINVAL (not initialized attr)" );
243  status = pthread_attr_getschedpolicy( &destroyed_attr, &schedpolicy );
244  assert( status == EINVAL );
245 
246  puts( "Init: pthread_attr_getschedpolicy - SUCCESSFUL" );
247  status = pthread_attr_getschedpolicy( &attr, &schedpolicy );
248  assert( !status );
249  printf( "Init: current scheduler policy attribute = %d\n", schedpolicy );
250 
251  /* exercise get and set stack size */
252 
253  empty_line();
254 
255  puts( "Init: pthread_attr_setstacksize - EINVAL (NULL attr)" );
256  status = pthread_attr_setstacksize( NULL, 0 );
257  assert( status == EINVAL );
258 
259  puts( "Init: pthread_attr_setstacksize - EINVAL (not initialized attr)" );
260  status =
261     pthread_attr_setstacksize( &destroyed_attr, 0 );
262  assert( status == EINVAL );
263 
264  puts( "Init: pthread_attr_setstacksize - SUCCESSFUL (low stacksize)" );
265  status = pthread_attr_setstacksize( &attr, 0 );
266  assert( !status );
267
268  puts( "Init: pthread_attr_setstacksize - SUCCESSFUL (high stacksize)" );
269  status = pthread_attr_setstacksize( &attr, STACK_MINIMUM_SIZE * 2 );
270  assert( !status );
271 
272  puts( "Init: pthread_attr_getstacksize - EINVAL (NULL attr)" );
273  status = pthread_attr_getstacksize( NULL, &stacksize );
274  assert( status == EINVAL );
275 
276  puts( "Init: pthread_attr_getstacksize - EINVAL (not initialized attr)" );
277  status = pthread_attr_getstacksize( &destroyed_attr, &stacksize );
278  assert( status == EINVAL );
279 
280  puts( "Init: pthread_attr_getstacksize - SUCCESSFUL" );
281  status = pthread_attr_getstacksize( &attr, &stacksize );
282  assert( !status );
283  printf( "Init: current stack size attribute = %ld\n", (long) stacksize );
284
285  /* exercise get and set stack address */
286 
287  empty_line();
288 
289  puts( "Init: pthread_attr_setstackaddr - EINVAL (NULL attr)" );
290  status = pthread_attr_setstackaddr( NULL, NULL );
291  assert( status == EINVAL );
292 
293  puts( "Init: pthread_attr_setstackaddr - EINVAL (not initialized attr)" );
294  status =
295     pthread_attr_setstackaddr( &destroyed_attr, NULL );
296  assert( status == EINVAL );
297 
298  puts( "Init: pthread_attr_setstackaddr - SUCCESSFUL" );
299  status = pthread_attr_setstackaddr( &attr, 0 );
300  assert( !status );
301 
302  puts( "Init: pthread_attr_getstackaddr - EINVAL (NULL attr)" );
303  status = pthread_attr_getstackaddr( NULL, &stackaddr );
304  assert( status == EINVAL );
305 
306  puts( "Init: pthread_attr_getstackaddr - EINVAL (not initialized attr)" );
307  status = pthread_attr_getstackaddr( &destroyed_attr, &stackaddr );
308  assert( status == EINVAL );
309 
310  puts( "Init: pthread_attr_getstackaddr - SUCCESSFUL" );
311  status = pthread_attr_getstackaddr( &attr, &stackaddr );
312  assert( !status );
313  printf( "Init: current stack address attribute = %p\n", stackaddr );
314 
315  /* exercise get and set detach state */
316 
317  empty_line();
318 
319  puts( "Init: pthread_attr_setdetachstate - EINVAL (NULL attr)" );
320  status = pthread_attr_setdetachstate( NULL, PTHREAD_CREATE_DETACHED );
321  assert( status == EINVAL );
322 
323  puts( "Init: pthread_attr_setdetachstate - EINVAL (not initialized attr)" );
324  status =
325     pthread_attr_setdetachstate( &destroyed_attr, PTHREAD_CREATE_JOINABLE );
326  assert( status == EINVAL );
327 
328  puts( "Init: pthread_attr_setdetachstate - EINVAL (invalid detachstate)" );
329  status = pthread_attr_setdetachstate( &attr, -1 );
330  assert( status == EINVAL );
331 
332  puts( "Init: pthread_attr_setdetachstate - SUCCESSFUL" );
333  status = pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE );
334  assert( !status );
335 
336  puts( "Init: pthread_attr_getdetachstate - EINVAL (NULL attr)" );
337  status = pthread_attr_getdetachstate( NULL, &detachstate );
338  assert( status == EINVAL );
339 
340  puts( "Init: pthread_attr_getdetachstate - EINVAL (not initialized attr)" );
341  status = pthread_attr_getdetachstate( &destroyed_attr, &detachstate );
342  assert( status == EINVAL );
343 
344  puts( "Init: pthread_attr_getdetachstate - SUCCESSFUL" );
345  status = pthread_attr_getdetachstate( &attr, &detachstate );
346  assert( !status );
347  printf( "Init: current detach state attribute = %d\n", detachstate );
348
349  /* exercise get and set scheduling parameters */
350
351  empty_line();
352
353  puts( "Init: pthread_attr_getschedparam - SUCCESSFUL" );
354  status = pthread_attr_getschedparam( &attr, &schedparam );
355  assert( !status );
356
357  print_schedparam( "Init: ", &schedparam );
358
359  puts( "Init: pthread_attr_setschedparam - EINVAL (NULL attr)" );
360  status = pthread_attr_setschedparam( NULL, &schedparam );
361  assert( status == EINVAL );
362 
363  puts( "Init: pthread_attr_setschedparam - EINVAL (not initialized attr)" );
364  status = pthread_attr_setschedparam( &destroyed_attr, &schedparam );
365  assert( status == EINVAL );
366 
367  puts( "Init: pthread_attr_setschedparam - EINVAL (NULL schedparam)" );
368  status = pthread_attr_setschedparam( &attr, NULL );
369  assert( status == EINVAL );
370 
371  puts( "Init: pthread_attr_setschedparam - SUCCESSFUL" );
372  status = pthread_attr_setschedparam( &attr, &schedparam );
373  assert( !status );
374 
375  puts( "Init: pthread_attr_getschedparam - EINVAL (NULL attr)" );
376  status = pthread_attr_getschedparam( NULL, &schedparam );
377  assert( status == EINVAL );
378 
379  puts( "Init: pthread_attr_getschedparam - EINVAL (not initialized attr)" );
380  status = pthread_attr_getschedparam( &destroyed_attr, &schedparam );
381  assert( status == EINVAL );
382 
383  puts( "Init: pthread_attr_getschedparam - EINVAL (NULL schedparam)" );
384  status = pthread_attr_getschedparam( &attr, NULL );
385  assert( status == EINVAL );
386 
387  /* exercise pthread_getschedparam */
388
389  empty_line();
390
391  puts( "Init: pthread_getschedparam - EINVAL (NULL policy)" );
392  status = pthread_getschedparam( pthread_self(), NULL, &schedparam );
393  assert( status == EINVAL );
394 
395  puts( "Init: pthread_getschedparam - EINVAL (NULL schedparam)" );
396  status = pthread_getschedparam( pthread_self(), &schedpolicy, NULL );
397  assert( status == EINVAL );
398 
399  puts( "Init: pthread_getschedparam - ESRCH (bad thread)" );
400  status = pthread_getschedparam( -1, &schedpolicy, &schedparam );
401  assert( status == ESRCH );
402 
403  puts( "Init: pthread_getschedparam - SUCCESSFUL" );
404  status = pthread_getschedparam( pthread_self(), &schedpolicy, &schedparam );
405  assert( !status );
406 
407  printf( "Init: policy = %d\n", schedpolicy );
408
409  print_schedparam( "Init: ", &schedparam );
410
411  /* exercise pthread_setschedparam */
412
413  empty_line();
414
415  puts( "Init: pthread_setschedparam - EINVAL (NULL schedparam)" );
416  status = pthread_setschedparam( pthread_self(), SCHED_OTHER, NULL );
417  assert( status == EINVAL );
418
419  schedparam.sched_priority = -1;
420
421  puts( "Init: pthread_setschedparam - EINVAL (invalid priority)" );
422  status = pthread_setschedparam( pthread_self(), SCHED_OTHER, NULL );
423  assert( status == EINVAL );
424
425  schedparam.sched_priority = 128;
426
427  puts( "Init: pthread_setschedparam - EINVAL (invalid policy)" );
428  status = pthread_setschedparam( pthread_self(), -1, &schedparam );
429  assert( status == EINVAL );
430
431  puts( "Init: pthread_setschedparam - ESRCH (invalid thread)" );
432  status = pthread_setschedparam( -1, SCHED_OTHER, &schedparam );
433  assert( status == ESRCH );
434
435  /* now get sporadic server errors */
436
437  schedparam.ss_replenish_period.tv_sec = 1;
438  schedparam.ss_replenish_period.tv_nsec = 0;
439  schedparam.ss_initial_budget.tv_sec = 1;
440  schedparam.ss_initial_budget.tv_nsec = 1;
441
442  puts( "Init: pthread_setschedparam - EINVAL (replenish < budget)" );
443  status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
444  assert( status == EINVAL );
445
446  schedparam.ss_replenish_period.tv_sec = 2;
447  schedparam.ss_replenish_period.tv_nsec = 0;
448  schedparam.ss_initial_budget.tv_sec = 1;
449  schedparam.ss_initial_budget.tv_nsec = 0;
450  schedparam.ss_low_priority = -1;
451
452  puts( "Init: pthread_setschedparam - EINVAL (invalid priority)" );
453  status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
454  assert( status == EINVAL );
455
456  puts( "*** END OF POSIX TEST 7 ***" );
457  exit( 0 );
458
459  return NULL; /* just so the compiler thinks we returned something */
460}
Note: See TracBrowser for help on using the repository browser.