source: rtems/testsuites/sptests/spmsgq_err01/init.c @ a3707d89

4.115
Last change on this file since a3707d89 was a3707d89, checked in by Bjorn Larsson <bjornlarsson@…>, on 03/25/14 at 18:48:30

sptests: Split sp09 screens 7,8 into spmsg1_err01 and spmsgq_err02.

spmsgq_err01 test replaces rtems_message_queue_XXX error tests from
sp09 screen 7. spmsgq_err02 replaces rtems_message_queue_XXX error
tests from sp09 screen 8.

  • Property mode set to 100644
File size: 10.5 KB
Line 
1/*
2 *  COPYRIGHT (c) 2014.
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.com/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#define MESSAGE_SIZE (sizeof(long) * 4)
17
18const char rtems_test_name[] = "SP MESSAGE QUEUE ERROR 1";
19
20rtems_task Init(
21  rtems_task_argument argument
22)
23{
24  long              buffer[ 4 ];
25  uint32_t          count;
26  size_t            size;
27  rtems_status_code status;
28 
29  TEST_BEGIN();
30  Queue_name[ 1 ]      =  rtems_build_name( 'M', 'Q', '1', ' ' );
31  Queue_name[ 2 ]      =  rtems_build_name( 'M', 'Q', '2', ' ' );
32 
33  status = rtems_message_queue_broadcast( 100, buffer, MESSAGE_SIZE, &count );
34  fatal_directive_status(
35    status,
36    RTEMS_INVALID_ID,
37    "rtems_message_queue_broadcast with illegal id"
38  );
39  puts( "TA1 - rtems_message_queue_broadcast - RTEMS_INVALID_ID" );
40
41  /* null ID parameter */
42  status = rtems_message_queue_create(
43    Queue_name[ 1 ],
44    3,
45    MESSAGE_SIZE,
46    RTEMS_DEFAULT_ATTRIBUTES,
47    NULL
48  );
49  fatal_directive_status(
50    status,
51    RTEMS_INVALID_ADDRESS,
52    "rtems_message_queue_create with null param"
53  );
54  puts( "TA1 - rtems_message_queue_create - NULL Id - RTEMS_INVALID_ADDRESS" );
55
56  /* count == 0 */
57  status = rtems_message_queue_create(
58    Queue_name[ 1 ],
59    0,
60    MESSAGE_SIZE,
61    RTEMS_DEFAULT_ATTRIBUTES,
62    &Junk_id
63  );
64  fatal_directive_status(
65    status,
66    RTEMS_INVALID_NUMBER,
67    "rtems_message_queue_create with 0 count"
68  );
69  puts( "TA1 - rtems_message_queue_create - count = 0 - RTEMS_INVALID_NUMBER" );
70
71  /* max size == 0 */
72  status = rtems_message_queue_create(
73    Queue_name[ 1 ],
74    3,
75    0,
76    RTEMS_DEFAULT_ATTRIBUTES,
77    &Junk_id
78  );
79  fatal_directive_status(
80    status,
81    RTEMS_INVALID_SIZE,
82    "rtems_message_queue_create with 0 msg size"
83  );
84  puts( "TA1 - rtems_message_queue_create - size = 0 - RTEMS_INVALID_SIZE" );
85
86  /* bad name parameter */
87  status = rtems_message_queue_create(
88    0,
89    3,
90    MESSAGE_SIZE,
91    RTEMS_DEFAULT_ATTRIBUTES,
92    &Junk_id
93  );
94  fatal_directive_status(
95    status,
96    RTEMS_INVALID_NAME,
97    "rtems_message_queue_create with illegal name"
98  );
99  puts( "TA1 - rtems_message_queue_create - Q 1 - RTEMS_INVALID_NAME" );
100
101  /*
102   *  The check for an object being global is only made if
103   *  multiprocessing is enabled.
104   */
105
106#if defined(RTEMS_MULTIPROCESSING)
107  status = rtems_message_queue_create(
108    Queue_name[ 1 ],
109    1,
110    MESSAGE_SIZE,
111    RTEMS_GLOBAL,
112    &Junk_id
113  );
114  fatal_directive_status(
115    status,
116    RTEMS_MP_NOT_CONFIGURED,
117    "rtems_message_queue_create of mp not configured"
118  );
119#endif
120  puts( "TA1 - rtems_message_queue_create - Q 1 - RTEMS_MP_NOT_CONFIGURED" );
121
122  /* not enough memory for messages */
123  status = rtems_message_queue_create(
124    Queue_name[ 1 ],
125    INT_MAX,
126    MESSAGE_SIZE,
127    RTEMS_DEFAULT_ATTRIBUTES,
128    &Queue_id[ 1 ]
129  );
130  fatal_directive_status(
131    status,
132    RTEMS_UNSATISFIED,
133    "rtems_message_queue_create unsatisfied"
134  );
135  puts( "TA1 - rtems_message_queue_create - Q 2 - RTEMS_UNSATISFIED" );
136
137  /* too large a request for messages */
138  status = rtems_message_queue_create(
139    Queue_name[ 1 ],
140    INT_MAX,
141    INT_MAX,
142    RTEMS_DEFAULT_ATTRIBUTES,
143    &Queue_id[ 1 ]
144  );
145  fatal_directive_status(
146    status,
147    RTEMS_UNSATISFIED,
148    "rtems_message_queue_create unsatisfied"
149  );
150  puts( "TA1 - rtems_message_queue_create - Q 2 - RTEMS_UNSATISFIED #2" );
151
152  status = rtems_message_queue_create(
153    Queue_name[ 1 ],
154    2,
155    MESSAGE_SIZE,
156    RTEMS_DEFAULT_ATTRIBUTES,
157    &Queue_id[ 1 ]
158  );
159  directive_failed( status, "rtems_message_queue_create successful" );
160  puts( "TA1 - rtems_message_queue_create - Q 1 - 2 DEEP - RTEMS_SUCCESSFUL" );
161
162  status = rtems_message_queue_create(
163    Queue_name[ 2 ],
164    1,
165    MESSAGE_SIZE,
166    RTEMS_DEFAULT_ATTRIBUTES,
167    &Junk_id
168  );
169  fatal_directive_status(
170    status,
171    RTEMS_TOO_MANY,
172    "rtems_message_queue_create of too many"
173  );
174  puts( "TA1 - rtems_message_queue_create - Q 2 - RTEMS_TOO_MANY" );
175
176  status = rtems_message_queue_delete( 100 );
177  fatal_directive_status(
178    status,
179    RTEMS_INVALID_ID,
180    "rtems_message_queue_create with illegal id"
181  );
182  puts( "TA1 - rtems_message_queue_delete - unknown RTEMS_INVALID_ID" );
183
184  status = rtems_message_queue_delete( rtems_build_id( 1, 1, 1, 256 ) );
185  fatal_directive_status(
186    status,
187    RTEMS_INVALID_ID,
188    "rtems_message_queue_delete with local illegal id"
189  );
190  puts( "TA1 - rtems_message_queue_delete - local RTEMS_INVALID_ID" );
191
192  status = rtems_message_queue_ident( 100, RTEMS_SEARCH_ALL_NODES, &Junk_id );
193  fatal_directive_status(
194    status,
195    RTEMS_INVALID_NAME,
196    "rtems_message_queue_ident with illegal name"
197  );
198  puts( "TA1 - rtems_message_queue_ident - RTEMS_INVALID_NAME" );
199
200  /* number pending - bad Id */
201  status = rtems_message_queue_get_number_pending( Queue_id[ 1 ], NULL );
202  fatal_directive_status(
203    status,
204    RTEMS_INVALID_ADDRESS,
205    "rtems_message_queue_get_number_pending with NULL param"
206  );
207  puts("TA1 - rtems_message_queue_get_number_pending - RTEMS_INVALID_ADDRESS");
208
209  /* number pending - bad Id */
210  status = rtems_message_queue_get_number_pending( 100, &count );
211  fatal_directive_status(
212    status,
213    RTEMS_INVALID_ID,
214    "rtems_message_queue_get_number_pending with illegal id"
215  );
216  puts( "TA1 - rtems_message_queue_get_number_pending - RTEMS_INVALID_ID" );
217
218  /* flush null param */
219  status = rtems_message_queue_flush( Queue_id[ 1 ], NULL );
220  fatal_directive_status(
221    status,
222    RTEMS_INVALID_ADDRESS,
223    "rtems_message_queue_flush with NULL param"
224  );
225  puts( "TA1 - rtems_message_queue_flush - RTEMS_INVALID_ADDRESS" );
226
227  /* flush invalid id */
228  status = rtems_message_queue_flush( 100, &count );
229  fatal_directive_status(
230    status,
231    RTEMS_INVALID_ID,
232    "rtems_message_queue_flush with illegal id"
233  );
234  puts( "TA1 - rtems_message_queue_flush - RTEMS_INVALID_ID" );
235
236  status = rtems_message_queue_receive(
237    100,
238    (long (*)[4]) buffer,
239    &size,
240    RTEMS_DEFAULT_OPTIONS,
241    0
242  );
243  fatal_directive_status(
244    status,
245    RTEMS_INVALID_ID,
246    "rtems_message_queue_receive with illegal id"
247  );
248  puts( "TA1 - rtems_message_queue_receive - RTEMS_INVALID_ID" );
249
250  status = rtems_message_queue_receive(
251    Queue_id[ 1 ],
252    NULL,
253    &size,
254    RTEMS_NO_WAIT,
255    RTEMS_NO_TIMEOUT
256  );
257  fatal_directive_status(
258    status,
259    RTEMS_INVALID_ADDRESS,
260    "rtems_message_queue_receive NULL buffer"
261  );
262  puts(
263    "TA1 - rtems_message_queue_receive - Q 1 - "
264      "RTEMS_INVALID_ADDRESS NULL buffer"
265  );
266
267  status = rtems_message_queue_receive(
268    Queue_id[ 1 ],
269    (long (*)[4]) buffer,
270    NULL,
271    RTEMS_NO_WAIT,
272    RTEMS_NO_TIMEOUT
273  );
274  fatal_directive_status(
275    status,
276    RTEMS_INVALID_ADDRESS,
277    "rtems_message_queue_receive NULL size"
278  );
279  puts(
280    "TA1 - rtems_message_queue_receive - Q 1 - "
281      "RTEMS_INVALID_ADDRESS NULL size"
282  );
283
284  status = rtems_message_queue_receive(
285    Queue_id[ 1 ],
286    (long (*)[4]) buffer,
287    &size,
288    RTEMS_NO_WAIT,
289    RTEMS_NO_TIMEOUT
290  );
291  fatal_directive_status(
292    status,
293    RTEMS_UNSATISFIED,
294    "rtems_message_queue_receive unsatisfied"
295  );
296  puts( "TA1 - rtems_message_queue_receive - Q 1 - RTEMS_UNSATISFIED" );
297
298  puts( "TA1 - rtems_message_queue_receive - Q 1 - timeout in 3 seconds" );
299  status = rtems_message_queue_receive(
300    Queue_id[ 1 ],
301    (long (*)[4]) buffer,
302    &size,
303    RTEMS_DEFAULT_OPTIONS,
304    3 * rtems_clock_get_ticks_per_second()
305  );
306  fatal_directive_status(
307    status,
308    RTEMS_TIMEOUT,
309    "rtems_message_queue_receive 3 second timeout"
310  );
311
312  puts(
313    "TA1 - rtems_message_queue_receive - Q 1 - woke up with RTEMS_TIMEOUT"
314  );
315
316  /* send NULL message*/
317  status = rtems_message_queue_send( Queue_id[ 1 ], NULL, MESSAGE_SIZE );
318  fatal_directive_status(
319    status,
320    RTEMS_INVALID_ADDRESS,
321    "rtems_message_queue_send with NULL buffer"
322  );
323  puts(
324    "TA1 - rtems_message_queue_send - NULL buffer - RTEMS_INVALID_ADDRESS"
325  );
326
327  /* send bad id */
328  status = rtems_message_queue_send( 100, buffer, MESSAGE_SIZE );
329  fatal_directive_status(
330    status,
331    RTEMS_INVALID_ID,
332    "rtems_message_queue_send with illegal id"
333  );
334  puts( "TA1 - rtems_message_queue_send - RTEMS_INVALID_ID" );
335
336  status = rtems_message_queue_send( Queue_id[ 1 ], buffer, MESSAGE_SIZE );
337  directive_failed( status, "rtems_message_queue_send" );
338  puts( "TA1 - rtems_message_queue_send - BUFFER 1 TO Q 1 - RTEMS_SUCCESSFUL" );
339
340  status = rtems_message_queue_send( Queue_id[ 1 ], buffer, MESSAGE_SIZE );
341  directive_failed( status, "rtems_message_queue_send" );
342  puts( "TA1 - rtems_message_queue_send - BUFFER 2 TO Q 1 - RTEMS_SUCCESSFUL" );
343
344  status = rtems_message_queue_send( Queue_id[ 1 ], buffer, MESSAGE_SIZE );
345  fatal_directive_status(
346    status,
347    RTEMS_TOO_MANY,
348    "rtems_message_queue_send too many to a limited queue"
349  );
350  puts( "TA1 - rtems_message_queue_send - BUFFER 3 TO Q 1 - RTEMS_TOO_MANY" );
351
352  /* urgent NULL message*/
353  status = rtems_message_queue_urgent( Queue_id[ 1 ], NULL, MESSAGE_SIZE );
354  fatal_directive_status(
355    status,
356    RTEMS_INVALID_ADDRESS,
357    "rtems_message_queue_urgent with NULL buffer"
358  );
359  puts(
360    "TA1 - rtems_message_queue_urgent - NULL buffer - RTEMS_INVALID_ADDRESS"
361  );
362
363  /* urgent bad Id */
364  status = rtems_message_queue_urgent( 100, buffer, MESSAGE_SIZE );
365  fatal_directive_status(
366    status,
367    RTEMS_INVALID_ID,
368    "rtems_message_queue_urgent with illegal id"
369  );
370  puts( "TA1 - rtems_message_queue_urgent - RTEMS_INVALID_ID" );
371
372  status = rtems_message_queue_broadcast(
373     Queue_id[ 1 ], NULL, MESSAGE_SIZE, &count );
374  fatal_directive_status(
375    status,
376    RTEMS_INVALID_ADDRESS,
377    "rtems_message_queue_broadcast with NULL count"
378  );
379  puts(
380    "TA1 - rtems_message_queue_broadcast - NULL buffer - RTEMS_INVALID_ADDRESS"
381  );
382
383  status = rtems_message_queue_broadcast(
384     Queue_id[ 1 ], buffer, MESSAGE_SIZE + 1, &count );
385  fatal_directive_status(
386    status,
387    RTEMS_INVALID_SIZE,
388    "rtems_message_queue_broadcast with too large"
389  );
390  puts(
391    "TA1 - rtems_message_queue_broadcast - too large - RTEMS_INVALID_SIZE"
392  );
393
394  status = rtems_message_queue_broadcast(
395      Queue_id[ 1 ], buffer, MESSAGE_SIZE, NULL );
396  fatal_directive_status(
397    status,
398    RTEMS_INVALID_ADDRESS,
399    "rtems_message_queue_broadcast with NULL count"
400  );
401  puts(
402    "TA1 - rtems_message_queue_broadcast - NULL count - RTEMS_INVALID_ADDRESS"
403  );
404
405  TEST_END();
406}
Note: See TracBrowser for help on using the repository browser.