]> source.dussan.org Git - archiva.git/blob
5e6d31e4e502f2f780f70282711ddd9a91df9e73
[archiva.git] /
1 package org.apache.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.archiva.model.ArtifactReference;
23 import org.apache.archiva.policies.CachedFailuresPolicy;
24 import org.apache.archiva.policies.ChecksumPolicy;
25 import org.apache.archiva.policies.ReleasesPolicy;
26 import org.apache.archiva.policies.SnapshotsPolicy;
27 import org.apache.commons.io.FileUtils;
28 import org.apache.commons.lang.StringUtils;
29 import org.apache.maven.wagon.ResourceDoesNotExistException;
30 import org.easymock.EasyMock;
31 import org.junit.Test;
32
33 import java.io.File;
34 import java.nio.charset.Charset;
35
36 import static org.junit.Assert.*;
37
38 /**
39  * ManagedDefaultTransferTest
40  */
41 public class ManagedDefaultTransferTest
42     extends AbstractProxyTestCase
43 {
44     @Test
45     public void testGetDefaultLayoutNotPresentConnectorOffline()
46         throws Exception
47     {
48         String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
49         setupTestableManagedRepository( path );
50
51         File expectedFile = new File( managedDefaultDir, path );
52         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
53
54         // Ensure file isn't present first.
55         assertNotExistsInManagedDefaultRepo( expectedFile );
56
57         // Configure Connector (usually done within archiva.xml configuration)
58         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
59                        CachedFailuresPolicy.NO, true );
60
61         // Attempt the proxy fetch.
62         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
63         assertNull( "File should not have been downloaded", downloadedFile );
64     }
65
66     @Test
67     public void testGetDefaultLayoutNotPresent()
68         throws Exception
69     {
70         String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
71         setupTestableManagedRepository( path );
72
73         File expectedFile = new File( managedDefaultDir, path );
74         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
75
76         // Ensure file isn't present first.
77         assertNotExistsInManagedDefaultRepo( expectedFile );
78
79         // Configure Connector (usually done within archiva.xml configuration)
80         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
81                        CachedFailuresPolicy.NO, false );
82
83         // Attempt the proxy fetch.
84         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
85
86         File sourceFile = new File( REPOPATH_PROXIED1, path );
87         assertFileEquals( expectedFile, downloadedFile, sourceFile );
88         assertNoTempFiles( expectedFile );
89     }
90
91     @Test
92     public void testGetDefaultLayoutNotPresentPassthrough()
93         throws Exception
94     {
95         String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar.asc";
96         setupTestableManagedRepository( path );
97
98         File expectedFile = new File( managedDefaultDir, path );
99
100         // Ensure file isn't present first.
101         assertNotExistsInManagedDefaultRepo( expectedFile );
102
103         // Configure Connector (usually done within archiva.xml configuration)
104         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
105                        CachedFailuresPolicy.NO, false );
106
107         // Attempt the proxy fetch.
108         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, path );
109
110         File sourceFile = new File( REPOPATH_PROXIED1, path );
111         assertFileEquals( expectedFile, downloadedFile, sourceFile );
112         assertFalse( new File( downloadedFile.getParentFile(), downloadedFile.getName() + ".sha1" ).exists() );
113         assertFalse( new File( downloadedFile.getParentFile(), downloadedFile.getName() + ".md5" ).exists() );
114         assertFalse( new File( downloadedFile.getParentFile(), downloadedFile.getName() + ".asc" ).exists() );
115         assertNoTempFiles( expectedFile );
116     }
117
118     /**
119      * The attempt here should result in no file being transferred.
120      * <p/>
121      * The file exists locally, and the policy is ONCE.
122      *
123      * @throws Exception
124      */
125     @Test
126     public void testGetDefaultLayoutAlreadyPresentPolicyOnce()
127         throws Exception
128     {
129         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
130         setupTestableManagedRepository( path );
131
132         File expectedFile = new File( managedDefaultDir, path );
133
134         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
135
136         assertTrue( expectedFile.exists() );
137
138         // Configure Connector (usually done within archiva.xml configuration)
139         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
140                        CachedFailuresPolicy.NO, false );
141
142         // Attempt the proxy fetch.
143         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
144
145         assertFileEquals( expectedFile, downloadedFile, expectedFile );
146         assertNoTempFiles( expectedFile );
147     }
148
149     /**
150      * The attempt here should result in no file being transferred.
151      * <p/>
152      * The file exists locally, and the policy is ONCE.
153      *
154      * @throws Exception
155      */
156     @Test
157     public void testGetDefaultLayoutAlreadyPresentPassthrough()
158         throws Exception
159     {
160         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc";
161         setupTestableManagedRepository( path );
162
163         File expectedFile = new File( managedDefaultDir, path );
164         File remoteFile = new File( REPOPATH_PROXIED1, path );
165
166         assertTrue( expectedFile.exists() );
167
168         // Set the managed File to be newer than local.
169         setManagedOlderThanRemote( expectedFile, remoteFile );
170         long originalModificationTime = expectedFile.lastModified();
171
172         // Configure Connector (usually done within archiva.xml configuration)
173         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE,
174                        CachedFailuresPolicy.NO, false );
175
176         // Attempt the proxy fetch.
177         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, path );
178
179         assertNotDownloaded( downloadedFile );
180         assertNotModified( expectedFile, originalModificationTime );
181         assertNoTempFiles( expectedFile );
182     }
183
184     /**
185      * <p>
186      * Request a file, that exists locally, and remotely.
187      * </p>
188      * <p>
189      * All policies are set to IGNORE.
190      * </p>
191      * <p>
192      * Managed file is newer than remote file.
193      * </p>
194      * <p>
195      * Transfer should not have occured, as managed file is newer.
196      * </p>
197      *
198      * @throws Exception
199      */
200     @Test
201     public void testGetDefaultLayoutAlreadyPresentNewerThanRemotePolicyIgnored()
202         throws Exception
203     {
204         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
205         setupTestableManagedRepository( path );
206
207         File expectedFile = new File( managedDefaultDir, path );
208         File remoteFile = new File( REPOPATH_PROXIED1, path );
209
210         // Set the managed File to be newer than local.
211         setManagedNewerThanRemote( expectedFile, remoteFile );
212
213         long originalModificationTime = expectedFile.lastModified();
214         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
215
216         assertTrue( expectedFile.exists() );
217
218         // Configure Connector (usually done within archiva.xml configuration)
219         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
220                        SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
221
222         // Attempt the proxy fetch.
223         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
224
225         assertNotDownloaded( downloadedFile );
226         assertNotModified( expectedFile, originalModificationTime );
227         assertNoTempFiles( expectedFile );
228     }
229
230     /**
231      * <p>
232      * Request a file, that exists locally, and remotely.
233      * </p>
234      * <p>
235      * All policies are set to IGNORE.
236      * </p>
237      * <p>
238      * Managed file is older than Remote file.
239      * </p>
240      * <p>
241      * Transfer should have occured, as managed file is older than remote.
242      * </p>
243      *
244      * @throws Exception
245      */
246     @Test
247     public void testGetDefaultLayoutAlreadyPresentOlderThanRemotePolicyIgnored()
248         throws Exception
249     {
250         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
251         setupTestableManagedRepository( path );
252
253         File expectedFile = new File( managedDefaultDir, path );
254         File remoteFile = new File( REPOPATH_PROXIED1, path );
255
256         // Set the managed file to be newer than remote file.
257         setManagedOlderThanRemote( expectedFile, remoteFile );
258
259         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
260
261         assertTrue( expectedFile.exists() );
262
263         // Configure Connector (usually done within archiva.xml configuration)
264         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS,
265                        SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false );
266
267         // Attempt the proxy fetch.
268         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
269
270         File proxiedFile = new File( REPOPATH_PROXIED1, path );
271         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
272         assertNoTempFiles( expectedFile );
273     }
274
275     /**
276      * The attempt here should result in file being transferred.
277      * <p/>
278      * The file exists locally, is over 6 years old, and the policy is DAILY.
279      *
280      * @throws Exception
281      */
282     @Test
283     public void testGetDefaultLayoutRemoteUpdate()
284         throws Exception
285     {
286         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
287         setupTestableManagedRepository( path );
288
289         File expectedFile = new File( managedDefaultDir, path );
290         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
291
292         assertTrue( expectedFile.exists() );
293         expectedFile.setLastModified( getPastDate().getTime() );
294
295         // Configure Connector (usually done within archiva.xml configuration)
296         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.DAILY, SnapshotsPolicy.DAILY,
297                        CachedFailuresPolicy.NO, false );
298
299         // Attempt the proxy fetch.
300         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
301
302         File proxiedFile = new File( REPOPATH_PROXIED1, path );
303         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
304         assertNoTempFiles( expectedFile );
305     }
306
307     @Test
308     public void testGetWhenInBothProxiedRepos()
309         throws Exception
310     {
311         String path = "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
312         setupTestableManagedRepository( path );
313
314         File expectedFile = new File( managedDefaultDir, path );
315         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
316
317         assertNotExistsInManagedDefaultRepo( expectedFile );
318
319         // Configure Connector (usually done within archiva.xml configuration)
320         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
321         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
322
323         // Attempt the proxy fetch.
324         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
325
326         File proxied1File = new File( REPOPATH_PROXIED1, path );
327         File proxied2File = new File( REPOPATH_PROXIED2, path );
328         assertFileEquals( expectedFile, downloadedFile, proxied1File );
329         assertNoTempFiles( expectedFile );
330
331         // TODO: is this check even needed if it passes above? 
332         String actualContents = FileUtils.readFileToString( downloadedFile, Charset.defaultCharset() );
333         String badContents = FileUtils.readFileToString( proxied2File, Charset.defaultCharset() );
334         assertFalse( "Downloaded file contents should not be that of proxy 2",
335                      StringUtils.equals( actualContents, badContents ) );
336     }
337
338     @Test
339     public void testGetInSecondProxiedRepo()
340         throws Exception
341     {
342         String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
343         setupTestableManagedRepository( path );
344
345         File expectedFile = new File( managedDefaultDir, path );
346         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
347
348         assertNotExistsInManagedDefaultRepo( expectedFile );
349
350         // Configure Connector (usually done within archiva.xml configuration)
351         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
352         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
353
354         // Attempt the proxy fetch.
355         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
356
357         File proxied2File = new File( REPOPATH_PROXIED2, path );
358         assertFileEquals( expectedFile, downloadedFile, proxied2File );
359         assertNoTempFiles( expectedFile );
360     }
361
362     @Test
363     public void testNotFoundInAnyProxies()
364         throws Exception
365     {
366         String path = "org/apache/maven/test/does-not-exist/1.0/does-not-exist-1.0.jar";
367         setupTestableManagedRepository( path );
368
369         File expectedFile = new File( managedDefaultDir, path );
370         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
371
372         assertNotExistsInManagedDefaultRepo( expectedFile );
373
374         // Configure Connector (usually done within archiva.xml configuration)
375         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
376         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
377         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED, false );
378
379         // Attempt the proxy fetch.
380         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
381
382         assertNull( "File returned was: " + downloadedFile + "; should have got a not found exception",
383                     downloadedFile );
384         assertNoTempFiles( expectedFile );
385     }
386
387     @Test
388     public void testGetInSecondProxiedRepoFirstFails()
389         throws Exception
390     {
391         String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
392         setupTestableManagedRepository( path );
393
394         File expectedFile = new File( managedDefaultDir, path );
395         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
396
397         assertNotExistsInManagedDefaultRepo( expectedFile );
398
399         // Configure Repository (usually done within archiva.xml configuration)
400         saveRemoteRepositoryConfig( "badproxied", "Bad Proxied", "test://bad.machine.com/repo/", "default" );
401
402         wagonMock.get( EasyMock.eq( path), EasyMock.anyObject( File.class ) );
403         EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "transfer failed" )  );
404         wagonMockControl.replay();
405
406         // Configure Connector (usually done within archiva.xml configuration)
407         saveConnector( ID_DEFAULT_MANAGED, "badproxied", false );
408         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
409
410         // Attempt the proxy fetch.
411         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
412
413         wagonMockControl.verify();
414
415         File proxied2File = new File( REPOPATH_PROXIED2, path );
416         assertFileEquals( expectedFile, downloadedFile, proxied2File );
417         assertNoTempFiles( expectedFile );
418     }
419
420     @Test
421     public void testGetAllRepositoriesFail()
422         throws Exception
423     {
424         String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar";
425         setupTestableManagedRepository( path );
426
427         File expectedFile = new File( managedDefaultDir.getAbsoluteFile(), path );
428         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
429
430         assertNotExistsInManagedDefaultRepo( expectedFile );
431
432         // Configure Repository (usually done within archiva.xml configuration)
433         saveRemoteRepositoryConfig( "badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default" );
434         saveRemoteRepositoryConfig( "badproxied2", "Bad Proxied 2", "test://dead.machine.com/repo/", "default" );
435
436         // Configure Connector (usually done within archiva.xml configuration)
437         saveConnector( ID_DEFAULT_MANAGED, "badproxied1", false );
438         saveConnector( ID_DEFAULT_MANAGED, "badproxied2", false );
439
440         File tmpFile = new File( expectedFile.getParentFile(), expectedFile.getName() + ".tmp" );
441
442         wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ) );
443         EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "Can't find resource." ) );
444
445         wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class ) );
446         EasyMock.expectLastCall().andThrow( new ResourceDoesNotExistException( "Can't find resource." ) );
447
448         wagonMockControl.replay();
449
450         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
451
452         assertNotDownloaded( downloadedFile );
453
454         wagonMockControl.verify();
455         assertNoTempFiles( expectedFile );
456
457         // TODO: do not want failures to present as a not found [MRM-492]
458         // TODO: How much information on each failure should we pass back to the user vs. logging in the proxy? 
459     }
460
461     @Test
462     public void testGetFromLegacyProxyAlreadyPresentInManaged_NewerThanRemote()
463         throws Exception
464     {
465         String legacyPath = "org.apache.maven.test/jars/get-default-layout-present-1.0.jar";
466         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
467         setupTestableManagedRepository( path );
468
469         File expectedFile = new File( managedDefaultDir, path );
470         File remoteFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
471
472         // Set the managed file to be newer than remote.
473         setManagedNewerThanRemote( expectedFile, remoteFile );
474         long expectedTimestamp = expectedFile.lastModified();
475
476         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
477
478         assertTrue( expectedFile.exists() );
479
480         // Configure Connector (usually done within archiva.xml configuration)
481         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED, false );
482
483         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
484
485         assertNotDownloaded( downloadedFile );
486         assertNotModified( expectedFile, expectedTimestamp );
487         assertNoTempFiles( expectedFile );
488     }
489
490     @Test
491     public void testGetFromLegacyProxyAlreadyPresentInManaged_OlderThanRemote()
492         throws Exception
493     {
494         String legacyPath = "org.apache.maven.test/jars/get-default-layout-present-1.0.jar";
495         String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar";
496         setupTestableManagedRepository( path );
497
498         File expectedFile = new File( managedDefaultDir, path );
499         File remoteFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
500
501         // Set the managed file to be older than remote.
502         setManagedOlderThanRemote( expectedFile, remoteFile );
503
504         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
505
506         assertTrue( expectedFile.exists() );
507
508         // Configure Connector (usually done within archiva.xml configuration)
509         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED, false );
510
511         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
512
513         File proxiedFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
514         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
515         assertNoTempFiles( expectedFile );
516     }
517
518     @Test
519     public void testGetFromLegacyProxyNotPresentInManaged()
520         throws Exception
521     {
522         String legacyPath = "org.apache.maven.test/jars/example-lib-2.2.jar";
523         String path = "org/apache/maven/test/example-lib/2.2/example-lib-2.2.jar";
524         setupTestableManagedRepository( path );
525
526         File expectedFile = new File( managedDefaultDir, path );
527         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
528
529         assertNotExistsInManagedDefaultRepo( expectedFile );
530
531         // Configure Connector (usually done within archiva.xml configuration)
532         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED, false );
533
534         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
535
536         File proxiedFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
537         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
538         assertNoTempFiles( expectedFile );
539     }
540
541     @Test
542     public void testGetFromLegacyProxyPluginNotPresentInManaged()
543         throws Exception
544     {
545         String legacyPath = "org.apache.maven.test/maven-plugins/example-maven-plugin-0.42.jar";
546         String path = "org/apache/maven/test/example-maven-plugin/0.42/example-maven-plugin-0.42.jar";
547         setupTestableManagedRepository( path );
548
549         File expectedFile = new File( managedDefaultDir, path );
550         ArtifactReference artifact = managedDefaultRepository.toArtifactReference( path );
551
552         assertNotExistsInManagedDefaultRepo( expectedFile );
553
554         // Configure Connector (usually done within archiva.xml configuration)
555         saveConnector( ID_DEFAULT_MANAGED, ID_LEGACY_PROXIED, false );
556
557         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, artifact );
558
559         File proxiedFile = new File( REPOPATH_PROXIED_LEGACY, legacyPath );
560         assertFileEquals( expectedFile, downloadedFile, proxiedFile );
561         assertNoTempFiles( expectedFile );
562     }
563 }