]> source.dussan.org Git - archiva.git/blob
9819f7cc0e3288f755a94af835642c6b497983f9
[archiva.git] /
1 package org.apache.maven.archiva.proxy;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.commons.io.FileUtils;
23 import org.apache.commons.lang.StringUtils;
24 import org.apache.maven.archiva.model.ArtifactReference;
25 import org.apache.maven.archiva.policies.CachedFailuresPolicy;
26 import org.apache.maven.archiva.policies.ChecksumPolicy;
27 import org.apache.maven.archiva.policies.ReleasesPolicy;
28 import org.apache.maven.archiva.policies.SnapshotsPolicy;
29 import org.apache.maven.wagon.ResourceDoesNotExistException;
30
31 import java.io.File;
32
33 /**
34  * ManagedDefaultTransferTest
35  *
36  * @author Brett Porter
37  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
38  * @version $Id$
39  */
40 public class ManagedDefaultTransferTest
41     extends AbstractProxyTestCase
42 {
43     public void testGetDefaultLayoutNotPresent()
44         throws Exception
45     {
46         String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
47         setupTestableManagedRepository( path );
48
49         File expectedFile = new File( managedDefaultDir, path );
50         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
51
52         // Ensure file isn't present first.
53         assertNotExistsInManagedDefaultRepo( expectedFile );
54
55         // Configure Connector (usually done within archiva.xml configuration)
56         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
57                        CachedFailuresPolicy.NO );
58
59         // Attempt the proxy fetch.
60         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
61
62         File sourceFile = new File( REPOPATH_PROXIED1, path );
63         assertFileEquals( expectedFile, downloadedFile, sourceFile );
64         assertNoTempFiles( expectedFile );
65     }
66
67     /**
68      * The attempt here should result in no file being transferred.
69      * <p/>
70      * The file exists locally, and the policy is ONCE.
71      *
72      * @throws Exception
73      */
74     public void testGetDefaultLayoutAlreadyPresentPolicyOnce()
75         throws Exception
76     {
77         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
78         setupTestableManagedRepository( path );
79
80         File expectedFile = new File( managedDefaultDir, path );
81
82         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
83
84         assertTrue( expectedFile.exists() );
85
86         // Configure Connector (usually done within archiva.xml configuration)
87         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
88                        CachedFailuresPolicy.NO );
89
90         // Attempt the proxy fetch.
91         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
92
93         assertFileEquals( expectedFile, downloadedFile, expectedFile );
94         assertNoTempFiles( expectedFile );
95     }
96
97     /**
98      * <p>
99      * Request a file, that exists locally, and remotely.
100      * </p>
101      * <p>
102      * All policies are set to IGNORE.
103      * </p>
104      * <p>
105      * Managed file is newer than remote file.
106      * </p>
107      * <p>
108      * Transfer should not have occured, as managed file is newer.
109      * </p>
110      *
111      * @throws Exception
112      */
113     public void testGetDefaultLayoutAlreadyPresentNewerThanRemotePolicyIgnored()
114         throws Exception
115     {
116         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
117         setupTestableManagedRepository( path );
118
119         File expectedFile = new File( managedDefaultDir, path );
120         File remoteFile = new File( REPOPATH_PROXIED1, path );
121         
122         // Set the managed File to be newer than local.
123         setManagedNewerThanRemote( expectedFile, remoteFile );
124
125         long originalModificationTime = expectedFile.lastModified();
126         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
127
128         assertTrue( expectedFile.exists() );
129
130         // Configure Connector (usually done within archiva.xml configuration)
131         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
132                        SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO );
133
134         // Attempt the proxy fetch.
135         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
136
137         assertNotDownloaded( downloadedFile );
138         assertNotModified( expectedFile, originalModificationTime );
139         assertNoTempFiles( expectedFile );
140     }
141     
142     /**
143      * <p>
144      * Request a file, that exists locally, and remotely.
145      * </p>
146      * <p>
147      * All policies are set to IGNORE.
148      * </p>
149      * <p>
150      * Managed file is older than Remote file.
151      * </p>
152      * <p>
153      * Transfer should have occured, as managed file is older than remote.
154      * </p>
155      *
156      * @throws Exception
157      */
158     public void testGetDefaultLayoutAlreadyPresentOlderThanRemotePolicyIgnored()
159         throws Exception
160     {
161         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
162         setupTestableManagedRepository( path );
163
164         File expectedFile = new File( managedDefaultDir, path );
165         File remoteFile = new File( REPOPATH_PROXIED1, path );
166         
167         // Set the managed file to be newer than remote file.
168         setManagedOlderThanRemote( expectedFile, remoteFile );
169     
170         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
171
172         assertTrue( expectedFile.exists() );
173
174         // Configure Connector (usually done within archiva.xml configuration)
175         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
176                        SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO );
177
178         // Attempt the proxy fetch.
179         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
180
181         File proxiedFile = new File( REPOPATH_PROXIED1, path );
182         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
183         assertNoTempFiles( expectedFile );
184     }
185
186     /**
187      * The attempt here should result in file being transferred.
188      * <p/>
189      * The file exists locally, is over 6 years old, and the policy is DAILY.
190      *
191      * @throws Exception
192      */
193     public void testGetDefaultLayoutRemoteUpdate()
194         throws Exception
195     {
196         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
197         setupTestableManagedRepository( path );
198
199         File expectedFile = new File( managedDefaultDir, path );
200         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
201
202         assertTrue( expectedFile.exists() );
203         expectedFile.setLastModified( getPastDate().getTime() );
204
205         // Configure Connector (usually done within archiva.xml configuration)
206         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.DAILY, SnapshotsPolicy.DAILY,
207                        CachedFailuresPolicy.NO );
208
209         // Attempt the proxy fetch.
210         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
211
212         File proxiedFile = new File( REPOPATH_PROXIED1, path );
213         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
214         assertNoTempFiles( expectedFile );
215     }
216
217     public void testGetWhenInBothProxiedRepos()
218         throws Exception
219     {
220         String path = "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
221         setupTestableManagedRepository( path );
222
223         File expectedFile = new File( managedDefaultDir, path );
224         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
225
226         assertNotExistsInManagedDefaultRepo( expectedFile );
227
228         // Configure Connector (usually done within archiva.xml configuration)
229         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1 );
230         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2 );
231
232         // Attempt the proxy fetch.
233         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
234
235         File proxied1File = new File( REPOPATH_PROXIED1, path );
236         File proxied2File = new File( REPOPATH_PROXIED2, path );
237         assertFileEquals( expectedFile, downloadedFile, proxied1File );
238         assertNoTempFiles( expectedFile );
239
240         // TODO: is this check even needed if it passes above? 
241         String actualContents = FileUtils.readFileToString( downloadedFile, null );
242         String badContents = FileUtils.readFileToString( proxied2File, null );
243         assertFalse( "Downloaded file contents should not be that of proxy 2",
244                      StringUtils.equals( actualContents, badContents ) );
245     }
246
247     public void testGetInSecondProxiedRepo()
248         throws Exception
249     {
250         String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
251         setupTestableManagedRepository( path );
252
253         File expectedFile = new File( managedDefaultDir, path );
254         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
255
256         assertNotExistsInManagedDefaultRepo( expectedFile );
257
258         // Configure Connector (usually done within archiva.xml configuration)
259         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1 );
260         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2 );
261
262         // Attempt the proxy fetch.
263         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
264
265         File proxied2File = new File( REPOPATH_PROXIED2, path );
266         assertFileEquals( expectedFile, downloadedFile, proxied2File );
267         assertNoTempFiles( expectedFile );
268     }
269
270     public void testNotFoundInAnyProxies()
271         throws Exception
272     {
273         String path = "org/apache/maven/test/does-not-exist/1.0/does-not-exist-1.0.jar";
274         setupTestableManagedRepository( path );
275
276         File expectedFile = new File( managedDefaultDir, path );
277         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
278
279         assertNotExistsInManagedDefaultRepo( expectedFile );
280
281         // Configure Connector (usually done within archiva.xml configuration)
282         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1 );
283         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2 );
284         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED );
285
286         // Attempt the proxy fetch.
287         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
288
289         assertNull( "File returned was: " + downloadedFile + "; should have got a not found exception",
290                     downloadedFile );
291         assertNoTempFiles( expectedFile );
292     }
293
294     public void testGetInSecondProxiedRepoFirstFails()
295         throws Exception
296     {
297         String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
298         setupTestableManagedRepository( path );
299
300         File expectedFile = new File( managedDefaultDir, path );
301         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
302
303         assertNotExistsInManagedDefaultRepo( expectedFile );
304
305         // Configure Repository (usually done within archiva.xml configuration)
306         saveRemoteRepositoryConfig( "badproxied", "Bad Proxied", "test://bad.machine.com/repo/", "default" );
307
308         wagonMock.get( path, new File( expectedFile.getAbsolutePath() + ".tmp" ) );
309         wagonMockControl.setMatcher(customWagonGetMatcher);
310         wagonMockControl.setThrowable( new ResourceDoesNotExistException( "transfer failed" ) );
311         wagonMockControl.replay();
312
313         // Configure Connector (usually done within archiva.xml configuration)
314         saveConnector( ID_DEFAULT_MANAGED, "badproxied" );
315         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2 );
316
317         // Attempt the proxy fetch.
318         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
319
320         wagonMockControl.verify();
321
322         File proxied2File = new File( REPOPATH_PROXIED2, path );
323         assertFileEquals( expectedFile, downloadedFile, proxied2File );
324         assertNoTempFiles( expectedFile );
325     }
326
327     public void testGetAllRepositoriesFail()
328         throws Exception
329     {
330         String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
331         setupTestableManagedRepository( path );
332
333         File expectedFile = new File( managedDefaultDir.getAbsoluteFile(), path );
334         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
335
336         assertNotExistsInManagedDefaultRepo( expectedFile );
337
338         // Configure Repository (usually done within archiva.xml configuration)
339         saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
340         saveRemoteRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://dead.machine.com/repo/", "default" );
341
342         // Configure Connector (usually done within archiva.xml configuration)
343         saveConnector( ID_DEFAULT_MANAGED, "badproxied1" );
344         saveConnector( ID_DEFAULT_MANAGED, "badproxied2" );
345
346         File tmpFile = new File( expectedFile.getParentFile(), expectedFile.getName() + ".tmp" );
347         wagonMock.get( path, tmpFile );
348         
349         wagonMockControl.setMatcher(customWagonGetMatcher);
350         wagonMockControl.setThrowable( new ResourceDoesNotExistException( "Can't find resource." ) );
351
352         wagonMock.get( path, tmpFile );
353         
354         wagonMockControl.setMatcher(customWagonGetMatcher);
355         wagonMockControl.setThrowable( new ResourceDoesNotExistException( "Can't find resource." ) );
356
357         wagonMockControl.replay();
358
359         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
360
361         assertNotDownloaded( downloadedFile );
362
363         wagonMockControl.verify();
364         assertNoTempFiles( expectedFile );
365
366         // TODO: do not want failures to present as a not found [MRM-492]
367         // TODO: How much information on each failure should we pass back to the user vs. logging in the proxy? 
368     }
369
370     public void testGetFromLegacyProxyAlreadyPresentInManaged_NewerThanRemote()
371         throws Exception
372     {
373         String legacyPath = "org.apache.maven.test/jars/get-default-layout-present-1.0.jar";
374         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
375         setupTestableManagedRepository( path );
376
377         File expectedFile = new File( managedDefaultDir, path );
378         File remoteFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
379         
380         // Set the managed file to be newer than remote.
381         setManagedNewerThanRemote( expectedFile, remoteFile );
382         long expectedTimestamp = expectedFile.lastModified();
383         
384         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
385         
386         assertTrue( expectedFile.exists() );
387
388         // Configure Connector (usually done within archiva.xml configuration)
389         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED );
390
391         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
392
393         assertNotDownloaded( downloadedFile );
394         assertNotModified( expectedFile, expectedTimestamp );
395         assertNoTempFiles( expectedFile );
396     }
397     
398     public void testGetFromLegacyProxyAlreadyPresentInManaged_OlderThanRemote()
399         throws Exception
400     {
401         String legacyPath = "org.apache.maven.test/jars/get-default-layout-present-1.0.jar";
402         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
403         setupTestableManagedRepository( path );
404
405         File expectedFile = new File( managedDefaultDir, path );
406         File remoteFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
407
408         // Set the managed file to be older than remote.
409         setManagedOlderThanRemote( expectedFile, remoteFile );
410
411         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
412
413         assertTrue( expectedFile.exists() );
414
415         // Configure Connector (usually done within archiva.xml configuration)
416         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED );
417
418         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
419
420         File proxiedFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
421         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
422         assertNoTempFiles( expectedFile );
423     }
424
425     public void testGetFromLegacyProxyNotPresentInManaged()
426         throws Exception
427     {
428         String legacyPath = "org.apache.maven.test/jars/example-lib-2.2.jar";
429         String path = "org/apache/maven/test/example-lib/2.2/example-lib-2.2.jar";
430         setupTestableManagedRepository( path );
431
432         File expectedFile = new File( managedDefaultDir, path );
433         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
434
435         assertNotExistsInManagedDefaultRepo( expectedFile );
436
437         // Configure Connector (usually done within archiva.xml configuration)
438         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED );
439
440         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
441
442         File proxiedFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
443         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
444         assertNoTempFiles( expectedFile );
445     }
446
447     public void testGetFromLegacyProxyPluginNotPresentInManaged()
448         throws Exception
449     {
450         String legacyPath = "org.apache.maven.test/maven-plugins/example-maven-plugin-0.42.jar";
451         String path = "org/apache/maven/test/example-maven-plugin/0.42/example-maven-plugin-0.42.jar";
452         setupTestableManagedRepository( path );
453
454         File expectedFile = new File( managedDefaultDir, path );
455         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
456
457         assertNotExistsInManagedDefaultRepo( expectedFile );
458
459         // Configure Connector (usually done within archiva.xml configuration)
460         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED );
461
462         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
463
464         File proxiedFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
465         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
466         assertNoTempFiles( expectedFile );
467     }
468 }