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) ]);
]
|