diff options
author | polwex <polwex@sortug.com> | 2025-10-06 23:18:59 +0700 |
---|---|---|
committer | polwex <polwex@sortug.com> | 2025-10-06 23:18:59 +0700 |
commit | 5de3f7a3ad7b0cf63b4a6cbddfc1e26359dea161 (patch) | |
tree | b55b2258123149bed40bd89bbaa58e7da54f3a26 /ocaml/test/test_http.ml | |
parent | fdab65f6dac4ba85ed4749f61970660d1132d453 (diff) |
cleaned up tests
Diffstat (limited to 'ocaml/test/test_http.ml')
-rw-r--r-- | ocaml/test/test_http.ml | 186 |
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" |