Skip to content

Commit 88787f5

Browse files
committed
Addressed reviewer's comment
1 parent 836b05e commit 88787f5

3 files changed

Lines changed: 33 additions & 27 deletions

File tree

src/test/unit/unit.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,8 @@ Suite *wolf_suite(void)
117117
tcase_add_test(tc_utils, test_wolfip_loopback_send_paths);
118118
tcase_add_test(tc_utils, test_wolfip_loopback_poll_paths);
119119
tcase_add_test(tc_utils, test_wolfip_loopback_poll_keeps_pending_on_short_buffer);
120-
tcase_add_test(tc_utils, test_wolfip_loopback_poll_null_container);
121120
tcase_add_test(tc_utils, test_wolfip_loopback_send_drops_oversize);
122-
tcase_add_test(tc_utils, test_wolfip_loopback_send_null_container);
121+
tcase_add_test(tc_utils, test_wolfip_loopback_send_queue_full_returns_eagain);
123122
tcase_add_test(tc_utils, test_wolfip_loopback_send_rejects_null_args);
124123
#endif
125124
tcase_add_test(tc_utils, test_wolfip_send_port_unreachable_ignores_missing_link_sender);

src/test/unit/unit_tests_proto.c

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}
30093010
END_TEST
30103011

@@ -3054,20 +3055,6 @@ START_TEST(test_wolfip_loopback_poll_keeps_pending_on_short_buffer)
30543055
}
30553056
END_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-
30713058
START_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
}
30873074
END_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
}
31013108
END_TEST
31023109

src/wolfip.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1384,7 +1384,7 @@ static int wolfIP_loopback_send(struct wolfIP_ll_dev *ll, void *buf, uint32_t le
13841384
if (len == 0 || len > IP_MTU_MAX)
13851385
return 0;
13861386
if (s->loopback_count >= WOLFIP_LOOPBACK_QUEUE_DEPTH)
1387-
return 0; /* queue full, drop */
1387+
return -WOLFIP_EAGAIN; /* queue full, retry later */
13881388
/* buf is the IP payload (ETH header already stripped by
13891389
* wolfIP_ll_send_frame for non-ethernet devices).
13901390
* Store as-is; wolfIP_poll will re-add the ETH prefix. */

0 commit comments

Comments
 (0)