source: rtems/c/src/tests/psxtests/psx07/init.c @ c123a084

4.104.114.84.95
Last change on this file since c123a084 was c123a084, checked in by Joel Sherrill <joel.sherrill@…>, on 08/07/96 at 15:52:30

added complete test cases for pthread_attr_getschedparam,
pthread_attr_setschedparam, and pthread_getschedparam.

added test cases for error paths for pthread_setschedparam.

  • Property mode set to 100644
File size: 13.7 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  /* exercise get and set scope */
88
89  empty_line();
90
91  puts( "Init: pthread_attr_setscope - EINVAL (NULL attr)" );
92  status = pthread_attr_setscope( NULL, PTHREAD_SCOPE_PROCESS );
93  assert( status == EINVAL );
94
95  puts( "Init: pthread_attr_setscope - ENOSYS" );
96  status = pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM );
97  assert( status == ENOSYS );
98
99  puts( "Init: pthread_attr_setscope - EINVAL (not initialized attr)" );
100  status = pthread_attr_setscope( &destroyed_attr, PTHREAD_SCOPE_PROCESS );
101  assert( status == EINVAL );
102
103  puts( "Init: pthread_attr_setscope - EINVAL (invalid scope)" );
104  status = pthread_attr_setscope( &attr, -1 );
105  assert( status == EINVAL );
106
107  puts( "Init: pthread_attr_setscope - SUCCESSFUL" );
108  status = pthread_attr_setscope( &attr, PTHREAD_SCOPE_PROCESS );
109  assert( !status );
110 
111  puts( "Init: pthread_attr_getscope - EINVAL (NULL attr)" );
112  status = pthread_attr_getscope( NULL, &scope );
113  assert( status == EINVAL );
114 
115  puts( "Init: pthread_attr_getscope - EINVAL (not initialized attr)" );
116  status = pthread_attr_getscope( &destroyed_attr, &scope );
117  assert( status == EINVAL );
118 
119  puts( "Init: pthread_attr_getscope - SUCCESSFUL" );
120  status = pthread_attr_getscope( &attr, &scope );
121  assert( !status );
122  printf( "Init: current scope attribute = %d\n", scope );
123
124  /* exercise get and set inherit scheduler */
125
126  empty_line();
127
128  puts( "Init: pthread_attr_setinheritsched - EINVAL (NULL attr)" );
129  status = pthread_attr_setinheritsched( NULL, PTHREAD_INHERIT_SCHED );
130  assert( status == EINVAL );
131 
132  puts( "Init: pthread_attr_setinheritsched - EINVAL (not initialized attr)" );
133  status =
134     pthread_attr_setinheritsched( &destroyed_attr, PTHREAD_INHERIT_SCHED );
135  assert( status == EINVAL );
136 
137  puts( "Init: pthread_attr_setinheritsched - EINVAL (invalid inheritsched)" );
138  status = pthread_attr_setinheritsched( &attr, -1 );
139  assert( status == EINVAL );
140 
141  puts( "Init: pthread_attr_setinheritsched - SUCCESSFUL" );
142  status = pthread_attr_setinheritsched( &attr, PTHREAD_INHERIT_SCHED );
143  assert( !status );
144 
145  puts( "Init: pthread_attr_getinheritsched - EINVAL (NULL attr)" );
146  status = pthread_attr_getinheritsched( NULL, &inheritsched );
147  assert( status == EINVAL );
148 
149  puts( "Init: pthread_attr_getinheritsched - EINVAL (not initialized attr)" );
150  status = pthread_attr_getinheritsched( &destroyed_attr, &inheritsched );
151  assert( status == EINVAL );
152 
153  puts( "Init: pthread_attr_getinheritsched - SUCCESSFUL" );
154  status = pthread_attr_getinheritsched( &attr, &inheritsched );
155  assert( !status );
156  printf( "Init: current inherit scheduler attribute = %d\n", inheritsched );
157
158  /* exercise get and set inherit scheduler */
159 
160  empty_line();
161 
162  puts( "Init: pthread_attr_setschedpolicy - EINVAL (NULL attr)" );
163  status = pthread_attr_setschedpolicy( NULL, SCHED_FIFO );
164  assert( status == EINVAL );
165 
166  puts( "Init: pthread_attr_setschedpolicy - EINVAL (not initialized attr)" );
167  status =
168     pthread_attr_setschedpolicy( &destroyed_attr, SCHED_OTHER );
169  assert( status == EINVAL );
170 
171  puts( "Init: pthread_attr_setschedpolicy - EINVAL (invalid schedpolicy)" );
172  status = pthread_attr_setschedpolicy( &attr, -1 );
173  assert( status == EINVAL );
174 
175  puts( "Init: pthread_attr_setschedpolicy - SUCCESSFUL" );
176  status = pthread_attr_setschedpolicy( &attr, SCHED_RR );
177  assert( !status );
178 
179  puts( "Init: pthread_attr_getschedpolicy - EINVAL (NULL attr)" );
180  status = pthread_attr_getschedpolicy( NULL, &schedpolicy );
181  assert( status == EINVAL );
182 
183  puts( "Init: pthread_attr_getschedpolicy - EINVAL (not initialized attr)" );
184  status = pthread_attr_getschedpolicy( &destroyed_attr, &schedpolicy );
185  assert( status == EINVAL );
186 
187  puts( "Init: pthread_attr_getschedpolicy - SUCCESSFUL" );
188  status = pthread_attr_getschedpolicy( &attr, &schedpolicy );
189  assert( !status );
190  printf( "Init: current scheduler policy attribute = %d\n", schedpolicy );
191 
192  /* exercise get and set stack size */
193 
194  empty_line();
195 
196  puts( "Init: pthread_attr_setstacksize - EINVAL (NULL attr)" );
197  status = pthread_attr_setstacksize( NULL, 0 );
198  assert( status == EINVAL );
199 
200  puts( "Init: pthread_attr_setstacksize - EINVAL (not initialized attr)" );
201  status =
202     pthread_attr_setstacksize( &destroyed_attr, 0 );
203  assert( status == EINVAL );
204 
205  puts( "Init: pthread_attr_setstacksize - SUCCESSFUL (low stacksize)" );
206  status = pthread_attr_setstacksize( &attr, 0 );
207  assert( !status );
208
209  puts( "Init: pthread_attr_setstacksize - SUCCESSFUL (high stacksize)" );
210  status = pthread_attr_setstacksize( &attr, STACK_MINIMUM_SIZE * 2 );
211  assert( !status );
212 
213  puts( "Init: pthread_attr_getstacksize - EINVAL (NULL attr)" );
214  status = pthread_attr_getstacksize( NULL, &stacksize );
215  assert( status == EINVAL );
216 
217  puts( "Init: pthread_attr_getstacksize - EINVAL (not initialized attr)" );
218  status = pthread_attr_getstacksize( &destroyed_attr, &stacksize );
219  assert( status == EINVAL );
220 
221  puts( "Init: pthread_attr_getstacksize - SUCCESSFUL" );
222  status = pthread_attr_getstacksize( &attr, &stacksize );
223  assert( !status );
224  printf( "Init: current stack size attribute = %ld\n", (long) stacksize );
225
226  /* exercise get and set stack address */
227 
228  empty_line();
229 
230  puts( "Init: pthread_attr_setstackaddr - EINVAL (NULL attr)" );
231  status = pthread_attr_setstackaddr( NULL, NULL );
232  assert( status == EINVAL );
233 
234  puts( "Init: pthread_attr_setstackaddr - EINVAL (not initialized attr)" );
235  status =
236     pthread_attr_setstackaddr( &destroyed_attr, NULL );
237  assert( status == EINVAL );
238 
239  puts( "Init: pthread_attr_setstackaddr - SUCCESSFUL" );
240  status = pthread_attr_setstackaddr( &attr, 0 );
241  assert( !status );
242 
243  puts( "Init: pthread_attr_getstackaddr - EINVAL (NULL attr)" );
244  status = pthread_attr_getstackaddr( NULL, &stackaddr );
245  assert( status == EINVAL );
246 
247  puts( "Init: pthread_attr_getstackaddr - EINVAL (not initialized attr)" );
248  status = pthread_attr_getstackaddr( &destroyed_attr, &stackaddr );
249  assert( status == EINVAL );
250 
251  puts( "Init: pthread_attr_getstackaddr - SUCCESSFUL" );
252  status = pthread_attr_getstackaddr( &attr, &stackaddr );
253  assert( !status );
254  printf( "Init: current stack address attribute = %p\n", stackaddr );
255 
256  /* exercise get and set detach state */
257 
258  empty_line();
259 
260  puts( "Init: pthread_attr_setdetachstate - EINVAL (NULL attr)" );
261  status = pthread_attr_setdetachstate( NULL, PTHREAD_CREATE_DETACHED );
262  assert( status == EINVAL );
263 
264  puts( "Init: pthread_attr_setdetachstate - EINVAL (not initialized attr)" );
265  status =
266     pthread_attr_setdetachstate( &destroyed_attr, PTHREAD_CREATE_JOINABLE );
267  assert( status == EINVAL );
268 
269  puts( "Init: pthread_attr_setdetachstate - EINVAL (invalid detachstate)" );
270  status = pthread_attr_setdetachstate( &attr, -1 );
271  assert( status == EINVAL );
272 
273  puts( "Init: pthread_attr_setdetachstate - SUCCESSFUL" );
274  status = pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE );
275  assert( !status );
276 
277  puts( "Init: pthread_attr_getdetachstate - EINVAL (NULL attr)" );
278  status = pthread_attr_getdetachstate( NULL, &detachstate );
279  assert( status == EINVAL );
280 
281  puts( "Init: pthread_attr_getdetachstate - EINVAL (not initialized attr)" );
282  status = pthread_attr_getdetachstate( &destroyed_attr, &detachstate );
283  assert( status == EINVAL );
284 
285  puts( "Init: pthread_attr_getdetachstate - SUCCESSFUL" );
286  status = pthread_attr_getdetachstate( &attr, &detachstate );
287  assert( !status );
288  printf( "Init: current detach state attribute = %d\n", detachstate );
289
290  /* exercise get and set scheduling parameters */
291
292  empty_line();
293
294  puts( "Init: pthread_attr_getschedparam - SUCCESSFUL" );
295  status = pthread_attr_getschedparam( &attr, &schedparam );
296  assert( !status );
297
298  print_schedparam( "Init: ", &schedparam );
299
300  puts( "Init: pthread_attr_setschedparam - EINVAL (NULL attr)" );
301  status = pthread_attr_setschedparam( NULL, &schedparam );
302  assert( status == EINVAL );
303 
304  puts( "Init: pthread_attr_setschedparam - EINVAL (not initialized attr)" );
305  status = pthread_attr_setschedparam( &destroyed_attr, &schedparam );
306  assert( status == EINVAL );
307 
308  puts( "Init: pthread_attr_setschedparam - EINVAL (NULL schedparam)" );
309  status = pthread_attr_setschedparam( &attr, NULL );
310  assert( status == EINVAL );
311 
312  puts( "Init: pthread_attr_setschedparam - SUCCESSFUL" );
313  status = pthread_attr_setschedparam( &attr, &schedparam );
314  assert( !status );
315 
316  puts( "Init: pthread_attr_getschedparam - EINVAL (NULL attr)" );
317  status = pthread_attr_getschedparam( NULL, &schedparam );
318  assert( status == EINVAL );
319 
320  puts( "Init: pthread_attr_getschedparam - EINVAL (not initialized attr)" );
321  status = pthread_attr_getschedparam( &destroyed_attr, &schedparam );
322  assert( status == EINVAL );
323 
324  puts( "Init: pthread_attr_getschedparam - EINVAL (NULL schedparam)" );
325  status = pthread_attr_getschedparam( &attr, NULL );
326  assert( status == EINVAL );
327 
328  /* exercise pthread_getschedparam */
329
330  empty_line();
331
332  puts( "Init: pthread_getschedparam - EINVAL (NULL policy)" );
333  status = pthread_getschedparam( pthread_self(), NULL, &schedparam );
334  assert( status == EINVAL );
335 
336  puts( "Init: pthread_getschedparam - EINVAL (NULL schedparam)" );
337  status = pthread_getschedparam( pthread_self(), &schedpolicy, NULL );
338  assert( status == EINVAL );
339 
340  puts( "Init: pthread_getschedparam - ESRCH (bad thread)" );
341  status = pthread_getschedparam( -1, &schedpolicy, &schedparam );
342  assert( status == ESRCH );
343 
344  puts( "Init: pthread_getschedparam - SUCCESSFUL" );
345  status = pthread_getschedparam( pthread_self(), &schedpolicy, &schedparam );
346  assert( !status );
347 
348  printf( "Init: policy = %d\n", schedpolicy );
349
350  print_schedparam( "Init: ", &schedparam );
351
352  /* exercise pthread_setschedparam */
353
354  empty_line();
355
356  puts( "Init: pthread_setschedparam - EINVAL (NULL schedparam)" );
357  status = pthread_setschedparam( pthread_self(), SCHED_OTHER, NULL );
358  assert( status == EINVAL );
359
360  schedparam.sched_priority = -1;
361
362  puts( "Init: pthread_setschedparam - EINVAL (invalid priority)" );
363  status = pthread_setschedparam( pthread_self(), SCHED_OTHER, NULL );
364  assert( status == EINVAL );
365
366  schedparam.sched_priority = 128;
367
368  puts( "Init: pthread_setschedparam - EINVAL (invalid policy)" );
369  status = pthread_setschedparam( pthread_self(), -1, &schedparam );
370  assert( status == EINVAL );
371
372  puts( "Init: pthread_setschedparam - ESRCH (invalid thread)" );
373  status = pthread_setschedparam( -1, SCHED_OTHER, &schedparam );
374  assert( status == ESRCH );
375
376  /* now get sporadic server errors */
377
378  schedparam.ss_replenish_period.tv_sec = 1;
379  schedparam.ss_replenish_period.tv_nsec = 0;
380  schedparam.ss_initial_budget.tv_sec = 1;
381  schedparam.ss_initial_budget.tv_nsec = 1;
382
383  puts( "Init: pthread_setschedparam - EINVAL (replenish < budget)" );
384  status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
385  assert( status == EINVAL );
386
387  schedparam.ss_replenish_period.tv_sec = 2;
388  schedparam.ss_replenish_period.tv_nsec = 0;
389  schedparam.ss_initial_budget.tv_sec = 1;
390  schedparam.ss_initial_budget.tv_nsec = 0;
391  schedparam.ss_low_priority = -1;
392
393  puts( "Init: pthread_setschedparam - EINVAL (invalid priority)" );
394  status = pthread_setschedparam( pthread_self(), SCHED_SPORADIC, &schedparam );
395  assert( status == EINVAL );
396
397
398  puts( "*** END OF POSIX TEST 7 ***" );
399  exit( 0 );
400
401  return NULL; /* just so the compiler thinks we returned something */
402}
Note: See TracBrowser for help on using the repository browser.