Mercurial
view seobeo/tests/seobeo_response_test.c @ 264:04fee26ecce0
add authenticated JRPG conversation platform
Add reusable auth/session storage, owned conversation recovery, guest quotas, admin workflows, URL-routed conversation UI, mobile frame support, and parallel browser acceptance.
Co-authored-by: Copilot <[email protected]>
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Fri, 07 Aug 2026 07:34:12 -0700 |
| parents | 0e7b9464248d |
| children |
line wrap: on
line source
#include "seobeo/seobeo.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> int main(void) { int sockets[2]; if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) != 0) return 1; Seobeo_Handle handle = {0}; handle.socket = sockets[0]; handle.write_buffer_capacity = 4096; handle.write_buffer = malloc(handle.write_buffer_capacity); Dowa_Arena *arena = Dowa_Arena_Create(4096); Seobeo_Request_Entry *response = NULL; Dowa_HashMap_Push_Arena(response, "status", "200", arena); Dowa_HashMap_Push_Arena(response, "content-type", "text/plain", arena); Dowa_HashMap_Push_Arena(response, "body", "hello", arena); Dowa_HashMap_Push_Arena(response, "X-Test", "present", arena); Dowa_HashMap_Push_Arena(response, "X-Unsafe", "bad\r\nInjected: yes", arena); Seobeo_Router_Send_Response(&handle, response, arena); char received[4096] = {0}; ssize_t length = read(sockets[1], received, sizeof(received) - 1); int failed = 0; if (length <= 0) failed = 1; if (!strstr(received, "Content-Length: 5\r\n")) failed = 1; if (!strstr(received, "X-Test: present\r\n\r\nhello")) failed = 1; if (strstr(received, "Injected: yes")) failed = 1; if (failed) fprintf(stderr, "Unexpected response:\n%s\n", received); close(sockets[0]); close(sockets[1]); free(handle.write_buffer); Dowa_Arena_Free(arena); if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) != 0) return 1; memset(&handle, 0, sizeof(handle)); handle.socket = sockets[0]; handle.write_buffer_capacity = 4096; handle.write_buffer = malloc(handle.write_buffer_capacity); arena = Dowa_Arena_Create(4096); response = NULL; Dowa_HashMap_Push_Arena(response, "status", "204", arena); Dowa_HashMap_Push_Arena(response, "content-type", "text/plain", arena); Dowa_HashMap_Push_Arena(response, "body", "", arena); Seobeo_Router_Send_Response(&handle, response, arena); memset(received, 0, sizeof(received)); length = read(sockets[1], received, sizeof(received) - 1); if (length <= 0 || !strstr(received, "HTTP/1.1 204 No Content\r\n") || !strstr(received, "Content-Length: 0\r\n") || !strstr(received, "\r\n\r\n")) failed = 1; if (failed) fprintf(stderr, "Unexpected no-content response:\n%s\n", received); close(sockets[0]); close(sockets[1]); free(handle.write_buffer); Dowa_Arena_Free(arena); return failed; }