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