This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
78
unikernel/duniverse/httpun/lib_test/test_headers.ml
Normal file
78
unikernel/duniverse/httpun/lib_test/test_headers.ml
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
open Httpun
|
||||
module Array = ArrayLabels
|
||||
module List = ListLabels
|
||||
|
||||
let check msg ~expect actual =
|
||||
Alcotest.(check (list (pair string string))) msg expect (Headers.to_list actual)
|
||||
;;
|
||||
|
||||
let test_replace () =
|
||||
check "replace trailing element"
|
||||
~expect:["c", "d"; "a", "d"]
|
||||
(Headers.replace
|
||||
(Headers.of_list ["c", "d"; "a", "b"])
|
||||
"a"
|
||||
"d");
|
||||
|
||||
check "replace middle element"
|
||||
~expect:["e", "f"; "c", "z"; "a", "b"]
|
||||
(Headers.replace
|
||||
(Headers.of_list ["e", "f"; "c", "d"; "a", "b"])
|
||||
"c"
|
||||
"z");
|
||||
|
||||
check "remove multiple trailing elements"
|
||||
~expect:["c", "d"; "a", "d"]
|
||||
(Headers.replace
|
||||
(Headers.of_list [ "c", "d"; "a", "b"; "a", "c"])
|
||||
"a"
|
||||
"d");
|
||||
;;
|
||||
|
||||
let test_remove () =
|
||||
check "remove leading element"
|
||||
~expect:["c", "d"]
|
||||
(Headers.remove
|
||||
(Headers.of_list ["a", "b"; "c", "d"])
|
||||
"a");
|
||||
check "remove trailing element"
|
||||
~expect:["c", "d"]
|
||||
(Headers.remove
|
||||
(Headers.of_list ["c", "d"; "a", "b"])
|
||||
"a");
|
||||
;;
|
||||
|
||||
let test_ci_equal () =
|
||||
let string_of_char x = String.init 1 (fun _ -> x) in
|
||||
let ascii =
|
||||
Array.init (0xff + 1) ~f:Char.chr
|
||||
|> Array.to_list
|
||||
in
|
||||
let ascii_pairs =
|
||||
List.map ascii ~f:(fun x ->
|
||||
List.map ascii ~f:(fun y -> x, y))
|
||||
|> List.concat
|
||||
in
|
||||
(* Ensure that the branch free case-insensitive equality check is consistent
|
||||
* with a naive implementation. *)
|
||||
List.iter ascii_pairs ~f:(fun (x, y) ->
|
||||
let char_ci_equal =
|
||||
Char.compare (Char.lowercase_ascii x) (Char.lowercase_ascii y) = 0
|
||||
in
|
||||
let headers_equal =
|
||||
let headers = Headers.of_list [ string_of_char y, "value" ] in
|
||||
Headers.mem headers (string_of_char x)
|
||||
in
|
||||
Alcotest.(check bool)
|
||||
(Printf.sprintf "CI: %C = %C" x y)
|
||||
char_ci_equal
|
||||
headers_equal)
|
||||
;;
|
||||
|
||||
|
||||
|
||||
let tests =
|
||||
[ "remove" , `Quick, test_remove
|
||||
; "replace" , `Quick, test_replace
|
||||
; "CI equal", `Quick, test_ci_equal
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue