1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.repository;
20
21 import java.util.Arrays;
22 import java.util.List;
23
24 import org.apache.maven.artifact.repository.ArtifactRepository;
25 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
26 import org.apache.maven.repository.legacy.repository.ArtifactRepositoryFactory;
27 import org.apache.maven.settings.Mirror;
28 import org.codehaus.plexus.PlexusTestCase;
29
30 public class MirrorProcessorTest extends PlexusTestCase {
31 private DefaultMirrorSelector mirrorSelector;
32 private ArtifactRepositoryFactory repositorySystem;
33
34 protected void setUp() throws Exception {
35 mirrorSelector = (DefaultMirrorSelector) lookup(MirrorSelector.class);
36 repositorySystem = lookup(ArtifactRepositoryFactory.class);
37 }
38
39 @Override
40 protected void tearDown() throws Exception {
41 mirrorSelector = null;
42 repositorySystem = null;
43
44 super.tearDown();
45 }
46
47 public void testExternalURL() {
48 assertTrue(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "http://somehost")));
49 assertTrue(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "http://somehost:9090/somepath")));
50 assertTrue(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "ftp://somehost")));
51 assertTrue(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "http://192.168.101.1")));
52 assertTrue(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "http://")));
53
54 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "http://localhost:8080")));
55 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "http://127.0.0.1:9090")));
56 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "file://localhost/somepath")));
57 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "file://localhost/D:/somepath")));
58 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "http://localhost")));
59 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "http://127.0.0.1")));
60 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "file:///somepath")));
61 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "file://D:/somepath")));
62
63
64 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "192.168.101.1")));
65 assertFalse(DefaultMirrorSelector.isExternalRepo(getRepo("foo", "")));
66 }
67
68 public void testMirrorLookup() {
69 Mirror mirrorA = newMirror("a", "a", "http://a");
70 Mirror mirrorB = newMirror("b", "b", "http://b");
71
72 List<Mirror> mirrors = Arrays.asList(mirrorA, mirrorB);
73
74 assertSame(mirrorA, mirrorSelector.getMirror(getRepo("a", "http://a.a"), mirrors));
75
76 assertSame(mirrorB, mirrorSelector.getMirror(getRepo("b", "http://a.a"), mirrors));
77
78 assertNull(mirrorSelector.getMirror(getRepo("c", "http://c.c"), mirrors));
79 }
80
81 public void testMirrorWildcardLookup() {
82 Mirror mirrorA = newMirror("a", "a", "http://a");
83 Mirror mirrorB = newMirror("b", "b", "http://b");
84 Mirror mirrorC = newMirror("c", "*", "http://wildcard");
85
86 List<Mirror> mirrors = Arrays.asList(mirrorA, mirrorB, mirrorC);
87
88 assertSame(mirrorA, mirrorSelector.getMirror(getRepo("a", "http://a.a"), mirrors));
89
90 assertSame(mirrorB, mirrorSelector.getMirror(getRepo("b", "http://a.a"), mirrors));
91
92 assertSame(mirrorC, mirrorSelector.getMirror(getRepo("c", "http://c.c"), mirrors));
93 }
94
95 public void testMirrorStopOnFirstMatch() {
96
97 Mirror mirrorA2 = newMirror("a2", "a,b", "http://a2");
98 Mirror mirrorA = newMirror("a", "a", "http://a");
99
100 Mirror mirrorA3 = newMirror("a", "a", "http://a3");
101
102 Mirror mirrorB = newMirror("b", "b", "http://b");
103 Mirror mirrorC = newMirror("c", "d,e", "http://de");
104 Mirror mirrorC2 = newMirror("c", "*", "http://wildcard");
105 Mirror mirrorC3 = newMirror("c", "e,f", "http://ef");
106
107 List<Mirror> mirrors = Arrays.asList(mirrorA2, mirrorA, mirrorA3, mirrorB, mirrorC, mirrorC2, mirrorC3);
108
109 assertSame(mirrorA, mirrorSelector.getMirror(getRepo("a", "http://a.a"), mirrors));
110
111 assertSame(mirrorB, mirrorSelector.getMirror(getRepo("b", "http://a.a"), mirrors));
112
113 assertSame(mirrorC2, mirrorSelector.getMirror(getRepo("c", "http://c.c"), mirrors));
114
115 assertSame(mirrorC, mirrorSelector.getMirror(getRepo("d", "http://d"), mirrors));
116
117 assertSame(mirrorC, mirrorSelector.getMirror(getRepo("e", "http://e"), mirrors));
118
119 assertSame(mirrorC2, mirrorSelector.getMirror(getRepo("f", "http://f"), mirrors));
120 }
121
122 public void testPatterns() {
123 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "*"));
124 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "*,"));
125 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), ",*,"));
126 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "*,"));
127
128 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "a"));
129 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "a,"));
130 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), ",a,"));
131 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "a,"));
132
133 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("b"), "a"));
134 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("b"), "a,"));
135 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("b"), ",a"));
136 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("b"), ",a,"));
137
138 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "a,b"));
139 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("b"), "a,b"));
140
141 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("c"), "a,b"));
142
143 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "*"));
144 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "*,b"));
145 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a"), "*,!b"));
146
147 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("a"), "*,!a"));
148 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("a"), "!a,*"));
149
150 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("c"), "*,!a"));
151 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("c"), "!a,*"));
152
153 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("c"), "!a,!c"));
154 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("d"), "!a,!c*"));
155 }
156
157 public void testPatternsWithExternal() {
158 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a", "http://localhost"), "*"));
159 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("a", "http://localhost"), "external:*"));
160
161 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a", "http://localhost"), "external:*,a"));
162 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("a", "http://localhost"), "external:*,!a"));
163 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("a", "http://localhost"), "a,external:*"));
164 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("a", "http://localhost"), "!a,external:*"));
165
166 assertFalse(DefaultMirrorSelector.matchPattern(getRepo("c", "http://localhost"), "!a,external:*"));
167 assertTrue(DefaultMirrorSelector.matchPattern(getRepo("c", "http://somehost"), "!a,external:*"));
168 }
169
170 public void testLayoutPattern() {
171 assertTrue(DefaultMirrorSelector.matchesLayout("default", null));
172 assertTrue(DefaultMirrorSelector.matchesLayout("default", ""));
173 assertTrue(DefaultMirrorSelector.matchesLayout("default", "*"));
174
175 assertTrue(DefaultMirrorSelector.matchesLayout("default", "default"));
176 assertFalse(DefaultMirrorSelector.matchesLayout("default", "legacy"));
177
178 assertTrue(DefaultMirrorSelector.matchesLayout("default", "legacy,default"));
179 assertTrue(DefaultMirrorSelector.matchesLayout("default", "default,legacy"));
180
181 assertFalse(DefaultMirrorSelector.matchesLayout("default", "legacy,!default"));
182 assertFalse(DefaultMirrorSelector.matchesLayout("default", "!default,legacy"));
183
184 assertFalse(DefaultMirrorSelector.matchesLayout("default", "*,!default"));
185 assertFalse(DefaultMirrorSelector.matchesLayout("default", "!default,*"));
186 }
187
188 public void testMirrorLayoutConsideredForMatching() {
189 ArtifactRepository repo = getRepo("a");
190
191 Mirror mirrorA = newMirror("a", "a", null, "http://a");
192 Mirror mirrorB = newMirror("b", "a", "p2", "http://b");
193
194 Mirror mirrorC = newMirror("c", "*", null, "http://c");
195 Mirror mirrorD = newMirror("d", "*", "p2", "http://d");
196
197 assertSame(mirrorA, mirrorSelector.getMirror(repo, Arrays.asList(mirrorA)));
198 assertNull(mirrorSelector.getMirror(repo, Arrays.asList(mirrorB)));
199
200 assertSame(mirrorC, mirrorSelector.getMirror(repo, Arrays.asList(mirrorC)));
201 assertNull(mirrorSelector.getMirror(repo, Arrays.asList(mirrorD)));
202 }
203
204
205
206
207
208
209
210
211 private ArtifactRepository getRepo(String id, String url) {
212 return repositorySystem.createArtifactRepository(id, url, new DefaultRepositoryLayout(), null, null);
213 }
214
215
216
217
218
219
220
221 private ArtifactRepository getRepo(String id) {
222 return getRepo(id, "http://something");
223 }
224
225 private Mirror newMirror(String id, String mirrorOf, String url) {
226 return newMirror(id, mirrorOf, null, url);
227 }
228
229 private Mirror newMirror(String id, String mirrorOf, String layouts, String url) {
230 Mirror mirror = new Mirror();
231
232 mirror.setId(id);
233 mirror.setMirrorOf(mirrorOf);
234 mirror.setMirrorOfLayouts(layouts);
235 mirror.setUrl(url);
236
237 return mirror;
238 }
239 }