]>
git.proxmox.com Git - libgit2.git/blob - tests/network/url/redirect.c
1 #include "clar_libgit2.h"
5 static git_net_url conndata
;
7 void test_network_url_redirect__initialize(void)
9 memset(&conndata
, 0, sizeof(conndata
));
12 void test_network_url_redirect__cleanup(void)
14 git_net_url_dispose(&conndata
);
17 void test_network_url_redirect__redirect_http(void)
19 cl_git_pass(git_net_url_parse(&conndata
,
20 "http://example.com/foo/bar/baz"));
21 cl_git_pass(git_net_url_apply_redirect(&conndata
,
22 "http://example.com/foo/bar/baz", "bar/baz"));
23 cl_assert_equal_s(conndata
.scheme
, "http");
24 cl_assert_equal_s(conndata
.host
, "example.com");
25 cl_assert_equal_s(conndata
.port
, "80");
26 cl_assert_equal_s(conndata
.path
, "/foo/");
27 cl_assert_equal_p(conndata
.username
, NULL
);
28 cl_assert_equal_p(conndata
.password
, NULL
);
31 void test_network_url_redirect__redirect_ssl(void)
33 cl_git_pass(git_net_url_parse(&conndata
,
34 "https://example.com/foo/bar/baz"));
35 cl_git_pass(git_net_url_apply_redirect(&conndata
,
36 "https://example.com/foo/bar/baz", "bar/baz"));
37 cl_assert_equal_s(conndata
.scheme
, "https");
38 cl_assert_equal_s(conndata
.host
, "example.com");
39 cl_assert_equal_s(conndata
.port
, "443");
40 cl_assert_equal_s(conndata
.path
, "/foo/");
41 cl_assert_equal_p(conndata
.username
, NULL
);
42 cl_assert_equal_p(conndata
.password
, NULL
);
45 void test_network_url_redirect__redirect_leaves_root_path(void)
47 cl_git_pass(git_net_url_parse(&conndata
,
48 "https://example.com/foo/bar/baz"));
49 cl_git_pass(git_net_url_apply_redirect(&conndata
,
50 "https://example.com/foo/bar/baz", "/foo/bar/baz"));
51 cl_assert_equal_s(conndata
.scheme
, "https");
52 cl_assert_equal_s(conndata
.host
, "example.com");
53 cl_assert_equal_s(conndata
.port
, "443");
54 cl_assert_equal_s(conndata
.path
, "/");
55 cl_assert_equal_p(conndata
.username
, NULL
);
56 cl_assert_equal_p(conndata
.password
, NULL
);
59 void test_network_url_redirect__redirect_encoded_username_password(void)
61 cl_git_pass(git_net_url_parse(&conndata
,
62 "https://user%2fname:pass%40word%zyx%v@example.com/foo/bar/baz"));
63 cl_git_pass(git_net_url_apply_redirect(&conndata
,
64 "https://user%2fname:pass%40word%zyx%v@example.com/foo/bar/baz", "bar/baz"));
65 cl_assert_equal_s(conndata
.scheme
, "https");
66 cl_assert_equal_s(conndata
.host
, "example.com");
67 cl_assert_equal_s(conndata
.port
, "443");
68 cl_assert_equal_s(conndata
.path
, "/foo/");
69 cl_assert_equal_s(conndata
.username
, "user/name");
70 cl_assert_equal_s(conndata
.password
, "pass@word%zyx%v");
73 void test_network_url_redirect__redirect_cross_host_denied(void)
75 cl_git_pass(git_net_url_parse(&conndata
, "https://bar.com/bar/baz"));
76 cl_git_fail_with(git_net_url_apply_redirect(&conndata
,
77 "https://foo.com/bar/baz", NULL
),
81 void test_network_url_redirect__redirect_http_downgrade_denied(void)
83 cl_git_pass(git_net_url_parse(&conndata
, "https://foo.com/bar/baz"));
84 cl_git_fail_with(git_net_url_apply_redirect(&conndata
,
85 "http://foo.com/bar/baz", NULL
),
89 void test_network_url_redirect__redirect_relative(void)
91 cl_git_pass(git_net_url_parse(&conndata
, "http://foo.com/bar/baz/biff"));
92 cl_git_pass(git_net_url_apply_redirect(&conndata
,
93 "/zap/baz/biff?bam", NULL
));
94 cl_assert_equal_s(conndata
.scheme
, "http");
95 cl_assert_equal_s(conndata
.host
, "foo.com");
96 cl_assert_equal_s(conndata
.port
, "80");
97 cl_assert_equal_s(conndata
.path
, "/zap/baz/biff?bam");
98 cl_assert_equal_p(conndata
.username
, NULL
);
99 cl_assert_equal_p(conndata
.password
, NULL
);
102 void test_network_url_redirect__redirect_relative_ssl(void)
104 cl_git_pass(git_net_url_parse(&conndata
, "https://foo.com/bar/baz/biff"));
105 cl_git_pass(git_net_url_apply_redirect(&conndata
,
106 "/zap/baz/biff?bam", NULL
));
107 cl_assert_equal_s(conndata
.scheme
, "https");
108 cl_assert_equal_s(conndata
.host
, "foo.com");
109 cl_assert_equal_s(conndata
.port
, "443");
110 cl_assert_equal_s(conndata
.path
, "/zap/baz/biff?bam");
111 cl_assert_equal_p(conndata
.username
, NULL
);
112 cl_assert_equal_p(conndata
.password
, NULL
);
115 void test_network_url_redirect__service_query_no_query_params_in_location(void)
117 cl_git_pass(git_net_url_parse(&conndata
, "https://foo.com/bar/info/refs?service=git-upload-pack"));
118 cl_git_pass(git_net_url_apply_redirect(&conndata
,
119 "/baz/info/refs", "/info/refs?service=git-upload-pack"));
120 cl_assert_equal_s(conndata
.path
, "/baz");
123 void test_network_url_redirect__service_query_with_query_params_in_location(void)
125 cl_git_pass(git_net_url_parse(&conndata
, "https://foo.com/bar/info/refs?service=git-upload-pack"));
126 cl_git_pass(git_net_url_apply_redirect(&conndata
,
127 "/baz/info/refs?service=git-upload-pack", "/info/refs?service=git-upload-pack"));
128 cl_assert_equal_s(conndata
.path
, "/baz");