File: test_path.ml

package info (click to toggle)
ocaml-cohttp 6.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,624 kB
  • sloc: ml: 13,107; makefile: 20; sh: 18; javascript: 18
file content (88 lines) | stat: -rw-r--r-- 3,132 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
let test_resolve_local_file () =
  let tests =
    [
      ( "full URL simple",
        "/foo/bar/baz",
        "https://example.com/images/buzz",
        "/foo/bar/baz/images/buzz" );
      ( "full URL cwd",
        "/foo/bar/baz",
        "https://example.com/./buzz",
        "/foo/bar/baz/buzz" );
      ( "full URL parent blocked",
        "/foo/bar/baz",
        "https://example.com/../buzz",
        "/foo/bar/baz/buzz" );
      ( "full URL grandparent blocked",
        "/foo/bar/baz",
        "https://example.com/../../buzz",
        "/foo/bar/baz/buzz" );
      ( "trailing-slash-docroot full URL simple",
        "/foo/bar/baz/",
        "https://example.com/images/buzz",
        "/foo/bar/baz/images/buzz" );
      ( "trailing-slash-docroot full URL cwd",
        "/foo/bar/baz/",
        "https://example.com/./buzz",
        "/foo/bar/baz/buzz" );
      ( "trailing-slash-docroot full URL parent blocked",
        "/foo/bar/baz/",
        "https://example.com/../buzz",
        "/foo/bar/baz/buzz" );
      ( "trailing-slash-docroot full URL grandparent blocked",
        "/foo/bar/baz/",
        "https://example.com/../../buzz",
        "/foo/bar/baz/buzz" );
      ( "filepath simple",
        "/foo/bar/baz",
        "/images/buzz",
        "/foo/bar/baz/images/buzz" );
      ("filepath cwd", "/foo/bar/baz", "./buzz", "/foo/bar/baz/buzz");
      ("filepath parent blocked", "/foo/bar/baz", "../buzz", "/foo/bar/baz/buzz");
      ( "filepath grandparent blocked",
        "/foo/bar/baz",
        "../../buzz",
        "/foo/bar/baz/buzz" );
      ( "trailing-slash-docroot filepath simple",
        "/foo/bar/baz/",
        "/images/buzz",
        "/foo/bar/baz/images/buzz" );
      ( "trailing-slash-docroot filepath cwd",
        "/foo/bar/baz/",
        "./buzz",
        "/foo/bar/baz/buzz" );
      ( "trailing-slash-docroot filepath parent blocked",
        "/foo/bar/baz/",
        "../buzz",
        "/foo/bar/baz/buzz" );
      ( "trailing-slash-docroot filepath grandparent blocked",
        "/foo/bar/baz/",
        "../../buzz",
        "/foo/bar/baz/buzz" );
      ("root-docroot simple", "/", "/images/buzz", "/images/buzz");
      ("root-docroot cwd", "/", "./buzz", "/buzz");
      ("root-docroot grandparent blocked", "/", "../../buzz", "/buzz");
      ("blank-docroot simple", "", "/images/buzz", "images/buzz");
      ("blank-docroot cwd", "", "./buzz", "buzz");
      ("blank-docroot blank-path", "", "https://example.com", "");
      ("blank-docroot blank-uri", "", "", "");
      ("cwd-docroot simple", ".", "/images/buzz", "./images/buzz");
      ("cwd-docroot cwd", ".", "./buzz", "./buzz");
      ("cwd-docroot blank-path", ".", "https://example.com", "./");
      ("cwd-docroot blank-uri", ".", "", "./");
    ]
  in
  List.iter
    (fun (name, docroot, uri, expected) ->
      Alcotest.(check string)
        name expected
        (Cohttp.Path.resolve_local_file ~docroot ~uri:(Uri.of_string uri)))
    tests

let () = Printexc.record_backtrace true

let () =
  Alcotest.run "test_path"
    [
      ("Path", [ ("Check resolve_local_file", `Quick, test_resolve_local_file) ]);
    ]