1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.scm.provider.git.repository;
20
21 import org.apache.maven.scm.ScmTestCase;
22 import org.apache.maven.scm.manager.NoSuchScmProviderException;
23 import org.apache.maven.scm.manager.ScmManager;
24 import org.apache.maven.scm.repository.ScmRepository;
25 import org.apache.maven.scm.repository.ScmRepositoryException;
26 import org.junit.Before;
27 import org.junit.Ignore;
28 import org.junit.Test;
29
30 import static org.junit.Assert.assertEquals;
31 import static org.junit.Assert.assertNotNull;
32 import static org.junit.Assert.assertTrue;
33 import static org.junit.Assert.fail;
34
35
36
37
38
39 public class GitScmProviderRepositoryTest extends ScmTestCase {
40 private ScmManager scmManager;
41
42 @Before
43 @Override
44 public void setUp() throws Exception {
45 super.setUp();
46
47 scmManager = getScmManager();
48 }
49
50
51
52
53
54 @Test
55 public void testLegalFileURL() throws Exception {
56 testUrl("scm:git:file:///tmp/repo", null, "file:///tmp/repo", null, null, null, null, 0, null);
57 }
58
59 @Test
60 public void testLegalFileHomeURL() throws Exception {
61 testUrl("scm:git:file://~/repo", null, "file://~/repo", null, null, null, null, 0, null);
62 }
63
64 @Test
65 public void testLegalSshHomeURL() throws Exception {
66 testUrl("scm:git:ssh://~/repo", null, "ssh://~/repo", null, null, null, null, 0, null);
67 }
68
69 @Test
70 public void testLegalLocalhostFileURL() throws Exception {
71 testUrl(
72 "scm:git:file://somedirectory/tmp/repo",
73 null,
74 "file://somedirectory/tmp/repo",
75 null,
76 null,
77 null,
78 null,
79 0,
80 "somedirectory/tmp/repo");
81 }
82
83 @Test
84 public void testLegalHistnameFileURL() throws Exception {
85 testUrl(
86 "scm:git:file://my_server/tmp/repo",
87 null,
88 "file://my_server/tmp/repo",
89 null,
90 null,
91 null,
92 null,
93 0,
94 "my_server/tmp/repo");
95 }
96
97 @Test
98 public void testLegalHttpURL() throws Exception {
99 testUrl(
100 "scm:git:http://gitrepos.apache.org",
101 null,
102 "http://gitrepos.apache.org",
103 null,
104 null,
105 null,
106 "gitrepos.apache.org",
107 0,
108 null);
109 }
110
111 @Test
112 public void testLegalHttpURLWithUser() throws Exception {
113 testUrl(
114 "scm:git:http://user@gitrepos.apache.org",
115 null,
116 "http://user@gitrepos.apache.org",
117 null,
118 "user",
119 null,
120 "gitrepos.apache.org",
121 0,
122 null);
123 }
124
125 @Test
126 public void testLegalHttpURLWithUserPassword() throws Exception {
127 testUrl(
128 "scm:git:http://user:password@gitrepos.apache.org",
129 null,
130 "http://user:password@gitrepos.apache.org",
131 null,
132 "user",
133 "password",
134 "gitrepos.apache.org",
135 0,
136 null);
137 }
138
139 @Test
140 public void testLegalHttpsURL() throws Exception {
141 testUrl(
142 "scm:git:https://gitrepos.apache.org/repos/projectA",
143 null,
144 "https://gitrepos.apache.org/repos/projectA",
145 null,
146 null,
147 null,
148 "gitrepos.apache.org",
149 0,
150 "repos/projectA");
151 }
152
153 @Test
154 public void testLegalFileWindowsURL() throws Exception {
155
156 testUrl("scm:git:file://c:\\tmp\\repo", null, "file://c:\\tmp\\repo", null, null, null, null, 0, null);
157 }
158
159 @Test
160 public void testLegalHttpsURLWithUser() throws Exception {
161 testUrl(
162 "scm:git:https://user@gitrepos.apache.org",
163 null,
164 "https://user@gitrepos.apache.org",
165 null,
166 "user",
167 null,
168 "gitrepos.apache.org",
169 0,
170 null);
171 }
172
173 @Test
174 public void testLegalHttpsURLWithUserPassword() throws Exception {
175 testUrl(
176 "scm:git:https://user:password@gitrepos.apache.org",
177 null,
178 "https://user:password@gitrepos.apache.org",
179 null,
180 "user",
181 "password",
182 "gitrepos.apache.org",
183 0,
184 null);
185 }
186
187 @Test
188 public void testLegalSshURLWithUser() throws Exception {
189 testUrl(
190 "scm:git:ssh://user@gitrepos.apache.org",
191 null,
192 "ssh://user@gitrepos.apache.org",
193 null,
194 "user",
195 null,
196 "gitrepos.apache.org",
197 0,
198 null);
199 }
200
201 @Test
202 public void testLegalSshURLWithUserPassword() throws Exception {
203 testUrl(
204 "scm:git:ssh://user:password@gitrepos.apache.org",
205 null,
206 "ssh://user:password@gitrepos.apache.org",
207 null,
208 "user",
209 "password",
210 "gitrepos.apache.org",
211 0,
212 null);
213 }
214
215 @Test
216 public void testLegalGitURL() throws Exception {
217 testUrl(
218 "scm:git:git://gitrepos.apache.org",
219 null,
220 "git://gitrepos.apache.org",
221 null,
222 null,
223 null,
224 "gitrepos.apache.org",
225 0,
226 null);
227 }
228
229 @Test
230 public void testGitDevURL() throws Exception, ScmRepositoryException {
231 testUrl(
232 "scm:git:git@github.com:olamy/scm-git-test-one-module.git",
233 null,
234 "git@github.com:olamy/scm-git-test-one-module.git",
235 null,
236 "git",
237 null,
238 "github.com",
239 0,
240 null);
241 }
242
243 @Test
244 public void testGitDevURLWIthPort() throws Exception, ScmRepositoryException {
245 testUrl(
246 "scm:git:git@github.com:222:olamy/scm-git-test-one-module.git",
247 null,
248 "git@github.com:222:olamy/scm-git-test-one-module.git",
249 null,
250 "git",
251 null,
252 "github.com",
253 222,
254 null);
255 }
256
257
258 @Test
259 public void testGitDevUrlWithNumberedRepoAndNoPort() throws Exception, ScmRepositoryException {
260 testUrl(
261 "scm:git:git@github.com:4sh/blah.git",
262 null,
263 "git@github.com:4sh/blah.git",
264 null,
265 "git",
266 null,
267 "github.com",
268 0,
269 null);
270 }
271
272
273 @Test
274 public void testGitDevUrlWithNumberedRepoAndMinus() throws Exception, ScmRepositoryException {
275 testUrl(
276 "scm:git:ssh://git@github.com/360-Innovations/FJPAQuery.git",
277 null,
278 "ssh://git@github.com/360-Innovations/FJPAQuery.git",
279 null,
280 "git",
281 null,
282 "github.com",
283 0,
284 null);
285 }
286
287
288 @Test
289 public void testSpecialCharacters() throws Exception {
290 testUrl(
291 "scm:git:http://gitrepos.apache.org",
292 "@_&_:_?_#_%20",
293 "pass word",
294 null,
295 "http://gitrepos.apache.org",
296 null,
297 "http://%40_&_:_%3F_%23_%2520:pass%20word@gitrepos.apache.org",
298 null,
299 "gitrepos.apache.org",
300 0,
301 null);
302
303 testUrl(
304 "scm:git:http://gitrepos.apache.org",
305 "user name",
306 "@_&_:_?_#_%20",
307 null,
308 "http://gitrepos.apache.org",
309 null,
310 "http://user%20name:%40_&_:_%3F_%23_%2520@gitrepos.apache.org",
311 null,
312 "gitrepos.apache.org",
313 0,
314 null);
315 }
316
317 @Test
318 public void testLegalGitPortUrl() throws Exception {
319 testUrl(
320 "scm:git:http://username@gitrepos.apache.org:8800/pmgt/trunk",
321 null,
322 "http://username@gitrepos.apache.org:8800/pmgt/trunk",
323 null,
324 "username",
325 null,
326 "gitrepos.apache.org",
327 8800,
328 null);
329
330 testUrl(
331 "scm:git:https://username@gitrepos.apache.org:20443/pmgt/trunk",
332 null,
333 "https://username@gitrepos.apache.org:20443/pmgt/trunk",
334 null,
335 "username",
336 null,
337 "gitrepos.apache.org",
338 20443,
339 null);
340
341 testUrl(
342 "scm:git:git://username@gitrepos.apache.org:8800/pmgt/trunk",
343 null,
344 "git://username@gitrepos.apache.org:8800/pmgt/trunk",
345 null,
346 "username",
347 null,
348 "gitrepos.apache.org",
349 8800,
350 null);
351
352 testUrl(
353 "scm:git:ssh://username@gitrepos.apache.org:8080/pmgt/trunk",
354 null,
355 "ssh://username@gitrepos.apache.org:8080/pmgt/trunk",
356 null,
357 "username",
358 null,
359 "gitrepos.apache.org",
360 8080,
361 null);
362
363 testUrl(
364 "scm:git:ssh://username:password@gitrepos.apache.org/pmgt/trunk",
365 null,
366 "ssh://username:password@gitrepos.apache.org/pmgt/trunk",
367 null,
368 "username",
369 "password",
370 "gitrepos.apache.org",
371 0,
372 null);
373 }
374
375 @Test
376 public void testUsernameWithAtAndPasswordInUrl() throws ScmRepositoryException, Exception {
377 testUrl(
378 "scm:git:http://username@site.com:password@gitrepos.apache.org:8800/pmgt/trunk",
379 null,
380 "http://username%40site.com:password@gitrepos.apache.org:8800/pmgt/trunk",
381 null,
382 "username@site.com",
383 "password",
384 "gitrepos.apache.org",
385 8800,
386 null);
387 }
388
389
390
391
392
393 @Test
394 public void testHttpFetchSshPushUrl() throws Exception {
395 testUrl(
396 "scm:git:[fetch=]http://git.apache.org/myprj.git[push=]ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git",
397 "[fetch=]http://myuser:mypassword@git.apache.org/myprj.git[push=]ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git",
398 "http://myuser:mypassword@git.apache.org/myprj.git",
399 "ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git",
400 "myuser",
401 "mypassword",
402 "git.apache.org",
403 0,
404 null);
405
406 testUrl(
407 "scm:git:[push=]ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git[fetch=]http://git.apache.org/myprj.git",
408 "[fetch=]http://myuser:mypassword@git.apache.org/myprj.git[push=]ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git",
409 "http://myuser:mypassword@git.apache.org/myprj.git",
410 "ssh://myuser:mypassword@git.apache.org/~/myrepo/myprj.git",
411 "myuser",
412 "mypassword",
413 "git.apache.org",
414 0,
415 null);
416 }
417
418
419
420
421
422
423
424 @Test
425 @Ignore
426 public void nottestIllegalFileUrl() throws Exception {
427 testIllegalUrl("file:/tmp/git");
428 }
429
430
431
432
433
434 private GitScmProviderRepository testUrl(
435 String scmUrl,
436 String expectedToString,
437 String expectedFetchUrl,
438 String expectedPushUrl,
439 String expectedUser,
440 String expectedPassword,
441 String expectedHost,
442 int expectedPort,
443 String expectedPath)
444 throws Exception, ScmRepositoryException {
445
446 ScmRepository repository = testScmRepository(scmUrl, expectedToString, expectedFetchUrl);
447
448 GitScmProviderRepository providerRepository = (GitScmProviderRepository) repository.getProviderRepository();
449
450 return testScmProviderRepository(
451 expectedToString,
452 expectedFetchUrl,
453 expectedPushUrl,
454 expectedUser,
455 expectedPassword,
456 expectedHost,
457 expectedPort,
458 providerRepository);
459 }
460
461 private GitScmProviderRepository testUrl(
462 String scmUrl,
463 String username,
464 String password,
465 String expectedScmRepositoryToString,
466 String expectedScmRepositoryFetchUrl,
467 String expectedScmProviderRepositoryToString,
468 String expectedScmProviderRepositoryFetchUrl,
469 String expectedPushUrl,
470 String expectedHost,
471 int expectedPort,
472 String expectedPath)
473 throws Exception, ScmRepositoryException {
474
475 ScmRepository repository =
476 testScmRepository(scmUrl, expectedScmRepositoryToString, expectedScmRepositoryFetchUrl);
477
478 GitScmProviderRepository providerRepository = (GitScmProviderRepository) repository.getProviderRepository();
479
480 providerRepository.setUser(username);
481
482 providerRepository.setPassword(password);
483
484 return testScmProviderRepository(
485 expectedScmProviderRepositoryToString,
486 expectedScmProviderRepositoryFetchUrl,
487 expectedPushUrl,
488 username,
489 password,
490 expectedHost,
491 expectedPort,
492 providerRepository);
493 }
494
495 private GitScmProviderRepository testScmProviderRepository(
496 String expectedToString,
497 String expectedFetchUrl,
498 String expectedPushUrl,
499 String expectedUser,
500 String expectedPassword,
501 String expectedHost,
502 int expectedPort,
503 GitScmProviderRepository providerRepository) {
504 assertEquals("fetch url is incorrect", expectedFetchUrl, providerRepository.getFetchUrl());
505
506 if (expectedPushUrl != null) {
507 assertEquals("push url is incorrect", expectedPushUrl, providerRepository.getPushUrl());
508 }
509
510 assertEquals("User is incorrect", expectedUser, providerRepository.getUser());
511
512 assertEquals("Password is incorrect", expectedPassword, providerRepository.getPassword());
513
514 assertEquals("Host is incorrect", expectedHost == null ? "" : expectedHost, providerRepository.getHost());
515
516 if (expectedPort > 0) {
517 assertEquals("Port is incorrect", expectedPort, providerRepository.getPort());
518 }
519
520 return providerRepository;
521 }
522
523 private ScmRepository testScmRepository(String scmUrl, String expectedToString, String expectedFetchUrl)
524 throws ScmRepositoryException, NoSuchScmProviderException {
525 ScmRepository repository = scmManager.makeScmRepository(scmUrl);
526
527 assertNotNull("ScmManager.makeScmRepository() returned null", repository);
528
529 assertNotNull("The provider repository was null.", repository.getProviderRepository());
530
531 assertTrue(
532 "The SCM Repository isn't a " + GitScmProviderRepository.class.getName() + ".",
533 repository.getProviderRepository() instanceof GitScmProviderRepository);
534
535 if (expectedToString != null) {
536 assertEquals("toString is incorrect", "git:" + expectedToString, repository.toString());
537 } else {
538 assertEquals("toString is incorrect", "git:" + expectedFetchUrl, repository.toString());
539 }
540
541 return repository;
542 }
543
544 private void testIllegalUrl(String url) throws Exception {
545 try {
546 scmManager.makeScmRepository("scm:git:" + url);
547
548 fail("Expected a ScmRepositoryException while testing the url '" + url + "'.");
549 } catch (ScmRepositoryException e) {
550
551 }
552 }
553
554 @Test
555 public void testGetParent() throws Exception {
556 new GitScmProviderRepository("http://gitrepos.apache.org");
557 }
558 }