@@ -3003,8 +3003,9 @@ START_TEST(test_wolfip_loopback_send_paths)
30033003 ck_assert_int_eq (wolfIP_loopback_send (loop , frame , sizeof (frame )),
30043004 (int )sizeof (frame ));
30053005 }
3006- /* Next send must be dropped because the queue is full. */
3007- ck_assert_int_eq (wolfIP_loopback_send (loop , frame , sizeof (frame )), 0 );
3006+ /* Next send must return -WOLFIP_EAGAIN because the queue is full. */
3007+ ck_assert_int_eq (wolfIP_loopback_send (loop , frame , sizeof (frame )),
3008+ - WOLFIP_EAGAIN );
30083009}
30093010END_TEST
30103011
@@ -3054,20 +3055,6 @@ START_TEST(test_wolfip_loopback_poll_keeps_pending_on_short_buffer)
30543055}
30553056END_TEST
30563057
3057- START_TEST (test_wolfip_loopback_poll_null_container )
3058- {
3059- uintptr_t off = (uintptr_t )offsetof(struct wolfIP , ll_dev );
3060- struct wolfIP_ll_dev * ll ;
3061- uint8_t frame [4 ] = {0 };
3062-
3063- if (off == 0 )
3064- return ;
3065-
3066- ll = (struct wolfIP_ll_dev * )off ;
3067- ck_assert_int_eq (wolfIP_loopback_poll (ll , frame , sizeof (frame )), 0 );
3068- }
3069- END_TEST
3070-
30713058START_TEST (test_wolfip_loopback_send_drops_oversize )
30723059{
30733060 struct wolfIP s ;
@@ -3086,17 +3073,37 @@ START_TEST(test_wolfip_loopback_send_drops_oversize)
30863073}
30873074END_TEST
30883075
3089- START_TEST (test_wolfip_loopback_send_null_container )
3076+ START_TEST (test_wolfip_loopback_send_queue_full_returns_eagain )
30903077{
3091- uintptr_t off = (uintptr_t )offsetof(struct wolfIP , ll_dev );
3092- struct wolfIP_ll_dev * ll ;
3093- uint8_t frame [4 ] = {0 };
3078+ struct wolfIP s ;
3079+ struct wolfIP_ll_dev * loop ;
3080+ uint8_t frame [16 ] = {0 };
3081+ uint8_t rx [IP_MTU_MAX ];
3082+
3083+ wolfIP_init (& s );
3084+ loop = wolfIP_getdev_ex (& s , TEST_LOOPBACK_IF );
3085+ ck_assert_ptr_nonnull (loop );
3086+
3087+ /* Fill the queue completely. */
3088+ for (unsigned int i = 0 ; i < WOLFIP_LOOPBACK_QUEUE_DEPTH ; i ++ ) {
3089+ frame [0 ] = (uint8_t )i ;
3090+ ck_assert_int_eq (wolfIP_loopback_send (loop , frame , sizeof (frame )),
3091+ (int )sizeof (frame ));
3092+ }
3093+
3094+ /* Queue-full must return -WOLFIP_EAGAIN, not 0. */
3095+ ck_assert_int_eq (wolfIP_loopback_send (loop , frame , sizeof (frame )),
3096+ - WOLFIP_EAGAIN );
30943097
3095- if (off == 0 )
3096- return ;
3098+ /* Drain one slot and verify we can enqueue again. */
3099+ ck_assert_int_gt (wolfIP_loopback_poll (loop , rx , sizeof (rx )), 0 );
3100+ frame [0 ] = 0xFF ;
3101+ ck_assert_int_eq (wolfIP_loopback_send (loop , frame , sizeof (frame )),
3102+ (int )sizeof (frame ));
30973103
3098- ll = (struct wolfIP_ll_dev * )off ;
3099- ck_assert_int_eq (wolfIP_loopback_send (ll , frame , sizeof (frame )), -1 );
3104+ /* Queue is full again — must get -WOLFIP_EAGAIN once more. */
3105+ ck_assert_int_eq (wolfIP_loopback_send (loop , frame , sizeof (frame )),
3106+ - WOLFIP_EAGAIN );
31003107}
31013108END_TEST
31023109
0 commit comments