Eio HTTP server with static file serving and route handlers
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

respond: test cleanup from concurrent session

+27 -23
+27 -23
test/test_respond.ml
··· 311 311 let ok _ = Respond.Response.json "ok" 312 312 313 313 let bindings_of path routes = 314 - match Respond.match_route routes path with 314 + match Respond.match_route ~meth:`GET routes path with 315 315 | None -> None 316 316 | Some (_, b) -> Some b 317 317 ··· 319 319 let routes = [ Respond.get "/api/health" ok; Respond.get "/api/cdms" ok ] in 320 320 Alcotest.(check bool) 321 321 "found" true 322 - (Respond.match_route routes "/api/health" <> None); 322 + (Respond.match_route ~meth:`GET routes "/api/health" <> None); 323 323 Alcotest.(check bool) 324 324 "found 2" true 325 - (Respond.match_route routes "/api/cdms" <> None) 325 + (Respond.match_route ~meth:`GET routes "/api/cdms" <> None) 326 326 327 327 let test_route_no_match () = 328 328 let routes = [ Respond.get "/api/health" ok ] in 329 329 Alcotest.(check bool) 330 330 "not found" true 331 - (Respond.match_route routes "/api/unknown" = None) 331 + (Respond.match_route ~meth:`GET routes "/api/unknown" = None) 332 332 333 333 let test_route_no_prefix () = 334 334 let routes = [ Respond.get "/api" ok ] in 335 335 Alcotest.(check bool) 336 336 "no prefix" true 337 - (Respond.match_route routes "/api/health" = None) 337 + (Respond.match_route ~meth:`GET routes "/api/health" = None) 338 338 339 339 let test_route_param () = 340 340 let routes = [ Respond.get "/auth/:slug/callback" ok ] in ··· 386 386 387 387 let test_root_pattern () = 388 388 let routes = [ Respond.get "/" ok ] in 389 - Alcotest.(check bool) "matches /" true (Respond.match_route routes "/" <> None); 389 + Alcotest.(check bool) 390 + "matches /" true 391 + (Respond.match_route ~meth:`GET routes "/" <> None); 390 392 Alcotest.(check bool) 391 393 "does not match /foo" true 392 - (Respond.match_route routes "/foo" = None) 394 + (Respond.match_route ~meth:`GET routes "/foo" = None) 393 395 394 396 let test_catchall_only () = 395 397 (* Pattern "**" alone catches everything, including root. *) ··· 406 408 let routes = [ Respond.get "/:name" ok ] in 407 409 Alcotest.(check bool) 408 410 "matches /foo" true 409 - (Respond.match_route routes "/foo" <> None); 411 + (Respond.match_route ~meth:`GET routes "/foo" <> None); 410 412 Alcotest.(check bool) 411 413 "matches /foo/" true 412 - (Respond.match_route routes "/foo/" <> None) 414 + (Respond.match_route ~meth:`GET routes "/foo/" <> None) 413 415 414 416 let test_consecutive_slashes () = 415 417 (* // is treated the same as / (empty segments filtered). Documents ··· 417 419 let routes = [ Respond.get "/a/b" ok ] in 418 420 Alcotest.(check bool) 419 421 "matches //a//b" true 420 - (Respond.match_route routes "//a//b" <> None) 422 + (Respond.match_route ~meth:`GET routes "//a//b" <> None) 421 423 422 424 let test_too_few_segments () = 423 425 let routes = [ Respond.get "/users/:id/posts" ok ] in 424 426 Alcotest.(check bool) 425 427 "no match /users" true 426 - (Respond.match_route routes "/users" = None); 428 + (Respond.match_route ~meth:`GET routes "/users" = None); 427 429 Alcotest.(check bool) 428 430 "no match /users/42" true 429 - (Respond.match_route routes "/users/42" = None) 431 + (Respond.match_route ~meth:`GET routes "/users/42" = None) 430 432 431 433 let test_too_many_segments () = 432 434 let routes = [ Respond.get "/users/:id" ok ] in 433 435 Alcotest.(check bool) 434 436 "no match extra segment" true 435 - (Respond.match_route routes "/users/42/extra" = None) 437 + (Respond.match_route ~meth:`GET routes "/users/42/extra" = None) 436 438 437 439 let test_literal_wins_over_param () = 438 440 (* Literal route registered first takes priority over a param route. *) ··· 505 507 let test_pattern_compile_empty () = 506 508 (* Empty pattern "" compiles to no segments; matches only the empty path. *) 507 509 let routes = [ Respond.get "" ok ] in 508 - Alcotest.(check bool) "matches /" true (Respond.match_route routes "/" <> None); 510 + Alcotest.(check bool) 511 + "matches /" true 512 + (Respond.match_route ~meth:`GET routes "/" <> None); 509 513 Alcotest.(check bool) 510 514 "no match /a" true 511 - (Respond.match_route routes "/a" = None) 515 + (Respond.match_route ~meth:`GET routes "/a" = None) 512 516 513 517 let test_pattern_colon_in_literal () = 514 518 (* A colon NOT at position 0 of a segment must remain literal. *) 515 519 let routes = [ Respond.get "/api/v1:batch" ok ] in 516 520 Alcotest.(check bool) 517 521 "literal with colon matches" true 518 - (Respond.match_route routes "/api/v1:batch" <> None); 522 + (Respond.match_route ~meth:`GET routes "/api/v1:batch" <> None); 519 523 Alcotest.(check bool) 520 524 "plain name does not match" true 521 - (Respond.match_route routes "/api/anything" = None) 525 + (Respond.match_route ~meth:`GET routes "/api/anything" = None) 522 526 523 527 let test_pattern_bare_colon () = 524 528 (* A bare ":" (len 1, leading colon but no name) must stay literal. *) 525 529 let routes = [ Respond.get "/a/:/b" ok ] in 526 530 Alcotest.(check bool) 527 531 "bare colon literal" true 528 - (Respond.match_route routes "/a/:/b" <> None); 532 + (Respond.match_route ~meth:`GET routes "/a/:/b" <> None); 529 533 Alcotest.(check bool) 530 534 "does not behave as wildcard" true 531 - (Respond.match_route routes "/a/x/b" = None) 535 + (Respond.match_route ~meth:`GET routes "/a/x/b" = None) 532 536 533 537 let test_empty_param_segment () = 534 538 (* Double slash in request produces empty segment that gets filtered. ··· 545 549 let routes = [ Respond.get pattern ok ] in 546 550 Alcotest.(check bool) 547 551 "matches 1000-seg path" true 548 - (Respond.match_route routes path <> None) 552 + (Respond.match_route ~meth:`GET routes path <> None) 549 553 550 554 let test_deep_catchall_perf () = 551 555 let path = ··· 560 564 let routes = [ Respond.get "/users/:id" ok ] in 561 565 Alcotest.(check bool) 562 566 "totally different path" true 563 - (Respond.match_route routes "/orders/42" = None) 567 + (Respond.match_route ~meth:`GET routes "/orders/42" = None) 564 568 565 569 let test_catchall_stops_at_pattern () = 566 570 (* A literal segment after a param must still match. *) 567 571 let routes = [ Respond.get "/auth/:slug/callback" ok ] in 568 572 Alcotest.(check bool) 569 573 "no match without /callback" true 570 - (Respond.match_route routes "/auth/github" = None); 574 + (Respond.match_route ~meth:`GET routes "/auth/github" = None); 571 575 Alcotest.(check bool) 572 576 "no match with extra after callback" true 573 - (Respond.match_route routes "/auth/github/callback/extra" = None); 577 + (Respond.match_route ~meth:`GET routes "/auth/github/callback/extra" = None); 574 578 match bindings_of "/auth/github/callback" routes with 575 579 | Some [ ("slug", "github") ] -> () 576 580 | _ -> Alcotest.fail "expected slug=github"