1 package org.eclipse.aether.internal.impl;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.junit.Assert.*;
23
24 import java.util.Arrays;
25 import java.util.Collections;
26 import java.util.List;
27
28 import org.eclipse.aether.DefaultRepositorySystemSession;
29 import org.eclipse.aether.RepositorySystemSession;
30 import org.eclipse.aether.impl.UpdatePolicyAnalyzer;
31 import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager;
32 import org.eclipse.aether.internal.test.util.TestLoggerFactory;
33 import org.eclipse.aether.internal.test.util.TestUtils;
34 import org.eclipse.aether.repository.MirrorSelector;
35 import org.eclipse.aether.repository.Proxy;
36 import org.eclipse.aether.repository.ProxySelector;
37 import org.eclipse.aether.repository.RemoteRepository;
38 import org.eclipse.aether.repository.RepositoryPolicy;
39 import org.eclipse.aether.util.repository.AuthenticationBuilder;
40 import org.junit.After;
41 import org.junit.Before;
42 import org.junit.Test;
43
44
45
46
47 public class DefaultRemoteRepositoryManagerTest
48 {
49
50 private DefaultRepositorySystemSession session;
51
52 private DefaultRemoteRepositoryManager manager;
53
54 @Before
55 public void setup()
56 throws Exception
57 {
58 session = TestUtils.newSession();
59 session.setChecksumPolicy( null );
60 session.setUpdatePolicy( null );
61 manager = new DefaultRemoteRepositoryManager();
62 manager.setUpdatePolicyAnalyzer( new StubUpdatePolicyAnalyzer() );
63 manager.setChecksumPolicyProvider( new DefaultChecksumPolicyProvider() );
64 manager.setLoggerFactory( new TestLoggerFactory() );
65 }
66
67 @After
68 public void teardown()
69 throws Exception
70 {
71 manager = null;
72 session = null;
73 }
74
75 private RemoteRepository.Builder newRepo( String id, String url, boolean enabled, String updates, String checksums )
76 {
77 RepositoryPolicy policy = new RepositoryPolicy( enabled, updates, checksums );
78 return new RemoteRepository.Builder( id, "test", url ).setPolicy( policy );
79 }
80
81 private void assertEqual( RemoteRepository expected, RemoteRepository actual )
82 {
83 assertEquals( "id", expected.getId(), actual.getId() );
84 assertEquals( "url", expected.getUrl(), actual.getUrl() );
85 assertEquals( "type", expected.getContentType(), actual.getContentType() );
86 assertEqual( expected.getPolicy( false ), actual.getPolicy( false ) );
87 assertEqual( expected.getPolicy( true ), actual.getPolicy( true ) );
88 }
89
90 private void assertEqual( RepositoryPolicy expected, RepositoryPolicy actual )
91 {
92 assertEquals( "enabled", expected.isEnabled(), actual.isEnabled() );
93 assertEquals( "checksums", expected.getChecksumPolicy(), actual.getChecksumPolicy() );
94 assertEquals( "updates", expected.getUpdatePolicy(), actual.getUpdatePolicy() );
95 }
96
97 @Test
98 public void testGetPolicy()
99 {
100 RepositoryPolicy snapshotPolicy =
101 new RepositoryPolicy( true, RepositoryPolicy.UPDATE_POLICY_ALWAYS, RepositoryPolicy.CHECKSUM_POLICY_IGNORE );
102 RepositoryPolicy releasePolicy =
103 new RepositoryPolicy( true, RepositoryPolicy.UPDATE_POLICY_NEVER, RepositoryPolicy.CHECKSUM_POLICY_FAIL );
104
105 RemoteRepository repo = new RemoteRepository.Builder( "id", "type", "http://localhost" ) //
106 .setSnapshotPolicy( snapshotPolicy ).setReleasePolicy( releasePolicy ).build();
107
108 RepositoryPolicy effectivePolicy = manager.getPolicy( session, repo, true, true );
109 assertEquals( true, effectivePolicy.isEnabled() );
110 assertEquals( RepositoryPolicy.CHECKSUM_POLICY_IGNORE, effectivePolicy.getChecksumPolicy() );
111 assertEquals( RepositoryPolicy.UPDATE_POLICY_ALWAYS, effectivePolicy.getUpdatePolicy() );
112 }
113
114 @Test
115 public void testAggregateSimpleRepos()
116 {
117 RemoteRepository dominant1 = newRepo( "a", "file://", false, "", "" ).build();
118
119 RemoteRepository recessive1 = newRepo( "a", "http://", true, "", "" ).build();
120 RemoteRepository recessive2 = newRepo( "b", "file://", true, "", "" ).build();
121
122 List<RemoteRepository> result =
123 manager.aggregateRepositories( session, Arrays.asList( dominant1 ),
124 Arrays.asList( recessive1, recessive2 ), false );
125
126 assertEquals( 2, result.size() );
127 assertEqual( dominant1, result.get( 0 ) );
128 assertEqual( recessive2, result.get( 1 ) );
129 }
130
131 @Test
132 public void testAggregateSimpleRepos_MustKeepDisabledRecessiveRepo()
133 {
134 RemoteRepository dominant = newRepo( "a", "file://", true, "", "" ).build();
135
136 RemoteRepository recessive1 = newRepo( "b", "http://", false, "", "" ).build();
137
138 List<RemoteRepository> result =
139 manager.aggregateRepositories( session, Arrays.asList( dominant ), Arrays.asList( recessive1 ), false );
140
141 RemoteRepository recessive2 = newRepo( recessive1.getId(), "http://", true, "", "" ).build();
142
143 result = manager.aggregateRepositories( session, result, Arrays.asList( recessive2 ), false );
144
145 assertEquals( 2, result.size() );
146 assertEqual( dominant, result.get( 0 ) );
147 assertEqual( recessive1, result.get( 1 ) );
148 }
149
150 @Test
151 public void testAggregateMirrorRepos_DominantMirrorComplete()
152 {
153 RemoteRepository dominant1 = newRepo( "a", "http://", false, "", "" ).build();
154 RemoteRepository dominantMirror1 =
155 newRepo( "x", "file://", false, "", "" ).addMirroredRepository( dominant1 ).build();
156
157 RemoteRepository recessive1 = newRepo( "a", "https://", true, "", "" ).build();
158 RemoteRepository recessiveMirror1 =
159 newRepo( "x", "http://", true, "", "" ).addMirroredRepository( recessive1 ).build();
160
161 List<RemoteRepository> result =
162 manager.aggregateRepositories( session, Arrays.asList( dominantMirror1 ),
163 Arrays.asList( recessiveMirror1 ), false );
164
165 assertEquals( 1, result.size() );
166 assertEqual( dominantMirror1, result.get( 0 ) );
167 assertEquals( 1, result.get( 0 ).getMirroredRepositories().size() );
168 assertEquals( dominant1, result.get( 0 ).getMirroredRepositories().get( 0 ) );
169 }
170
171 @Test
172 public void testAggregateMirrorRepos_DominantMirrorIncomplete()
173 {
174 RemoteRepository dominant1 = newRepo( "a", "http://", false, "", "" ).build();
175 RemoteRepository dominantMirror1 =
176 newRepo( "x", "file://", false, "", "" ).addMirroredRepository( dominant1 ).build();
177
178 RemoteRepository recessive1 = newRepo( "a", "https://", true, "", "" ).build();
179 RemoteRepository recessive2 = newRepo( "b", "https://", true, "", "" ).build();
180 RemoteRepository recessiveMirror1 =
181 newRepo( "x", "http://", true, "", "" ).setMirroredRepositories( Arrays.asList( recessive1, recessive2 ) ).build();
182
183 List<RemoteRepository> result =
184 manager.aggregateRepositories( session, Arrays.asList( dominantMirror1 ),
185 Arrays.asList( recessiveMirror1 ), false );
186
187 assertEquals( 1, result.size() );
188 assertEqual( newRepo( "x", "file://", true, "", "" ).build(), result.get( 0 ) );
189 assertEquals( 2, result.get( 0 ).getMirroredRepositories().size() );
190 assertEquals( dominant1, result.get( 0 ).getMirroredRepositories().get( 0 ) );
191 assertEquals( recessive2, result.get( 0 ).getMirroredRepositories().get( 1 ) );
192 }
193
194 @Test
195 public void testMirrorAuthentication()
196 {
197 final RemoteRepository repo = newRepo( "a", "http://", true, "", "" ).build();
198 final RemoteRepository mirror =
199 newRepo( "a", "http://", true, "", "" ).setAuthentication( new AuthenticationBuilder().addUsername( "test" ).build() ).build();
200 session.setMirrorSelector( new MirrorSelector()
201 {
202 public RemoteRepository getMirror( RemoteRepository repository )
203 {
204 return mirror;
205 }
206 } );
207
208 List<RemoteRepository> result =
209 manager.aggregateRepositories( session, Collections.<RemoteRepository> emptyList(), Arrays.asList( repo ),
210 true );
211
212 assertEquals( 1, result.size() );
213 assertSame( mirror.getAuthentication(), result.get( 0 ).getAuthentication() );
214 }
215
216 @Test
217 public void testMirrorProxy()
218 {
219 final RemoteRepository repo = newRepo( "a", "http://", true, "", "" ).build();
220 final RemoteRepository mirror =
221 newRepo( "a", "http://", true, "", "" ).setProxy( new Proxy( "http", "host", 2011, null ) ).build();
222 session.setMirrorSelector( new MirrorSelector()
223 {
224 public RemoteRepository getMirror( RemoteRepository repository )
225 {
226 return mirror;
227 }
228 } );
229
230 List<RemoteRepository> result =
231 manager.aggregateRepositories( session, Collections.<RemoteRepository> emptyList(), Arrays.asList( repo ),
232 true );
233
234 assertEquals( 1, result.size() );
235 assertEquals( "http", result.get( 0 ).getProxy().getType() );
236 assertEquals( "host", result.get( 0 ).getProxy().getHost() );
237 assertEquals( 2011, result.get( 0 ).getProxy().getPort() );
238 }
239
240 @Test
241 public void testProxySelector()
242 {
243 final RemoteRepository repo = newRepo( "a", "http://", true, "", "" ).build();
244 final Proxy proxy = new Proxy( "http", "host", 2011, null );
245 session.setProxySelector( new ProxySelector()
246 {
247 public Proxy getProxy( RemoteRepository repository )
248 {
249 return proxy;
250 }
251 } );
252 session.setMirrorSelector( new MirrorSelector()
253 {
254 public RemoteRepository getMirror( RemoteRepository repository )
255 {
256 return null;
257 }
258 } );
259
260 List<RemoteRepository> result =
261 manager.aggregateRepositories( session, Collections.<RemoteRepository> emptyList(), Arrays.asList( repo ),
262 true );
263
264 assertEquals( 1, result.size() );
265 assertEquals( "http", result.get( 0 ).getProxy().getType() );
266 assertEquals( "host", result.get( 0 ).getProxy().getHost() );
267 assertEquals( 2011, result.get( 0 ).getProxy().getPort() );
268 }
269
270 private static class StubUpdatePolicyAnalyzer
271 implements UpdatePolicyAnalyzer
272 {
273
274 public String getEffectiveUpdatePolicy( RepositorySystemSession session, String policy1, String policy2 )
275 {
276 return ordinalOfUpdatePolicy( policy1 ) < ordinalOfUpdatePolicy( policy2 ) ? policy1 : policy2;
277 }
278
279 private int ordinalOfUpdatePolicy( String policy )
280 {
281 if ( RepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
282 {
283 return 1440;
284 }
285 else if ( RepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
286 {
287 return 0;
288 }
289 else if ( policy != null && policy.startsWith( RepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
290 {
291 String s = policy.substring( RepositoryPolicy.UPDATE_POLICY_INTERVAL.length() + 1 );
292 return Integer.valueOf( s );
293 }
294 else
295 {
296
297 return Integer.MAX_VALUE;
298 }
299 }
300
301 public boolean isUpdatedRequired( RepositorySystemSession session, long lastModified, String policy )
302 {
303 return false;
304 }
305
306 }
307
308 }