Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:48

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /*
0004  *  COPYRIGHT (c) 2014.
0005  *  On-Line Applications Research Corporation (OAR).
0006  *
0007  * Redistribution and use in source and binary forms, with or without
0008  * modification, are permitted provided that the following conditions
0009  * are met:
0010  * 1. Redistributions of source code must retain the above copyright
0011  *    notice, this list of conditions and the following disclaimer.
0012  * 2. Redistributions in binary form must reproduce the above copyright
0013  *    notice, this list of conditions and the following disclaimer in the
0014  *    documentation and/or other materials provided with the distribution.
0015  *
0016  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0017  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0018  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0019  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0020  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0021  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0022  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0023  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0024  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0025  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0026  * POSSIBILITY OF SUCH DAMAGE.
0027  */
0028 
0029 #ifdef HAVE_CONFIG_H
0030 #include "config.h"
0031 #endif
0032 
0033 #define CONFIGURE_INIT
0034 #include "system.h"
0035 const char rtems_test_name[] = "SP MESSAGE QUEUE ERROR 1";
0036 
0037 rtems_task Init(
0038   rtems_task_argument argument
0039 )
0040 {
0041   long              buffer[ 4 ];
0042   uint32_t          count;
0043   size_t            size;
0044   rtems_status_code status;
0045 
0046   rtems_test_assert( MAX_MESSAGES == 2 );
0047   
0048   TEST_BEGIN();
0049   Queue_name[ 1 ]      =  rtems_build_name( 'M', 'Q', '1', ' ' );
0050   Queue_name[ 2 ]      =  rtems_build_name( 'M', 'Q', '2', ' ' );
0051   
0052   status = rtems_message_queue_broadcast( 100, buffer, MESSAGE_SIZE, &count );
0053   fatal_directive_status(
0054     status,
0055     RTEMS_INVALID_ID,
0056     "rtems_message_queue_broadcast with illegal id"
0057   );
0058   puts( "TA1 - rtems_message_queue_broadcast - RTEMS_INVALID_ID" );
0059 
0060   /* null ID parameter */
0061   status = rtems_message_queue_create(
0062     Queue_name[ 1 ],
0063     MAX_MESSAGES,
0064     MESSAGE_SIZE,
0065     RTEMS_DEFAULT_ATTRIBUTES,
0066     NULL
0067   );
0068   fatal_directive_status(
0069     status,
0070     RTEMS_INVALID_ADDRESS,
0071     "rtems_message_queue_create with null param"
0072   );
0073   puts( "TA1 - rtems_message_queue_create - NULL Id - RTEMS_INVALID_ADDRESS" );
0074 
0075   /* count == 0 */
0076   status = rtems_message_queue_create(
0077     Queue_name[ 1 ],
0078     0,
0079     MESSAGE_SIZE,
0080     RTEMS_DEFAULT_ATTRIBUTES,
0081     &Junk_id
0082   );
0083   fatal_directive_status(
0084     status,
0085     RTEMS_INVALID_NUMBER,
0086     "rtems_message_queue_create with 0 count"
0087   );
0088   puts( "TA1 - rtems_message_queue_create - count = 0 - RTEMS_INVALID_NUMBER" );
0089 
0090   /* max size == 0 */
0091   status = rtems_message_queue_create(
0092     Queue_name[ 1 ],
0093     MAX_MESSAGES,
0094     0,
0095     RTEMS_DEFAULT_ATTRIBUTES,
0096     &Junk_id
0097   );
0098   fatal_directive_status(
0099     status,
0100     RTEMS_INVALID_SIZE,
0101     "rtems_message_queue_create with 0 msg size"
0102   );
0103   puts( "TA1 - rtems_message_queue_create - size = 0 - RTEMS_INVALID_SIZE" );
0104 
0105   /* bad name parameter */
0106   status = rtems_message_queue_create(
0107     0,
0108     MAX_MESSAGES,
0109     MESSAGE_SIZE,
0110     RTEMS_DEFAULT_ATTRIBUTES,
0111     &Junk_id
0112   );
0113   fatal_directive_status(
0114     status,
0115     RTEMS_INVALID_NAME,
0116     "rtems_message_queue_create with illegal name"
0117   );
0118   puts( "TA1 - rtems_message_queue_create - Q 1 - RTEMS_INVALID_NAME" );
0119 
0120   /* not enough memory for messages */
0121   status = rtems_message_queue_create(
0122     Queue_name[ 1 ],
0123     UINT32_MAX / ( sizeof( uintptr_t ) + sizeof( CORE_message_queue_Buffer ) ),
0124     1,
0125     RTEMS_DEFAULT_ATTRIBUTES,
0126     &Queue_id[ 1 ]
0127   );
0128   fatal_directive_status(
0129     status,
0130     RTEMS_UNSATISFIED,
0131     "rtems_message_queue_create unsatisfied"
0132   );
0133   puts( "TA1 - rtems_message_queue_create - Q 2 - RTEMS_UNSATISFIED" );
0134 
0135   /* too large a request for messages */
0136   status = rtems_message_queue_create(
0137     Queue_name[ 1 ],
0138     UINT32_MAX,
0139     SIZE_MAX - sizeof( uintptr_t ) + 1 - sizeof( CORE_message_queue_Buffer ),
0140     RTEMS_DEFAULT_ATTRIBUTES,
0141     &Queue_id[ 1 ]
0142   );
0143   fatal_directive_status(
0144     status,
0145     RTEMS_INVALID_NUMBER,
0146     "rtems_message_queue_create invalid number"
0147   );
0148   puts( "TA1 - rtems_message_queue_create - Q 2 - RTEMS_INVALID_NUMBER" );
0149 
0150   status = rtems_message_queue_create(
0151     Queue_name[ 1 ],
0152     MAX_MESSAGES,
0153     MESSAGE_SIZE,
0154     RTEMS_DEFAULT_ATTRIBUTES,
0155     &Queue_id[ 1 ]
0156   );
0157   directive_failed( status, "rtems_message_queue_create successful" );
0158   puts( "TA1 - rtems_message_queue_create - Q 1 - 2 DEEP - RTEMS_SUCCESSFUL" );
0159 
0160   status = rtems_message_queue_create(
0161     Queue_name[ 2 ],
0162     MAX_MESSAGES,
0163     MESSAGE_SIZE,
0164     RTEMS_DEFAULT_ATTRIBUTES,
0165     &Junk_id
0166   );
0167   fatal_directive_status(
0168     status,
0169     RTEMS_TOO_MANY,
0170     "rtems_message_queue_create of too many"
0171   );
0172   puts( "TA1 - rtems_message_queue_create - Q 2 - RTEMS_TOO_MANY" );
0173 
0174   status = rtems_message_queue_delete( 100 );
0175   fatal_directive_status(
0176     status,
0177     RTEMS_INVALID_ID,
0178     "rtems_message_queue_create with illegal id"
0179   );
0180   puts( "TA1 - rtems_message_queue_delete - unknown RTEMS_INVALID_ID" );
0181 
0182   status = rtems_message_queue_delete( rtems_build_id( 1, 1, 1, 256 ) );
0183   fatal_directive_status(
0184     status,
0185     RTEMS_INVALID_ID,
0186     "rtems_message_queue_delete with local illegal id"
0187   );
0188   puts( "TA1 - rtems_message_queue_delete - local RTEMS_INVALID_ID" );
0189 
0190   status = rtems_message_queue_ident( 100, RTEMS_SEARCH_ALL_NODES, &Junk_id );
0191   fatal_directive_status(
0192     status,
0193     RTEMS_INVALID_NAME,
0194     "rtems_message_queue_ident with illegal name"
0195   );
0196   puts( "TA1 - rtems_message_queue_ident - RTEMS_INVALID_NAME" );
0197 
0198   /* number pending - bad Id */
0199   status = rtems_message_queue_get_number_pending( Queue_id[ 1 ], NULL );
0200   fatal_directive_status(
0201     status,
0202     RTEMS_INVALID_ADDRESS,
0203     "rtems_message_queue_get_number_pending with NULL param"
0204   );
0205   puts("TA1 - rtems_message_queue_get_number_pending - RTEMS_INVALID_ADDRESS");
0206 
0207   /* number pending - bad Id */
0208   status = rtems_message_queue_get_number_pending( 100, &count );
0209   fatal_directive_status(
0210     status,
0211     RTEMS_INVALID_ID,
0212     "rtems_message_queue_get_number_pending with illegal id"
0213   );
0214   puts( "TA1 - rtems_message_queue_get_number_pending - RTEMS_INVALID_ID" );
0215 
0216   /* flush null param */
0217   status = rtems_message_queue_flush( Queue_id[ 1 ], NULL );
0218   fatal_directive_status(
0219     status,
0220     RTEMS_INVALID_ADDRESS,
0221     "rtems_message_queue_flush with NULL param"
0222   );
0223   puts( "TA1 - rtems_message_queue_flush - RTEMS_INVALID_ADDRESS" );
0224 
0225   /* flush invalid id */
0226   status = rtems_message_queue_flush( 100, &count );
0227   fatal_directive_status(
0228     status,
0229     RTEMS_INVALID_ID,
0230     "rtems_message_queue_flush with illegal id"
0231   );
0232   puts( "TA1 - rtems_message_queue_flush - RTEMS_INVALID_ID" );
0233 
0234   status = rtems_message_queue_receive(
0235     100,
0236     (long (*)[4]) buffer,
0237     &size,
0238     RTEMS_DEFAULT_OPTIONS,
0239     0
0240   );
0241   fatal_directive_status(
0242     status,
0243     RTEMS_INVALID_ID,
0244     "rtems_message_queue_receive with illegal id"
0245   );
0246   puts( "TA1 - rtems_message_queue_receive - RTEMS_INVALID_ID" );
0247 
0248   status = rtems_message_queue_receive(
0249     Queue_id[ 1 ],
0250     NULL,
0251     &size,
0252     RTEMS_NO_WAIT,
0253     RTEMS_NO_TIMEOUT
0254   );
0255   fatal_directive_status(
0256     status,
0257     RTEMS_INVALID_ADDRESS,
0258     "rtems_message_queue_receive NULL buffer"
0259   );
0260   puts(
0261     "TA1 - rtems_message_queue_receive - Q 1 - "
0262       "RTEMS_INVALID_ADDRESS NULL buffer"
0263   );
0264 
0265   status = rtems_message_queue_receive(
0266     Queue_id[ 1 ],
0267     (long (*)[4]) buffer,
0268     NULL,
0269     RTEMS_NO_WAIT,
0270     RTEMS_NO_TIMEOUT
0271   );
0272   fatal_directive_status(
0273     status,
0274     RTEMS_INVALID_ADDRESS,
0275     "rtems_message_queue_receive NULL size"
0276   );
0277   puts(
0278     "TA1 - rtems_message_queue_receive - Q 1 - "
0279       "RTEMS_INVALID_ADDRESS NULL size"
0280   );
0281 
0282   status = rtems_message_queue_receive(
0283     Queue_id[ 1 ],
0284     (long (*)[4]) buffer,
0285     &size,
0286     RTEMS_NO_WAIT,
0287     RTEMS_NO_TIMEOUT
0288   );
0289   fatal_directive_status(
0290     status,
0291     RTEMS_UNSATISFIED,
0292     "rtems_message_queue_receive unsatisfied"
0293   );
0294   puts( "TA1 - rtems_message_queue_receive - Q 1 - RTEMS_UNSATISFIED" );
0295 
0296   puts( "TA1 - rtems_message_queue_receive - Q 1 - timeout in 3 seconds" );
0297   status = rtems_message_queue_receive(
0298     Queue_id[ 1 ],
0299     (long (*)[4]) buffer,
0300     &size,
0301     RTEMS_DEFAULT_OPTIONS,
0302     3 * rtems_clock_get_ticks_per_second()
0303   );
0304   fatal_directive_status(
0305     status,
0306     RTEMS_TIMEOUT,
0307     "rtems_message_queue_receive 3 second timeout"
0308   );
0309 
0310   puts(
0311     "TA1 - rtems_message_queue_receive - Q 1 - woke up with RTEMS_TIMEOUT"
0312   );
0313 
0314   /* send NULL message*/
0315   status = rtems_message_queue_send( Queue_id[ 1 ], NULL, MESSAGE_SIZE );
0316   fatal_directive_status(
0317     status,
0318     RTEMS_INVALID_ADDRESS,
0319     "rtems_message_queue_send with NULL buffer"
0320   );
0321   puts(
0322     "TA1 - rtems_message_queue_send - NULL buffer - RTEMS_INVALID_ADDRESS"
0323   );
0324 
0325   /* send bad id */
0326   status = rtems_message_queue_send( 100, buffer, MESSAGE_SIZE );
0327   fatal_directive_status(
0328     status,
0329     RTEMS_INVALID_ID,
0330     "rtems_message_queue_send with illegal id"
0331   );
0332   puts( "TA1 - rtems_message_queue_send - RTEMS_INVALID_ID" );
0333 
0334   status = rtems_message_queue_send( Queue_id[ 1 ], buffer, MESSAGE_SIZE );
0335   directive_failed( status, "rtems_message_queue_send" );
0336   puts( "TA1 - rtems_message_queue_send - BUFFER 1 TO Q 1 - RTEMS_SUCCESSFUL" );
0337 
0338   status = rtems_message_queue_send( Queue_id[ 1 ], buffer, MESSAGE_SIZE );
0339   directive_failed( status, "rtems_message_queue_send" );
0340   puts( "TA1 - rtems_message_queue_send - BUFFER 2 TO Q 1 - RTEMS_SUCCESSFUL" );
0341 
0342   status = rtems_message_queue_send( Queue_id[ 1 ], buffer, MESSAGE_SIZE );
0343   fatal_directive_status(
0344     status,
0345     RTEMS_TOO_MANY,
0346     "rtems_message_queue_send too many to a limited queue"
0347   );
0348   puts( "TA1 - rtems_message_queue_send - BUFFER 3 TO Q 1 - RTEMS_TOO_MANY" );
0349 
0350   /* urgent NULL message*/
0351   status = rtems_message_queue_urgent( Queue_id[ 1 ], NULL, MESSAGE_SIZE );
0352   fatal_directive_status(
0353     status,
0354     RTEMS_INVALID_ADDRESS,
0355     "rtems_message_queue_urgent with NULL buffer"
0356   );
0357   puts(
0358     "TA1 - rtems_message_queue_urgent - NULL buffer - RTEMS_INVALID_ADDRESS"
0359   );
0360 
0361   /* urgent bad Id */
0362   status = rtems_message_queue_urgent( 100, buffer, MESSAGE_SIZE );
0363   fatal_directive_status(
0364     status,
0365     RTEMS_INVALID_ID,
0366     "rtems_message_queue_urgent with illegal id"
0367   );
0368   puts( "TA1 - rtems_message_queue_urgent - RTEMS_INVALID_ID" );
0369 
0370   status = rtems_message_queue_broadcast(
0371      Queue_id[ 1 ], NULL, MESSAGE_SIZE, &count );
0372   fatal_directive_status(
0373     status,
0374     RTEMS_INVALID_ADDRESS,
0375     "rtems_message_queue_broadcast with NULL count"
0376   );
0377   puts(
0378     "TA1 - rtems_message_queue_broadcast - NULL buffer - RTEMS_INVALID_ADDRESS"
0379   );
0380 
0381   status = rtems_message_queue_broadcast(
0382      Queue_id[ 1 ], buffer, MESSAGE_SIZE + 1, &count );
0383   fatal_directive_status(
0384     status,
0385     RTEMS_INVALID_SIZE,
0386     "rtems_message_queue_broadcast with too large"
0387   );
0388   puts(
0389     "TA1 - rtems_message_queue_broadcast - too large - RTEMS_INVALID_SIZE"
0390   );
0391 
0392   status = rtems_message_queue_broadcast(
0393       Queue_id[ 1 ], buffer, MESSAGE_SIZE, NULL );
0394   fatal_directive_status(
0395     status,
0396     RTEMS_INVALID_ADDRESS,
0397     "rtems_message_queue_broadcast with NULL count"
0398   );
0399   puts(
0400     "TA1 - rtems_message_queue_broadcast - NULL count - RTEMS_INVALID_ADDRESS"
0401   );
0402 
0403   TEST_END();
0404 }