Something went wrong. Try again.
A batteries included HTTP/1.1 client in OCaml
Something went wrong. Try again.
2.9 kB · 91 lines
OCaml
at master
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192(*--------------------------------------------------------------------------- Copyright (c) 2025 Anil Madhavapeddy <anil@recoil.org>. All rights reserved. SPDX-License-Identifier: ISC ---------------------------------------------------------------------------*)
open Requests_features
(** Tests for Cache module - HTTP response caching per RFC 9111 *)
module Headers = Requests.Headers
(** Run a test inside the Eio event loop (needed for Eio.Mutex) *)let run f () = Eio_main.run @@ fun _env -> f ()
(** {1 Memory.create and Memory.size Tests} *)
let test_create_size () = let c = Cache.Memory.create () in Alcotest.(check int) "fresh cache size is 0" 0 (Cache.Memory.size c)
(** {1 Memory.stats Tests} *)
let test_create_stats () = let c = Cache.Memory.create () in let hits, misses, stores = Cache.Memory.stats c in Alcotest.(check int) "hits" 0 hits; Alcotest.(check int) "misses" 0 misses; Alcotest.(check int) "stores" 0 stores
(** {1 Memory.clear Tests} *)
let test_clear_empty () = let c = Cache.Memory.create () in Cache.Memory.clear c; Alcotest.(check int) "size after clear" 0 (Cache.Memory.size c)
(** {1 parse_vary Tests} *)
let test_parse_vary () = let result = Cache.parse_vary "Accept, Accept-Language" in Alcotest.(check (list string)) "parsed vary" [ "accept"; "accept-language" ] result
(** {1 is_not_modified Tests} *)
let test_is_not_modified_304 () = Alcotest.(check bool) "304 is not modified" true (Cache.is_not_modified ~status:304)
let test_is_not_modified_200 () = Alcotest.(check bool) "200 is modified" false (Cache.is_not_modified ~status:200)
(** {1 vary_matches Tests} *)
let test_vary_matches () = let request_headers = Headers.empty |> Headers.add_string "accept" "text/html" in let cached_vary = [ ("accept", "text/html") ] in Alcotest.(check bool) "matching vary" true (Cache.vary_matches ~cached_vary ~request_headers)
let test_vary_no_match () = let request_headers = Headers.empty |> Headers.add_string "accept" "application/json" in let cached_vary = [ ("accept", "text/html") ] in Alcotest.(check bool) "non-matching vary" false (Cache.vary_matches ~cached_vary ~request_headers)
(** {1 Test Suite} *)
let suite = ( "cache", [ Alcotest.test_case "create size 0" `Quick (run test_create_size); Alcotest.test_case "create stats zeros" `Quick (run test_create_stats); Alcotest.test_case "clear empty" `Quick (run test_clear_empty); Alcotest.test_case "parse_vary" `Quick test_parse_vary; Alcotest.test_case "is_not_modified 304" `Quick test_is_not_modified_304; Alcotest.test_case "is_not_modified 200" `Quick test_is_not_modified_200; Alcotest.test_case "vary matches" `Quick test_vary_matches; Alcotest.test_case "vary no match" `Quick test_vary_no_match; ] )