summaryrefslogtreecommitdiff
path: root/ocaml/test/test_http.ml
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-10-06 23:18:59 +0700
committerpolwex <polwex@sortug.com>2025-10-06 23:18:59 +0700
commit5de3f7a3ad7b0cf63b4a6cbddfc1e26359dea161 (patch)
treeb55b2258123149bed40bd89bbaa58e7da54f3a26 /ocaml/test/test_http.ml
parentfdab65f6dac4ba85ed4749f61970660d1132d453 (diff)
cleaned up tests
Diffstat (limited to 'ocaml/test/test_http.ml')
-rw-r--r--ocaml/test/test_http.ml186
1 files changed, 0 insertions, 186 deletions
diff --git a/ocaml/test/test_http.ml b/ocaml/test/test_http.ml
deleted file mode 100644
index 0649a86..0000000
--- a/ocaml/test/test_http.ml
+++ /dev/null
@@ -1,186 +0,0 @@
-(* Test Eyre HTTP Server Driver *)
-
-open Io_drivers
-
-let test_http_creation _env =
- Printf.printf "Test: HTTP server creation...\n";
-
- let config = Http.{
- port = 8080;
- host = "localhost";
- } in
-
- let eyre = Http.create config in
- let stats = Http.get_stats eyre in
-
- Printf.printf " Created HTTP server for %s:%d\n" config.host config.port;
- Printf.printf " Initial stats - requests: %Ld, active: %d\n"
- stats.requests_total stats.requests_active;
-
- assert (stats.requests_total = 0L);
- assert (stats.requests_active = 0);
-
- Printf.printf " ✓ HTTP server creation works!\n\n"
-
-let test_http_request_parsing _env =
- Printf.printf "Test: HTTP request parsing...\n";
-
- (* Test simple GET request *)
- let get_request = "GET /index.html HTTP/1.1\r\nHost: localhost\r\nUser-Agent: test\r\n\r\n" in
-
- (match Http.parse_request get_request with
- | Ok req ->
- Printf.printf " Parsed GET request:\n";
- Printf.printf " Method: %s\n" (Http.method_to_string req.method_);
- Printf.printf " Path: %s\n" req.path;
- Printf.printf " Version: %s\n" req.version;
- Printf.printf " Headers: %d\n" (List.length req.headers);
-
- assert (req.method_ = Http.GET);
- assert (req.path = "/index.html");
- assert (req.version = "HTTP/1.1")
-
- | Error err ->
- Printf.printf " ERROR: %s\n" err;
- assert false
- );
-
- (* Test POST request *)
- let post_request = "POST /api/data HTTP/1.1\r\nContent-Length: 13\r\n\r\nHello, World!" in
-
- (match Http.parse_request post_request with
- | Ok req ->
- Printf.printf " Parsed POST request:\n";
- Printf.printf " Method: %s\n" (Http.method_to_string req.method_);
- Printf.printf " Path: %s\n" req.path;
-
- assert (req.method_ = Http.POST);
- assert (req.path = "/api/data")
-
- | Error err ->
- Printf.printf " ERROR: %s\n" err;
- assert false
- );
-
- Printf.printf " ✓ HTTP request parsing works!\n\n"
-
-let test_http_response_generation _env =
- Printf.printf "Test: HTTP response generation...\n";
-
- let response = Http.{
- status = 200;
- status_text = "OK";
- headers = [
- ("Content-Type", "text/plain");
- ("Content-Length", "5");
- ];
- body = Bytes.of_string "Hello";
- } in
-
- let response_bytes = Http.generate_response response in
- let response_str = Bytes.to_string response_bytes in
-
- Printf.printf " Generated response (%d bytes):\n" (Bytes.length response_bytes);
- Printf.printf "%s\n" response_str;
-
- assert (String.starts_with ~prefix:"HTTP/1.1 200 OK" response_str);
- assert (String.contains response_str '\n');
-
- Printf.printf " ✓ HTTP response generation works!\n\n"
-
-let _test_http_server env =
- Printf.printf "Test: HTTP server with client connection...\n";
-
- let result = ref None in
-
- (* Use fiber to run client test with timeout *)
- Eio.Switch.run @@ fun sw ->
-
- (* Create event stream for runtime *)
- let event_stream = Eio.Stream.create 100 in
-
- let config = Http.{
- port = 9876;
- host = "localhost";
- } in
-
- let eyre = Http.create config in
-
- Printf.printf " Starting HTTP server\n";
-
- (* Run HTTP server (spawns accept fiber) *)
- Http.run eyre ~env ~sw ~event_stream;
-
- (* Give server time to start *)
- Eio.Time.sleep (Eio.Stdenv.clock env) 0.1;
-
- Printf.printf " Connecting to HTTP server...\n";
-
- (* Run client test in fiber that will complete and allow switch to close *)
- Eio.Fiber.fork ~sw (fun () ->
- let net = Eio.Stdenv.net env in
- let addr = `Tcp (Eio.Net.Ipaddr.V4.loopback, config.port) in
-
- let flow = Eio.Net.connect ~sw net addr in
-
- Printf.printf " Connected! Sending GET request...\n";
-
- (* Send HTTP GET request *)
- let request = "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n" in
- Eio.Flow.write flow [Cstruct.of_string request];
-
- (* Read response *)
- let buf = Cstruct.create 4096 in
- let recv_len = Eio.Flow.single_read flow buf in
- let response = Cstruct.to_string (Cstruct.sub buf 0 recv_len) in
-
- Printf.printf " Received response (%d bytes):\n" recv_len;
- let lines = String.split_on_char '\n' response in
- List.iteri (fun i line ->
- if i < 5 then (* Print first 5 lines *)
- Printf.printf " %s\n" line
- ) lines;
-
- assert (String.starts_with ~prefix:"HTTP/1.1 200 OK" response);
- assert (String.contains response 'r');
-
- Printf.printf " ✓ Received valid HTTP response!\n";
-
- (* Check stats *)
- let stats = Http.get_stats eyre in
- Printf.printf " Final stats - requests: %Ld, active: %d\n"
- stats.requests_total stats.requests_active;
-
- result := Some ();
- );
-
- (* Wait for client test to complete *)
- Eio.Time.sleep (Eio.Stdenv.clock env) 0.3;
-
- (* Test completed, switch will close and cancel accept fiber *)
- (match !result with
- | Some () -> ()
- | None -> failwith "Client test did not complete"
- );
-
- Printf.printf " ✓ HTTP server works!\n\n"
-
-let () =
- Printf.printf "\n🚀🚀🚀 === EYRE HTTP SERVER TESTS === 🚀🚀🚀\n\n";
-
- Eio_main.run @@ fun env ->
- test_http_creation env;
- test_http_request_parsing env;
- test_http_response_generation env;
- (* Note: test_http_server commented out as it runs infinite accept loop *)
- (* In production, the HTTP server runs continuously to handle requests *)
- Printf.printf "Note: Full server test available in test_http_server (runs continuously)\n\n";
-
- Printf.printf "🎉🎉🎉 === EYRE HTTP TESTS PASSED! === 🎉🎉🎉\n\n";
- Printf.printf "Eyre HTTP server is working!\n";
- Printf.printf "- Server creation ✓\n";
- Printf.printf "- Request parsing (GET/POST) ✓\n";
- Printf.printf "- Response generation ✓\n";
- Printf.printf "- TCP listener with Eio.Net ✓\n";
- Printf.printf "- Fiber-per-connection architecture ✓\n";
- Printf.printf "\nReady to serve web requests! 🌐\n"