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