Raw
1 #!/bin/sh
2 #
3 # Copyright (c) 2024 Matheus Afonso Martins Moreira
4 #
5
6 test_description='git url-parse tests'
7
8 . ./test-lib.sh
9
10 test_expect_success 'git url-parse -- ssh syntax' '
11 git url-parse "ssh://user@example.com:1234/repository/path" &&
12 git url-parse "ssh://user@example.com/repository/path" &&
13 git url-parse "ssh://example.com:1234/repository/path" &&
14 git url-parse "ssh://example.com/repository/path"
15 '
16
17 test_expect_success 'git url-parse -- git syntax' '
18 git url-parse "git://example.com:1234/repository/path" &&
19 git url-parse "git://example.com/repository/path"
20 '
21
22 test_expect_success 'git url-parse -- http syntax' '
23 git url-parse "https://example.com:1234/repository/path" &&
24 git url-parse "https://example.com/repository/path" &&
25 git url-parse "http://example.com:1234/repository/path" &&
26 git url-parse "http://example.com/repository/path"
27 '
28
29 test_expect_success 'git url-parse -- scp syntax' '
30 git url-parse "user@example.com:/repository/path" &&
31 git url-parse "example.com:/repository/path"
32 '
33
34 test_expect_success 'git url-parse -- username expansion - ssh syntax' '
35 git url-parse "ssh://user@example.com:1234/~user/repository" &&
36 git url-parse "ssh://user@example.com/~user/repository" &&
37 git url-parse "ssh://example.com:1234/~user/repository" &&
38 git url-parse "ssh://example.com/~user/repository"
39 '
40
41 test_expect_success 'git url-parse -- username expansion - git syntax' '
42 git url-parse "git://example.com:1234/~user/repository" &&
43 git url-parse "git://example.com/~user/repository"
44 '
45
46 test_expect_success 'git url-parse -- username expansion - scp syntax' '
47 git url-parse "user@example.com:~user/repository" &&
48 git url-parse "example.com:~user/repository"
49 '
50
51 test_expect_success 'git url-parse -- file urls' '
52 git url-parse "file:///repository/path" &&
53 git url-parse "file://"
54 '
55
56 test_expect_success 'git url-parse -c scheme -- ssh syntax' '
57 test ssh = "$(git url-parse -c scheme "ssh://user@example.com:1234/repository/path")" &&
58 test ssh = "$(git url-parse -c scheme "ssh://user@example.com/repository/path")" &&
59 test ssh = "$(git url-parse -c scheme "ssh://example.com:1234/repository/path")" &&
60 test ssh = "$(git url-parse -c scheme "ssh://example.com/repository/path")"
61 '
62
63 test_expect_success 'git url-parse -c scheme -- git syntax' '
64 test git = "$(git url-parse -c scheme "git://example.com:1234/repository/path")" &&
65 test git = "$(git url-parse -c scheme "git://example.com/repository/path")"
66 '
67
68 test_expect_success 'git url-parse -c scheme -- http syntax' '
69 test https = "$(git url-parse -c scheme "https://example.com:1234/repository/path")" &&
70 test https = "$(git url-parse -c scheme "https://example.com/repository/path")" &&
71 test http = "$(git url-parse -c scheme "http://example.com:1234/repository/path")" &&
72 test http = "$(git url-parse -c scheme "http://example.com/repository/path")"
73 '
74
75 test_expect_success 'git url-parse -c scheme -- scp syntax' '
76 test ssh = "$(git url-parse -c scheme "user@example.com:/repository/path")" &&
77 test ssh = "$(git url-parse -c scheme "example.com:/repository/path")"
78 '
79
80 test_expect_success 'git url-parse -c user -- ssh syntax' '
81 test user = "$(git url-parse -c user "ssh://user@example.com:1234/repository/path")" &&
82 test user = "$(git url-parse -c user "ssh://user@example.com/repository/path")" &&
83 test "" = "$(git url-parse -c user "ssh://example.com:1234/repository/path")" &&
84 test "" = "$(git url-parse -c user "ssh://example.com/repository/path")"
85 '
86
87 test_expect_success 'git url-parse -c user -- git syntax' '
88 test "" = "$(git url-parse -c user "git://example.com:1234/repository/path")" &&
89 test "" = "$(git url-parse -c user "git://example.com/repository/path")"
90 '
91
92 test_expect_success 'git url-parse -c user -- http syntax' '
93 test "" = "$(git url-parse -c user "https://example.com:1234/repository/path")" &&
94 test "" = "$(git url-parse -c user "https://example.com/repository/path")" &&
95 test "" = "$(git url-parse -c user "http://example.com:1234/repository/path")" &&
96 test "" = "$(git url-parse -c user "http://example.com/repository/path")"
97 '
98
99 test_expect_success 'git url-parse -c user -- scp syntax' '
100 test user = "$(git url-parse -c user "user@example.com:/repository/path")" &&
101 test "" = "$(git url-parse -c user "example.com:/repository/path")"
102 '
103
104 test_expect_success 'git url-parse -c password -- http syntax' '
105 test secret = "$(git url-parse -c password "https://user:secret@example.com:1234/repository/path")" &&
106 test secret = "$(git url-parse -c password "http://user:secret@example.com/repository/path")" &&
107 test "" = "$(git url-parse -c password "https://user@example.com/repository/path")" &&
108 test "" = "$(git url-parse -c password "https://example.com/repository/path")"
109 '
110
111 test_expect_success 'git url-parse -c host -- ssh syntax' '
112 test example.com = "$(git url-parse -c host "ssh://user@example.com:1234/repository/path")" &&
113 test example.com = "$(git url-parse -c host "ssh://user@example.com/repository/path")" &&
114 test example.com = "$(git url-parse -c host "ssh://example.com:1234/repository/path")" &&
115 test example.com = "$(git url-parse -c host "ssh://example.com/repository/path")"
116 '
117
118 test_expect_success 'git url-parse -c host -- git syntax' '
119 test example.com = "$(git url-parse -c host "git://example.com:1234/repository/path")" &&
120 test example.com = "$(git url-parse -c host "git://example.com/repository/path")"
121 '
122
123 test_expect_success 'git url-parse -c host -- http syntax' '
124 test example.com = "$(git url-parse -c host "https://example.com:1234/repository/path")" &&
125 test example.com = "$(git url-parse -c host "https://example.com/repository/path")" &&
126 test example.com = "$(git url-parse -c host "http://example.com:1234/repository/path")" &&
127 test example.com = "$(git url-parse -c host "http://example.com/repository/path")"
128 '
129
130 test_expect_success 'git url-parse -c host -- scp syntax' '
131 test example.com = "$(git url-parse -c host "user@example.com:/repository/path")" &&
132 test example.com = "$(git url-parse -c host "example.com:/repository/path")"
133 '
134
135 test_expect_success 'git url-parse -c port -- ssh syntax' '
136 test 1234 = "$(git url-parse -c port "ssh://user@example.com:1234/repository/path")" &&
137 test "" = "$(git url-parse -c port "ssh://user@example.com/repository/path")" &&
138 test 1234 = "$(git url-parse -c port "ssh://example.com:1234/repository/path")" &&
139 test "" = "$(git url-parse -c port "ssh://example.com/repository/path")"
140 '
141
142 test_expect_success 'git url-parse -c port -- git syntax' '
143 test 1234 = "$(git url-parse -c port "git://example.com:1234/repository/path")" &&
144 test "" = "$(git url-parse -c port "git://example.com/repository/path")"
145 '
146
147 test_expect_success 'git url-parse -c port -- http syntax' '
148 test 1234 = "$(git url-parse -c port "https://example.com:1234/repository/path")" &&
149 test "" = "$(git url-parse -c port "https://example.com/repository/path")" &&
150 test 1234 = "$(git url-parse -c port "http://example.com:1234/repository/path")" &&
151 test "" = "$(git url-parse -c port "http://example.com/repository/path")"
152 '
153
154 test_expect_success 'git url-parse -c port -- scp syntax' '
155 test "" = "$(git url-parse -c port "user@example.com:/repository/path")" &&
156 test "" = "$(git url-parse -c port "example.com:/repository/path")"
157 '
158
159 test_expect_success 'git url-parse -c path -- ssh syntax' '
160 test "/repository/path" = "$(git url-parse -c path "ssh://user@example.com:1234/repository/path")" &&
161 test "/repository/path" = "$(git url-parse -c path "ssh://user@example.com/repository/path")" &&
162 test "/repository/path" = "$(git url-parse -c path "ssh://example.com:1234/repository/path")" &&
163 test "/repository/path" = "$(git url-parse -c path "ssh://example.com/repository/path")"
164 '
165
166 test_expect_success 'git url-parse -c path -- git syntax' '
167 test "/repository/path" = "$(git url-parse -c path "git://example.com:1234/repository/path")" &&
168 test "/repository/path" = "$(git url-parse -c path "git://example.com/repository/path")"
169 '
170
171 test_expect_success 'git url-parse -c path -- http syntax' '
172 test "/repository/path" = "$(git url-parse -c path "https://example.com:1234/repository/path")" &&
173 test "/repository/path" = "$(git url-parse -c path "https://example.com/repository/path")" &&
174 test "/repository/path" = "$(git url-parse -c path "http://example.com:1234/repository/path")" &&
175 test "/repository/path" = "$(git url-parse -c path "http://example.com/repository/path")"
176 '
177
178 test_expect_success 'git url-parse -c path -- scp syntax' '
179 test "/repository/path" = "$(git url-parse -c path "user@example.com:/repository/path")" &&
180 test "/repository/path" = "$(git url-parse -c path "example.com:/repository/path")"
181 '
182
183 test_expect_success 'git url-parse -c path -- username expansion - ssh syntax' '
184 test "~user/repository" = "$(git url-parse -c path "ssh://user@example.com:1234/~user/repository")" &&
185 test "~user/repository" = "$(git url-parse -c path "ssh://user@example.com/~user/repository")" &&
186 test "~user/repository" = "$(git url-parse -c path "ssh://example.com:1234/~user/repository")" &&
187 test "~user/repository" = "$(git url-parse -c path "ssh://example.com/~user/repository")"
188 '
189
190 test_expect_success 'git url-parse -c path -- username expansion - git syntax' '
191 test "~user/repository" = "$(git url-parse -c path "git://example.com:1234/~user/repository")" &&
192 test "~user/repository" = "$(git url-parse -c path "git://example.com/~user/repository")"
193 '
194
195 test_expect_success 'git url-parse -c path -- username expansion - scp syntax' '
196 test "~user/repository" = "$(git url-parse -c path "user@example.com:~user/repository")" &&
197 test "~user/repository" = "$(git url-parse -c path "example.com:~user/repository")"
198 '
199
200 test_expect_success 'git url-parse -c path -- username expansion strips query and fragment' '
201 test "~user/repository" = "$(git url-parse -c path "ssh://example.com/~user/repository?query")" &&
202 test "~user/repository" = "$(git url-parse -c path "ssh://example.com/~user/repository#fragment")" &&
203 test "~user/repository" = "$(git url-parse -c path "git://example.com/~user/repository?query")" &&
204 test "~user/repository" = "$(git url-parse -c path "user@example.com:~user/repository?query")"
205 '
206
207 test_expect_success 'git url-parse -- ssh syntax with IPv6' '
208 git url-parse "ssh://user@[::1]:1234/repository/path" &&
209 git url-parse "ssh://user@[::1]/repository/path" &&
210 git url-parse "ssh://[::1]:1234/repository/path" &&
211 git url-parse "ssh://[::1]/repository/path" &&
212 git url-parse "ssh://[2001:db8::1]/repository/path"
213 '
214
215 test_expect_success 'git url-parse -- git syntax with IPv6' '
216 git url-parse "git://[::1]:9418/repository/path" &&
217 git url-parse "git://[::1]/repository/path"
218 '
219
220 test_expect_success 'git url-parse -- http syntax with IPv6' '
221 git url-parse "https://[::1]:1234/repository/path" &&
222 git url-parse "https://[::1]/repository/path" &&
223 git url-parse "http://[2001:db8::1]/repository/path"
224 '
225
226 test_expect_success 'git url-parse -c host -- IPv6 in URL form' '
227 test "[::1]" = "$(git url-parse -c host "ssh://user@[::1]:1234/repository/path")" &&
228 test "[::1]" = "$(git url-parse -c host "ssh://[::1]/repository/path")" &&
229 test "[2001:db8::1]" = "$(git url-parse -c host "ssh://[2001:db8::1]/repository/path")" &&
230 test "[::1]" = "$(git url-parse -c host "git://[::1]/repository/path")" &&
231 test "[2001:db8::1]" = "$(git url-parse -c host "https://[2001:db8::1]/repository/path")"
232 '
233
234 test_expect_success 'git url-parse -c port -- IPv6 in URL form' '
235 test 1234 = "$(git url-parse -c port "ssh://user@[::1]:1234/repository/path")" &&
236 test "" = "$(git url-parse -c port "ssh://[::1]/repository/path")" &&
237 test 9418 = "$(git url-parse -c port "git://[::1]:9418/repository/path")"
238 '
239
240 test_expect_success 'git url-parse -- scp syntax with IPv6' '
241 git url-parse "[::1]:repository/path" &&
242 git url-parse "user@[::1]:repository/path" &&
243 git url-parse "[2001:db8::1]:repo"
244 '
245
246 test_expect_success 'git url-parse -- scp syntax with bracketed hostname' '
247 git url-parse "[myhost]:src" &&
248 git url-parse "user@[myhost]:src"
249 '
250
251 test_expect_success 'git url-parse -- scp syntax with bracketed host:port' '
252 git url-parse "[myhost:123]:src" &&
253 git url-parse "user@[myhost:123]:src"
254 '
255
256 test_expect_success 'git url-parse -c host -- scp+IPv6' '
257 test "[::1]" = "$(git url-parse -c host "[::1]:repository/path")" &&
258 test "[::1]" = "$(git url-parse -c host "user@[::1]:repository/path")" &&
259 test "[2001:db8::1]" = "$(git url-parse -c host "[2001:db8::1]:repo")"
260 '
261
262 test_expect_success 'git url-parse -c path -- scp+IPv6' '
263 test "/repository/path" = "$(git url-parse -c path "[::1]:/repository/path")" &&
264 test "/repository/path" = "$(git url-parse -c path "[::1]:repository/path")" &&
265 test "/repo" = "$(git url-parse -c path "[2001:db8::1]:repo")"
266 '
267
268 test_expect_success 'git url-parse -c host,port,path -- scp [host:port]:src' '
269 test myhost = "$(git url-parse -c host "[myhost:123]:src")" &&
270 test 123 = "$(git url-parse -c port "[myhost:123]:src")" &&
271 test "/src" = "$(git url-parse -c path "[myhost:123]:src")"
272 '
273
274 test_expect_success 'git url-parse -c host,path -- scp [host]:src' '
275 test myhost = "$(git url-parse -c host "[myhost]:src")" &&
276 test "/src" = "$(git url-parse -c path "[myhost]:src")"
277 '
278
279 test_expect_success 'git url-parse -c user -- scp with user@ and brackets' '
280 test user = "$(git url-parse -c user "user@[::1]:repo")" &&
281 test user = "$(git url-parse -c user "user@[myhost:123]:src")" &&
282 test user = "$(git url-parse -c user "user@[myhost]:src")"
283 '
284
285 test_expect_success 'git url-parse -- scp+IPv6 with username expansion' '
286 test "~user/repo" = "$(git url-parse -c path "[::1]:~user/repo")" &&
287 test "~user/repo" = "$(git url-parse -c path "user@[::1]:~user/repo")"
288 '
289
290 test_expect_success 'git url-parse fails on invalid URL' '
291 test_must_fail git url-parse "not a url"
292 '
293
294 test_expect_success 'git url-parse helpful error for absolute local path' '
295 test_must_fail git url-parse "/abs/path" 2>err &&
296 test_grep "is not a URL" err &&
297 test_grep "file:///" err
298 '
299
300 test_expect_success 'git url-parse helpful error for relative local path' '
301 test_must_fail git url-parse "./rel" 2>err &&
302 test_grep "is not a URL" err &&
303 test_grep "absolute path" err
304 '
305
306 test_expect_success 'git url-parse fails on unknown -c component name' '
307 test_must_fail git url-parse -c bogus "https://example.com/repo"
308 '
309
310 test_expect_success 'git url-parse fails on URL missing host' '
311 test_must_fail git url-parse "https://"
312 '
313
314 test_expect_success 'git url-parse with no URL prints usage' '
315 test_must_fail git url-parse 2>err &&
316 test_grep "usage:" err
317 '
318
319 test_done