You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.6 KiB
72 lines
2.6 KiB
// Simple test to verify input_queue_try_resume logic |
|
#include "src/etcp.h" |
|
#include "lib/ll_queue.h" |
|
#include "lib/u_async.h" |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
|
|
int main() { |
|
printf("Testing input_queue_try_resume logic...\n"); |
|
|
|
// Create a mock ETCP_CONN structure |
|
struct ETCP_CONN etcp = {0}; |
|
|
|
// Create uasync instance for queues |
|
struct UASYNC* ua = uasync_new(); |
|
if (!ua) { |
|
printf("Failed to create uasync instance\n"); |
|
return 1; |
|
} |
|
|
|
// Create queues |
|
etcp.input_send_q = queue_new(ua, 0); |
|
etcp.input_wait_ack = queue_new(ua, 0); |
|
|
|
if (!etcp.input_send_q || !etcp.input_wait_ack) { |
|
printf("Failed to create queues\n"); |
|
return 1; |
|
} |
|
|
|
// Test case 1: Both queues empty, optimal_inflight = 100 |
|
etcp.optimal_inflight = 100; |
|
printf("Test 1: Empty queues, optimal_inflight=100\n"); |
|
printf(" input_send_q bytes: %zu\n", queue_total_bytes(etcp.input_send_q)); |
|
printf(" input_wait_ack bytes: %zu\n", queue_total_bytes(etcp.input_wait_ack)); |
|
printf(" Total: %zu (should be \u003c 100)\n", |
|
queue_total_bytes(etcp.input_send_q) + queue_total_bytes(etcp.input_wait_ack)); |
|
|
|
// Test case 2: Add some data to make total > optimal_inflight |
|
printf("\nTest 2: Adding data to exceed optimal_inflight\n"); |
|
|
|
// Add 60 bytes to send queue |
|
void* data1 = queue_data_new(60); |
|
queue_data_put(etcp.input_send_q, data1, 1); |
|
|
|
printf(" input_send_q bytes: %zu\n", queue_total_bytes(etcp.input_send_q)); |
|
printf(" input_wait_ack bytes: %zu\n", queue_total_bytes(etcp.input_wait_ack)); |
|
printf(" Total: %zu (should be \u003e= 100)\n", |
|
queue_total_bytes(etcp.input_send_q) + queue_total_bytes(etcp.input_wait_ack)); |
|
|
|
// Test case 3: Add more data to wait_ack queue |
|
printf("\nTest 3: Adding data to wait_ack queue\n"); |
|
|
|
void* data2 = queue_data_new(50); |
|
queue_data_put(etcp.input_wait_ack, data2, 2); |
|
|
|
printf(" input_send_q bytes: %zu\n", queue_total_bytes(etcp.input_send_q)); |
|
printf(" input_wait_ack bytes: %zu\n", queue_total_bytes(etcp.input_wait_ack)); |
|
printf(" Total: %zu (should be \u003e 100)\n", |
|
queue_total_bytes(etcp.input_send_q) + queue_total_bytes(etcp.input_wait_ack)); |
|
|
|
// Cleanup |
|
queue_free(etcp.input_send_q); |
|
queue_free(etcp.input_wait_ack); |
|
uasync_free(ua); |
|
|
|
printf("\n✅ Logic test completed successfully!\n"); |
|
printf("The input_queue_try_resume function should:\n"); |
|
printf("- Resume when total_bytes \u003c optimal_inflight\n"); |
|
printf("- Not resume when total_bytes \u003e= optimal_inflight\n"); |
|
|
|
return 0; |
|
} |