]> source.dussan.org Git - archiva.git/blob
e90c6c2ee8fd8d7aea2e52b358b6c1113c2a2aa3
[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.IGNORED );
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.IGNORED );
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.IGNORED,
132                        SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
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.IGNORED,
176                        SnapshotsPolicy.IGNORED, CachedFailuresPolicy.IGNORED );
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.IGNORED );
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.setThrowable( new ResourceDoesNotExistException( "transfer failed" ) );
310         wagonMockControl.replay();
311
312         // Configure Connector (usually done within archiva.xml configuration)
313         saveConnector( ID_DEFAULT_MANAGED, "badproxied" );
314         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2 );
315
316         // Attempt the proxy fetch.
317         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
318
319         wagonMockControl.verify();
320
321         File proxied2File = new File( REPOPATH_PROXIED2, path );
322         assertFileEquals( expectedFile, downloadedFile, proxied2File );
323         assertNoTempFiles( expectedFile );
324     }
325
326     public void testGetAllRepositoriesFail()
327         throws Exception
328     {
329         String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
330         setupTestableManagedRepository( path );
331
332         File expectedFile = new File( managedDefaultDir.getAbsoluteFile(), path );
333         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
334
335         assertNotExistsInManagedDefaultRepo( expectedFile );
336
337         // Configure Repository (usually done within archiva.xml configuration)
338         saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
339         saveRemoteRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://dead.machine.com/repo/", "default" );
340
341         // Configure Connector (usually done within archiva.xml configuration)
342         saveConnector( ID_DEFAULT_MANAGED, "badproxied1" );
343         saveConnector( ID_DEFAULT_MANAGED, "badproxied2" );
344
345         File tmpFile = new File( expectedFile.getParentFile(), expectedFile.getName() + ".tmp" );
346         wagonMock.get( path, tmpFile );
347         wagonMockControl.setThrowable( new ResourceDoesNotExistException( "Can't find resource." ) );
348
349         wagonMock.get( path, tmpFile );
350         wagonMockControl.setThrowable( new ResourceDoesNotExistException( "Can't find resource." ) );
351
352         wagonMockControl.replay();
353
354         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
355
356         assertNotDownloaded( downloadedFile );
357
358         wagonMockControl.verify();
359         assertNoTempFiles( expectedFile );
360
361         // TODO: do not want failures to present as a not found [MRM-492]
362         // TODO: How much information on each failure should we pass back to the user vs. logging in the proxy? 
363     }
364
365     public void testGetFromLegacyProxyAlreadyPresentInManaged_NewerThanRemote()
366         throws Exception
367     {
368         String legacyPath = "org.apache.maven.test/jars/get-default-layout-present-1.0.jar";
369         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
370         setupTestableManagedRepository( path );
371
372         File expectedFile = new File( managedDefaultDir, path );
373         File remoteFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
374         
375         // Set the managed file to be newer than remote.
376         setManagedNewerThanRemote( expectedFile, remoteFile );
377         long expectedTimestamp = expectedFile.lastModified();
378         
379         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
380         
381         assertTrue( expectedFile.exists() );
382
383         // Configure Connector (usually done within archiva.xml configuration)
384         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED );
385
386         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
387
388         assertNotDownloaded( downloadedFile );
389         assertNotModified( expectedFile, expectedTimestamp );
390         assertNoTempFiles( expectedFile );
391     }
392     
393     public void testGetFromLegacyProxyAlreadyPresentInManaged_OlderThanRemote()
394         throws Exception
395     {
396         String legacyPath = "org.apache.maven.test/jars/get-default-layout-present-1.0.jar";
397         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
398         setupTestableManagedRepository( path );
399
400         File expectedFile = new File( managedDefaultDir, path );
401         File remoteFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
402
403         // Set the managed file to be older than remote.
404         setManagedOlderThanRemote( expectedFile, remoteFile );
405
406         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
407
408         assertTrue( expectedFile.exists() );
409
410         // Configure Connector (usually done within archiva.xml configuration)
411         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED );
412
413         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
414
415         File proxiedFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
416         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
417         assertNoTempFiles( expectedFile );
418     }
419
420     public void testGetFromLegacyProxyNotPresentInManaged()
421         throws Exception
422     {
423         String legacyPath = "org.apache.maven.test/jars/example-lib-2.2.jar";
424         String path = "org/apache/maven/test/example-lib/2.2/example-lib-2.2.jar";
425         setupTestableManagedRepository( path );
426
427         File expectedFile = new File( managedDefaultDir, path );
428         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
429
430         assertNotExistsInManagedDefaultRepo( expectedFile );
431
432         // Configure Connector (usually done within archiva.xml configuration)
433         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED );
434
435         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
436
437         File proxiedFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
438         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
439         assertNoTempFiles( expectedFile );
440     }
441
442     public void testGetFromLegacyProxyPluginNotPresentInManaged()
443         throws Exception
444     {
445         String legacyPath = "org.apache.maven.test/plugins/example-maven-plugin-0.42.jar";
446         String path = "org/apache/maven/test/example-maven-plugin/0.42/example-maven-plugin-0.42.jar";
447         setupTestableManagedRepository( path );
448
449         File expectedFile = new File( managedDefaultDir, path );
450         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
451
452         assertNotExistsInManagedDefaultRepo( expectedFile );
453
454         // Configure Connector (usually done within archiva.xml configuration)
455         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED );
456
457         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
458
459         File proxiedFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
460         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
461         assertNoTempFiles( expectedFile );
462     }
463 }