forked from
anil.recoil.org/ocaml-requests
A batteries included HTTP/1.1 client in OCaml
1(*---------------------------------------------------------------------------
2 Copyright (c) 2025 Anil Madhavapeddy <anil@recoil.org>. All rights reserved.
3 SPDX-License-Identifier: ISC
4 ---------------------------------------------------------------------------*)
5
6(** Tests for Response_limits module *)
7
8module Response_limits = Requests.Response_limits
9
10(** {1 Default Values} *)
11
12let test_default_body_size () =
13 let d = Response_limits.default in
14 (* 100MB = 100 * 1024 * 1024 = 104857600 *)
15 Alcotest.(check int64)
16 "max_response_body_size" 104857600L
17 (Response_limits.max_response_body_size d)
18
19let test_default_header_size () =
20 let d = Response_limits.default in
21 (* 16KB = 16 * 1024 = 16384 *)
22 Alcotest.(check int)
23 "max_header_size" 16384
24 (Response_limits.max_header_size d)
25
26let test_default_header_count () =
27 let d = Response_limits.default in
28 Alcotest.(check int)
29 "max_header_count" 100
30 (Response_limits.max_header_count d)
31
32let test_default_decompressed_size () =
33 let d = Response_limits.default in
34 (* 100MB *)
35 Alcotest.(check int64)
36 "max_decompressed_size" 104857600L
37 (Response_limits.max_decompressed_size d)
38
39let test_default_compression_ratio () =
40 let d = Response_limits.default in
41 let expected = 100.0 in
42 let actual = Response_limits.max_compression_ratio d in
43 Alcotest.(check bool)
44 "max_compression_ratio" true
45 (Float.abs (actual -. expected) < 0.001)
46
47(** {1 Custom Values} *)
48
49let test_make_custom () =
50 let limits =
51 Response_limits.v ~max_response_body_size:1024L ~max_header_size:512
52 ~max_header_count:50 ~max_decompressed_size:2048L
53 ~max_compression_ratio:10.0 ()
54 in
55 Alcotest.(check int64)
56 "custom body size" 1024L
57 (Response_limits.max_response_body_size limits);
58 Alcotest.(check int)
59 "custom header size" 512
60 (Response_limits.max_header_size limits);
61 Alcotest.(check int)
62 "custom header count" 50
63 (Response_limits.max_header_count limits);
64 Alcotest.(check int64)
65 "custom decompressed size" 2048L
66 (Response_limits.max_decompressed_size limits);
67 Alcotest.(check bool)
68 "custom compression ratio" true
69 (Float.abs (Response_limits.max_compression_ratio limits -. 10.0) < 0.001)
70
71let test_make_partial () =
72 (* Only override some values, rest should be defaults *)
73 let limits = Response_limits.v ~max_header_count:200 () in
74 Alcotest.(check int)
75 "overridden header count" 200
76 (Response_limits.max_header_count limits);
77 (* Other values should be defaults *)
78 Alcotest.(check int64)
79 "default body size" 104857600L
80 (Response_limits.max_response_body_size limits)
81
82let test_make_zero_limits () =
83 let limits =
84 Response_limits.v ~max_response_body_size:0L ~max_header_size:0
85 ~max_header_count:0 ()
86 in
87 Alcotest.(check int64)
88 "zero body size" 0L
89 (Response_limits.max_response_body_size limits);
90 Alcotest.(check int)
91 "zero header size" 0
92 (Response_limits.max_header_size limits);
93 Alcotest.(check int)
94 "zero header count" 0
95 (Response_limits.max_header_count limits)
96
97(** {1 Test Suite} *)
98
99let suite =
100 ( "response_limits",
101 [
102 Alcotest.test_case "body size" `Quick test_default_body_size;
103 Alcotest.test_case "header size" `Quick test_default_header_size;
104 Alcotest.test_case "header count" `Quick test_default_header_count;
105 Alcotest.test_case "decompressed size" `Quick
106 test_default_decompressed_size;
107 Alcotest.test_case "compression ratio" `Quick
108 test_default_compression_ratio;
109 Alcotest.test_case "full custom" `Quick test_make_custom;
110 Alcotest.test_case "partial override" `Quick test_make_partial;
111 Alcotest.test_case "zero limits" `Quick test_make_zero_limits;
112 ] )