@@ -113,17 +113,17 @@ TEST_CASE("Unix Socket GET request/response", "[unix][server][get][integration]"
113113
114114 fixture.start_server ();
115115 http::client client;
116- client.timeout (10s);
116+ client.timeout (10s). unix_socket (fixture. socket_path ) ;
117117
118118 SECTION (" Simple GET returns 200 with JSON body" ) {
119- auto response = client.get (fixture.url (" /hello" ), fixture. socket_path );
119+ auto response = client.get (fixture.url (" /hello" ));
120120 REQUIRE (response.ok ());
121121 auto json = response.json ();
122122 REQUIRE (json[" message" ] == " hello from unix socket" );
123123 }
124124
125125 SECTION (" GET with path parameter" ) {
126- auto response = client.get (fixture.url (" /greet/world" ), fixture. socket_path );
126+ auto response = client.get (fixture.url (" /greet/world" ));
127127 REQUIRE (response.ok ());
128128 auto json = response.json ();
129129 REQUIRE (json[" greeting" ] == " hello world" );
@@ -145,11 +145,11 @@ TEST_CASE("Unix Socket POST with JSON body", "[unix][server][post][integration]"
145145
146146 fixture.start_server ();
147147 http::client client;
148- client.timeout (10s);
148+ client.timeout (10s). unix_socket (fixture. socket_path ) ;
149149
150150 SECTION (" POST JSON body is echoed back" ) {
151151 std::string body = R"( {"name": "unix_test", "value": 42})" ;
152- auto response = client.post (fixture.url (" /echo-json" ), fixture. socket_path ,
152+ auto response = client.post (fixture.url (" /echo-json" ),
153153 body, " application/json" );
154154 REQUIRE (response.ok ());
155155 auto json = response.json ();
@@ -183,45 +183,73 @@ TEST_CASE("Unix Socket multiple HTTP methods", "[unix][server][methods][integrat
183183 res.json ({{" method" , " DELETE" }});
184184 });
185185
186+ server.patch (" /resource" , [](http::request& req, http::response& res) {
187+ res.json ({{" method" , " PATCH" }, {" body" , req.body ()}});
188+ });
189+
190+ server.head (" /resource" , [](http::response& res) {
191+ res.status (http::http_response::status::ok);
192+ res.header (" X-Method" , " HEAD" );
193+ res.send (" " );
194+ });
195+
196+ server.options (" /resource" , [](http::response& res) {
197+ res.header (" Allow" , " GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS" );
198+ res.send (" " );
199+ });
200+
186201 fixture.start_server ();
187202 http::client client;
188- client.timeout (10s);
203+ client.timeout (10s). unix_socket (fixture. socket_path ) ;
189204
190205 SECTION (" GET on /resource" ) {
191- auto response = client.get (fixture.url (" /resource" ), fixture. socket_path );
206+ auto response = client.get (fixture.url (" /resource" ));
192207 REQUIRE (response.ok ());
193208 REQUIRE (response.json ()[" method" ] == " GET" );
194209 }
195210
196211 SECTION (" POST on /resource" ) {
197- auto response = client.post (fixture.url (" /resource" ), fixture. socket_path ,
212+ auto response = client.post (fixture.url (" /resource" ),
198213 " " , " text/plain" );
199214 REQUIRE (response.ok ());
200215 REQUIRE (response.json ()[" method" ] == " POST" );
201216 }
202217
203- SECTION (" PUT on /resource via generic send" ) {
204- auto request = std::make_shared<http::http_request>();
205- request->set_method (http::method::PUT );
206- request->set_url (fixture.url (" /resource" ));
207- request->set_unix_socket (fixture.socket_path );
208- request->set_content (" test body" , " text/plain" );
209- auto response = client.send (request);
218+ SECTION (" PUT on /resource" ) {
219+ auto response = client.put (fixture.url (" /resource" ),
220+ " test body" , " text/plain" );
210221 REQUIRE (response.ok ());
211222 auto json = response.json ();
212223 REQUIRE (json[" method" ] == " PUT" );
213224 REQUIRE (json[" body" ] == " test body" );
214225 }
215226
216- SECTION (" DELETE on /resource via generic send" ) {
217- auto request = std::make_shared<http::http_request>();
218- request->set_method (http::method::DELETE );
219- request->set_url (fixture.url (" /resource" ));
220- request->set_unix_socket (fixture.socket_path );
221- auto response = client.send (request);
227+ SECTION (" DELETE on /resource" ) {
228+ auto response = client.del (fixture.url (" /resource" ));
222229 REQUIRE (response.ok ());
223230 REQUIRE (response.json ()[" method" ] == " DELETE" );
224231 }
232+
233+ SECTION (" PATCH on /resource" ) {
234+ auto response = client.patch (fixture.url (" /resource" ),
235+ " patch body" , " text/plain" );
236+ REQUIRE (response.ok ());
237+ auto json = response.json ();
238+ REQUIRE (json[" method" ] == " PATCH" );
239+ REQUIRE (json[" body" ] == " patch body" );
240+ }
241+
242+ SECTION (" HEAD on /resource" ) {
243+ auto response = client.head (fixture.url (" /resource" ));
244+ REQUIRE (response.ok ());
245+ REQUIRE (response.header (" X-Method" ) == " HEAD" );
246+ }
247+
248+ SECTION (" OPTIONS on /resource" ) {
249+ auto response = client.options (fixture.url (" /resource" ));
250+ REQUIRE (response.ok ());
251+ REQUIRE (response.header (" Allow" ).find (" GET" ) != std::string::npos);
252+ }
225253}
226254
227255// ============================================================================
@@ -240,11 +268,11 @@ TEST_CASE("Unix Socket multiple sequential requests", "[unix][server][sequential
240268
241269 fixture.start_server ();
242270 http::client client;
243- client.timeout (10s);
271+ client.timeout (10s). unix_socket (fixture. socket_path ) ;
244272
245273 SECTION (" Multiple sequential requests succeed" ) {
246274 for (int i = 1 ; i <= 5 ; ++i) {
247- auto response = client.get (fixture.url (" /count" ), fixture. socket_path );
275+ auto response = client.get (fixture.url (" /count" ));
248276 REQUIRE (response.ok ());
249277 REQUIRE (response.json ()[" count" ] == i);
250278 }
@@ -268,11 +296,11 @@ TEST_CASE("Unix Socket custom headers", "[unix][server][headers][integration]")
268296
269297 fixture.start_server ();
270298 http::client client;
271- client.timeout (10s);
299+ client.timeout (10s). unix_socket (fixture. socket_path ) ;
272300
273301 SECTION (" Send and receive custom headers" ) {
274302 http::headers_map headers = {{" X-Custom-Input" , " ping" }};
275- auto response = client.get (fixture.url (" /headers" ), fixture. socket_path , headers);
303+ auto response = client.get (fixture.url (" /headers" ), headers);
276304 REQUIRE (response.ok ());
277305 REQUIRE (response.json ()[" received_header" ] == " ping" );
278306 REQUIRE (response.header (" X-Custom-Output" ) == " pong" );
@@ -293,16 +321,16 @@ TEST_CASE("Unix Socket not found handler", "[unix][server][notfound][integration
293321
294322 fixture.start_server ();
295323 http::client client;
296- client.timeout (10s);
324+ client.timeout (10s). unix_socket (fixture. socket_path ) ;
297325
298326 SECTION (" Request to existing route returns 200" ) {
299- auto response = client.get (fixture.url (" /exists" ), fixture. socket_path );
327+ auto response = client.get (fixture.url (" /exists" ));
300328 REQUIRE (response.ok ());
301329 REQUIRE (response.json ()[" found" ] == true );
302330 }
303331
304332 SECTION (" Request to non-existent route returns 404" ) {
305- auto response = client.get (fixture.url (" /does-not-exist" ), fixture. socket_path );
333+ auto response = client.get (fixture.url (" /does-not-exist" ));
306334 REQUIRE (response.status () == 404 );
307335 }
308336}
@@ -325,10 +353,10 @@ TEST_CASE("Unix Socket large response body", "[unix][server][large][integration]
325353
326354 fixture.start_server ();
327355 http::client client;
328- client.timeout (30s);
356+ client.timeout (30s). unix_socket (fixture. socket_path ) ;
329357
330358 SECTION (" Large response body arrives intact" ) {
331- auto response = client.get (fixture.url (" /large" ), fixture. socket_path );
359+ auto response = client.get (fixture.url (" /large" ));
332360 REQUIRE (response.ok ());
333361 REQUIRE (response.body ().size () == large_size);
334362 REQUIRE (response.body () == large_body);
0 commit comments