Mercurial
view seobeo/seobeo_http_client_test.c @ 71:75de5903355c
Giagantic changes that update Dowa library to be more align with stb style array and hashmap. Updated Seobeo to be caching on server side instead of file level caching. Deleted bunch of things I don't really use.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Sun, 28 Dec 2025 20:34:22 -0800 |
| parents | 6626ec933933 |
| children |
line wrap: on
line source
#include "seobeo/seobeo.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> // Test basic HTTP client functionality void test_http_client_without_ssl() { printf("Testing HTTP client (non-SSL)...\n"); // Create a client handle without TLS Seobeo_Handle *h = Seobeo_Stream_Handle_Client_Create("example.com", "80", FALSE); if (!h || h->socket < 0) { printf(" ✗ Failed to create client handle\n"); if (h) Seobeo_Handle_Destroy(h); return; } printf(" ✓ Client handle created successfully\n"); // Generate and send HTTP request char request[4096]; int request_len = sprintf( request, "GET / HTTP/1.1\r\n" "Host: example.com\r\n" "Connection: close\r\n" "\r\n" ); Seobeo_Handle_Queue(h, (uint8*)request, (uint32)request_len); int flush_result = Seobeo_Handle_Flush(h); if (flush_result < 0) { printf(" ✗ Failed to send request\n"); Seobeo_Handle_Destroy(h); return; } printf(" ✓ Request sent successfully\n"); // Read response int bytes_read = 0; int total_bytes = 0; int attempts = 0; const int max_attempts = 100; while (attempts++ < max_attempts) { bytes_read = Seobeo_Handle_Read(h); if (bytes_read > 0) { total_bytes += bytes_read; } else if (bytes_read == -2) { // Connection closed break; } else if (bytes_read == 0) { // Would block, wait a bit usleep(10000); // 10ms continue; } else { printf(" ✗ Error reading response\n"); Seobeo_Handle_Destroy(h); return; } } if (total_bytes > 0) { printf(" ✓ Received response (%d bytes)\n", total_bytes); // Check if we got HTTP response if (h->read_buffer_len > 0 && strstr((char*)h->read_buffer, "HTTP/1.1") != NULL) { printf(" ✓ Valid HTTP response received\n"); } else { printf(" ✗ Invalid HTTP response\n"); } } else { printf(" ⚠ No response received (this may be a network issue)\n"); } Seobeo_Handle_Destroy(h); printf(" ✓ Client handle destroyed\n"); } void test_http_client_with_ssl() { printf("\nTesting HTTP client (with SSL)...\n"); #ifdef SEOBEO_NO_SSL printf(" ⚠ SSL not compiled in, skipping SSL test\n"); return; #else // Create a client handle with TLS Seobeo_Handle *h = Seobeo_Stream_Handle_Client_Create("example.com", "443", TRUE); if (!h || h->socket < 0) { printf(" ✗ Failed to create SSL client handle\n"); if (h) Seobeo_Handle_Destroy(h); return; } printf(" ✓ SSL client handle created successfully\n"); printf(" ✓ SSL handshake completed\n"); // Generate and send HTTPS request char request[4096]; int request_len = sprintf( request, "GET / HTTP/1.1\r\n" "Host: example.com\r\n" "Connection: close\r\n" "\r\n" ); Seobeo_Handle_Queue(h, (uint8*)request, (uint32)request_len); int flush_result = Seobeo_Handle_Flush(h); if (flush_result < 0) { printf(" ✗ Failed to send SSL request\n"); Seobeo_Handle_Destroy(h); return; } printf(" ✓ SSL request sent successfully\n"); // Read response int bytes_read = 0; int total_bytes = 0; int attempts = 0; const int max_attempts = 100; while (attempts++ < max_attempts) { bytes_read = Seobeo_Handle_Read(h); if (bytes_read > 0) { total_bytes += bytes_read; } else if (bytes_read == -2) { // Connection closed break; } else if (bytes_read == 0) { // Would block, wait a bit usleep(10000); // 10ms continue; } else { printf(" ✗ Error reading SSL response\n"); Seobeo_Handle_Destroy(h); return; } } if (total_bytes > 0) { printf(" ✓ Received SSL response (%d bytes)\n", total_bytes); // Check if we got HTTP response if (h->read_buffer_len > 0 && strstr((char*)h->read_buffer, "HTTP/1.1") != NULL) { printf(" ✓ Valid HTTPS response received\n"); } else { printf(" ✗ Invalid HTTPS response\n"); } } else { printf(" ⚠ No SSL response received (this may be a network issue)\n"); } Seobeo_Handle_Destroy(h); printf(" ✓ SSL client handle destroyed\n"); #endif } int main() { printf("=== Seobeo HTTP Client Tests ===\n\n"); test_http_client_without_ssl(); test_http_client_with_ssl(); printf("\n=== Tests Complete ===\n"); return 0; }