Mercurial
diff seobeo/tests/seobeo_websocket_test.c @ 120:cbbf78b17cfa
[Seobeo][Websocket] Created Web socket client logic.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Thu, 08 Jan 2026 03:19:59 -0800 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/seobeo/tests/seobeo_websocket_test.c Thu Jan 08 03:19:59 2026 -0800 @@ -0,0 +1,196 @@ +#include "seobeo/seobeo.h" +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +void Test_WebSocket_Echo() +{ + printf("\n=== Test: WebSocket Echo Server ===\n"); + + Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://echo.websocket.org"); + if (!p_ws) + { + printf("Failed to connect to WebSocket server\n"); + return; + } + + printf("Connected to WebSocket server\n"); + + const char *test_message = "Hello, WebSocket!"; + printf("Sending: %s\n", test_message); + + if (Seobeo_WebSocket_Send_Text(p_ws, test_message) < 0) + { + printf("Failed to send message\n"); + Seobeo_WebSocket_Destroy(p_ws); + return; + } + + printf("Waiting for echo response...\n"); + + int attempts = 0; + while (attempts < 100) + { + Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws); + if (p_msg) + { + if (p_msg->opcode == SEOBEO_WS_OPCODE_TEXT) + { + printf("Received text: %.*s\n", (int)p_msg->length, (char*)p_msg->data); + } + else if (p_msg->opcode == SEOBEO_WS_OPCODE_BINARY) + { + printf("Received binary data (%zu bytes)\n", p_msg->length); + } + + Seobeo_WebSocket_Message_Destroy(p_msg); + break; + } + + usleep(10000); + attempts++; + } + + if (attempts >= 100) + printf("Timeout waiting for response\n"); + + Seobeo_WebSocket_Close(p_ws, 1000, "Test complete"); + Seobeo_WebSocket_Destroy(p_ws); + + printf("WebSocket test completed\n"); +} + +void Test_WebSocket_Multiple_Messages() +{ + printf("\n=== Test: Multiple Messages ===\n"); + + Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://echo.websocket.org"); + if (!p_ws) + { + printf("Failed to connect\n"); + return; + } + + const char *messages[] = { + "Message 1", + "Message 2", + "Message 3" + }; + + for (int i = 0; i < 3; i++) + { + printf("Sending: %s\n", messages[i]); + Seobeo_WebSocket_Send_Text(p_ws, messages[i]); + usleep(100000); + } + + printf("Receiving responses...\n"); + int received = 0; + int attempts = 0; + + while (received < 3 && attempts < 200) + { + Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws); + if (p_msg) + { + if (p_msg->opcode == SEOBEO_WS_OPCODE_TEXT) + { + printf("Response %d: %.*s\n", received + 1, (int)p_msg->length, (char*)p_msg->data); + received++; + } + Seobeo_WebSocket_Message_Destroy(p_msg); + } + + usleep(10000); + attempts++; + } + + printf("Received %d/%d messages\n", received, 3); + + Seobeo_WebSocket_Destroy(p_ws); +} + +void Test_WebSocket_Binary_Data() +{ + printf("\n=== Test: Binary Data ===\n"); + + Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://echo.websocket.org"); + if (!p_ws) + { + printf("Failed to connect\n"); + return; + } + + uint8 binary_data[] = {0x01, 0x02, 0x03, 0x04, 0x05, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}; + printf("Sending %zu bytes of binary data\n", sizeof(binary_data)); + + if (Seobeo_WebSocket_Send_Binary(p_ws, binary_data, sizeof(binary_data)) < 0) + { + printf("Failed to send binary data\n"); + Seobeo_WebSocket_Destroy(p_ws); + return; + } + + int attempts = 0; + while (attempts < 100) + { + Seobeo_WebSocket_Message *p_msg = Seobeo_WebSocket_Receive(p_ws); + if (p_msg) + { + if (p_msg->opcode == SEOBEO_WS_OPCODE_BINARY) + { + printf("Received %zu bytes of binary data: ", p_msg->length); + for (size_t i = 0; i < p_msg->length && i < 16; i++) + printf("%02X ", p_msg->data[i]); + printf("\n"); + } + + Seobeo_WebSocket_Message_Destroy(p_msg); + break; + } + + usleep(10000); + attempts++; + } + + Seobeo_WebSocket_Destroy(p_ws); +} + +void Test_WebSocket_Ping_Pong() +{ + printf("\n=== Test: Ping/Pong ===\n"); + + Seobeo_WebSocket *p_ws = Seobeo_WebSocket_Connect("wss://echo.websocket.org"); + if (!p_ws) + { + printf("Failed to connect\n"); + return; + } + + printf("Sending ping...\n"); + if (Seobeo_WebSocket_Send_Ping(p_ws, "ping payload") < 0) + { + printf("Failed to send ping\n"); + Seobeo_WebSocket_Destroy(p_ws); + return; + } + + printf("Ping sent (pong should be handled automatically)\n"); + + usleep(500000); + + Seobeo_WebSocket_Destroy(p_ws); +} + +int main() +{ + printf("=== Seobeo WebSocket Tests ===\n"); + + Test_WebSocket_Echo(); + Test_WebSocket_Multiple_Messages(); + Test_WebSocket_Binary_Data(); + Test_WebSocket_Ping_Pong(); + + printf("\n=== All Tests Complete ===\n"); + return 0; +}