View Javadoc

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.maven.archiva.policies.CachedFailuresPolicy;
23  import org.apache.maven.archiva.policies.ChecksumPolicy;
24  import org.apache.maven.archiva.policies.PropagateErrorsDownloadPolicy;
25  import org.apache.maven.archiva.policies.PropagateErrorsOnUpdateDownloadPolicy;
26  import org.apache.maven.archiva.policies.ProxyDownloadException;
27  import org.apache.maven.archiva.policies.ReleasesPolicy;
28  import org.apache.maven.archiva.policies.SnapshotsPolicy;
29  import org.apache.maven.archiva.repository.layout.LayoutException;
30  import org.apache.maven.wagon.ResourceDoesNotExistException;
31  import org.apache.maven.wagon.TransferFailedException;
32  import org.apache.maven.wagon.authorization.AuthorizationException;
33  
34  import java.io.File;
35  
36  /**
37   * ErrorHandlingTest
38   *
39   * @version $Id: ErrorHandlingTest.java 718864 2008-11-19 06:33:35Z brett $
40   */
41  public class ErrorHandlingTest
42      extends AbstractProxyTestCase
43  {
44      private static final String PATH_IN_BOTH_REMOTES_NOT_LOCAL =
45          "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar";
46  
47      private static final String PATH_IN_BOTH_REMOTES_AND_LOCAL =
48          "org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom";
49  
50      private static final String ID_MOCKED_PROXIED1 = "badproxied1";
51  
52      private static final String NAME_MOCKED_PROXIED1 = "Bad Proxied 1";
53  
54      private static final String ID_MOCKED_PROXIED2 = "badproxied2";
55  
56      private static final String NAME_MOCKED_PROXIED2 = "Bad Proxied 2";
57  
58      public void testPropagateErrorImmediatelyWithErrorThenSuccess()
59          throws Exception
60      {
61          String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
62          File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
63  
64          createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
65          saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false );
66  
67          simulateGetError( path, expectedFile, createTransferException() );
68  
69          confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
70      }
71  
72      public void testPropagateErrorImmediatelyWithNotFoundThenError()
73          throws Exception
74      {
75          String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
76          File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
77  
78          createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
79          createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP );
80  
81          simulateGetError( path, expectedFile, createResourceNotFoundException() );
82  
83          simulateGetError( path, expectedFile, createTransferException() );
84  
85          confirmSingleFailure( path, ID_MOCKED_PROXIED2 );
86      }
87  
88      public void testPropagateErrorImmediatelyWithSuccessThenError()
89          throws Exception
90      {
91          String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
92          File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
93  
94          saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false );
95  
96          createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP );
97  
98          confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 );
99      }
100 
101     public void testPropagateErrorImmediatelyWithNotFoundThenSuccess()
102         throws Exception
103     {
104         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
105         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
106 
107         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
108 
109         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false  );
110 
111         simulateGetError( path, expectedFile, createResourceNotFoundException() );
112 
113         confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 );
114     }
115 
116     public void testPropagateErrorAtEndWithErrorThenSuccess()
117         throws Exception
118     {
119         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
120         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
121 
122         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP );
123 
124         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false  );
125 
126         simulateGetError( path, expectedFile, createTransferException() );
127 
128         confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
129     }
130 
131     public void testPropagateErrorAtEndWithSuccessThenError()
132         throws Exception
133     {
134         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
135         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
136 
137         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false  );
138 
139         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
140 
141         confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 );
142     }
143 
144     public void testPropagateErrorAtEndWithNotFoundThenError()
145         throws Exception
146     {
147         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
148         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
149 
150         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
151 
152         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
153 
154         simulateGetError( path, expectedFile, createResourceNotFoundException() );
155 
156         simulateGetError( path, expectedFile, createTransferException() );
157 
158         confirmSingleFailure( path, ID_MOCKED_PROXIED2 );
159     }
160 
161     public void testPropagateErrorAtEndWithErrorThenNotFound()
162         throws Exception
163     {
164         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
165         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
166 
167         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
168 
169         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
170 
171         simulateGetError( path, expectedFile, createTransferException() );
172 
173         simulateGetError( path, expectedFile, createResourceNotFoundException() );
174 
175         confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
176     }
177 
178     public void testPropagateErrorAtEndWithErrorThenError()
179         throws Exception
180     {
181         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
182         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
183 
184         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
185 
186         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE );
187 
188         simulateGetError( path, expectedFile, createTransferException() );
189 
190         simulateGetError( path, expectedFile, createTransferException() );
191 
192         confirmFailures( path, new String[]{ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2} );
193     }
194 
195     public void testPropagateErrorAtEndWithNotFoundThenSuccess()
196         throws Exception
197     {
198         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
199         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
200 
201         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE );
202 
203         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false  );
204 
205         simulateGetError( path, expectedFile, createResourceNotFoundException() );
206 
207         confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 );
208     }
209 
210     public void testIgnoreErrorWithErrorThenSuccess()
211         throws Exception
212     {
213         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
214         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
215 
216         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
217 
218         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false  );
219 
220         simulateGetError( path, expectedFile, createTransferException() );
221 
222         confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 );
223     }
224 
225     public void testIgnoreErrorWithSuccessThenError()
226         throws Exception
227     {
228         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
229         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
230 
231         saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false  );
232 
233         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
234 
235         confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 );
236     }
237 
238     public void testIgnoreErrorWithNotFoundThenError()
239         throws Exception
240     {
241         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
242         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
243 
244         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
245 
246         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
247 
248         simulateGetError( path, expectedFile, createResourceNotFoundException() );
249 
250         simulateGetError( path, expectedFile, createTransferException() );
251 
252         confirmNotDownloadedNoError( path );
253     }
254 
255     public void testIgnoreErrorWithErrorThenNotFound()
256         throws Exception
257     {
258         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
259         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
260 
261         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
262 
263         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
264 
265         simulateGetError( path, expectedFile, createTransferException() );
266 
267         simulateGetError( path, expectedFile, createResourceNotFoundException() );
268 
269         confirmNotDownloadedNoError( path );
270     }
271 
272     public void testIgnoreErrorWithErrorThenError()
273         throws Exception
274     {
275         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
276         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
277 
278         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE );
279 
280         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE );
281 
282         simulateGetError( path, expectedFile, createTransferException() );
283 
284         simulateGetError( path, expectedFile, createTransferException() );
285 
286         confirmNotDownloadedNoError( path );
287     }
288 
289     public void testPropagateOnUpdateAlwaysArtifactNotPresent()
290         throws Exception
291     {
292         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
293         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
294 
295         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
296                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
297         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
298                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
299 
300         simulateGetError( path, expectedFile, createTransferException() );
301 
302         confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
303     }
304 
305     public void testPropagateOnUpdateAlwaysArtifactPresent()
306         throws Exception
307     {
308         String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
309         File expectedFile = setupRepositoriesWithLocalFilePresent( path );
310 
311         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
312                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
313         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
314                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
315 
316         simulateGetIfNewerError( path, expectedFile, createTransferException() );
317 
318         confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
319     }
320 
321     public void testPropagateOnUpdateAlwaysQueueArtifactNotPresent()
322         throws Exception
323     {
324         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
325         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
326 
327         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
328                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
329         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
330                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
331 
332         simulateGetError( path, expectedFile, createTransferException() );
333         simulateGetError( path, expectedFile, createTransferException() );
334 
335         confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } );
336     }
337 
338     public void testPropagateOnUpdateAlwaysQueueArtifactPresent()
339         throws Exception
340     {
341         String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
342         File expectedFile = setupRepositoriesWithLocalFilePresent( path );
343 
344         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
345                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
346         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
347                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
348 
349         simulateGetIfNewerError( path, expectedFile, createTransferException() );
350         simulateGetIfNewerError( path, expectedFile, createTransferException() );
351 
352         confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } );
353     }
354 
355     public void testPropagateOnUpdateAlwaysIgnoreArtifactNotPresent()
356         throws Exception
357     {
358         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
359         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
360 
361         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
362                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
363         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
364                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
365 
366         simulateGetError( path, expectedFile, createTransferException() );
367         simulateGetError( path, expectedFile, createTransferException() );
368 
369         confirmNotDownloadedNoError( path );
370     }
371 
372     public void testPropagateOnUpdateAlwaysIgnoreArtifactPresent()
373         throws Exception
374     {
375         String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
376         File expectedFile = setupRepositoriesWithLocalFilePresent( path );
377 
378         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
379                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
380         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
381                                     PropagateErrorsOnUpdateDownloadPolicy.ALWAYS );
382 
383         simulateGetIfNewerError( path, expectedFile, createTransferException() );
384         simulateGetIfNewerError( path, expectedFile, createTransferException() );
385 
386         confirmNotDownloadedNoError( path );
387         assertTrue( expectedFile.exists() );
388     }
389 
390     public void testPropagateOnUpdateNotPresentArtifactNotPresent()
391         throws Exception
392     {
393         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
394         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
395 
396         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
397                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
398         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
399                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
400 
401         simulateGetError( path, expectedFile, createTransferException() );
402 
403         confirmSingleFailure( path, ID_MOCKED_PROXIED1 );
404     }
405 
406     public void testPropagateOnUpdateNotPresentArtifactPresent()
407         throws Exception
408     {
409         String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
410         File expectedFile = setupRepositoriesWithLocalFilePresent( path );
411 
412         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP,
413                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
414         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP,
415                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
416 
417         simulateGetIfNewerError( path, expectedFile, createTransferException() );
418 
419         confirmNotDownloadedNoError( path );
420         assertTrue( expectedFile.exists() );
421     }
422 
423     public void testPropagateOnUpdateNotPresentQueueArtifactNotPresent()
424         throws Exception
425     {
426         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
427         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
428 
429         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
430                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
431         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
432                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
433 
434         simulateGetError( path, expectedFile, createTransferException() );
435         simulateGetError( path, expectedFile, createTransferException() );
436 
437         confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } );
438     }
439 
440     public void testPropagateOnUpdateNotPresentQueueArtifactPresent()
441         throws Exception
442     {
443         String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
444         File expectedFile = setupRepositoriesWithLocalFilePresent( path );
445 
446         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE,
447                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
448         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE,
449                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
450 
451         simulateGetIfNewerError( path, expectedFile, createTransferException() );
452         simulateGetIfNewerError( path, expectedFile, createTransferException() );
453 
454         confirmNotDownloadedNoError( path );
455         assertTrue( expectedFile.exists() );
456     }
457 
458     public void testPropagateOnUpdateNotPresentIgnoreArtifactNotPresent()
459         throws Exception
460     {
461         String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL;
462         File expectedFile = setupRepositoriesWithLocalFileNotPresent( path );
463 
464         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
465                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
466         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
467                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
468 
469         simulateGetError( path, expectedFile, createTransferException() );
470         simulateGetError( path, expectedFile, createTransferException() );
471 
472         confirmNotDownloadedNoError( path );
473     }
474 
475     public void testPropagateOnUpdateNotPresentIgnoreArtifactPresent()
476         throws Exception
477     {
478         String path = PATH_IN_BOTH_REMOTES_AND_LOCAL;
479         File expectedFile = setupRepositoriesWithLocalFilePresent( path );
480 
481         createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE,
482                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
483         createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE,
484                                     PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT );
485 
486         simulateGetIfNewerError( path, expectedFile, createTransferException() );
487         simulateGetIfNewerError( path, expectedFile, createTransferException() );
488 
489         confirmNotDownloadedNoError( path );
490         assertTrue( expectedFile.exists() );
491     }
492 
493     // ------------------------------------------
494     // HELPER METHODS
495     // ------------------------------------------
496 
497     private void createMockedProxyConnector( String id, String name, String errorPolicy )
498     {
499         saveRemoteRepositoryConfig( id, name, "test://bad.machine.com/repo/", "default" );
500         saveConnector( ID_DEFAULT_MANAGED, id, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS,
501                        CachedFailuresPolicy.NO, errorPolicy, false );
502     }
503 
504     private void createMockedProxyConnector( String id, String name, String errorPolicy, String errorOnUpdatePolicy )
505     {
506         saveRemoteRepositoryConfig( id, name, "test://bad.machine.com/repo/", "default" );
507         saveConnector( ID_DEFAULT_MANAGED, id, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS,
508                        CachedFailuresPolicy.NO, errorPolicy, errorOnUpdatePolicy, false );
509     }
510 
511     private File setupRepositoriesWithLocalFileNotPresent( String path )
512         throws Exception
513     {
514         setupTestableManagedRepository( path );
515 
516         File file = new File( managedDefaultDir, path );
517 
518         assertNotExistsInManagedDefaultRepo( file );
519 
520         return file;
521     }
522 
523     private File setupRepositoriesWithLocalFilePresent( String path )
524         throws Exception
525     {
526         setupTestableManagedRepository( path );
527 
528         File file = new File( managedDefaultDir, path );
529 
530         assertTrue( file.exists() );
531 
532         return file;
533     }
534 
535     private void simulateGetError( String path, File expectedFile, Exception throwable )
536         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
537     {
538         wagonMock.get( path, createExpectedTempFile( expectedFile ) );
539         wagonMockControl.setMatcher(customWagonGetMatcher);
540         wagonMockControl.setThrowable( throwable, 1 );
541     }
542 
543     private void simulateGetIfNewerError( String path, File expectedFile, TransferFailedException exception )
544         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
545     {
546         wagonMock.getIfNewer( path, createExpectedTempFile( expectedFile ), expectedFile.lastModified() );
547         wagonMockControl.setMatcher(customWagonGetIfNewerMatcher);
548         wagonMockControl.setThrowable( exception, 1 );
549     }
550 
551     private File createExpectedTempFile( File expectedFile )
552     {
553         return new File( managedDefaultDir, expectedFile.getName() + ".tmp" ).getAbsoluteFile();
554     }
555 
556     private void confirmSingleFailure( String path, String id )
557         throws LayoutException
558     {
559         confirmFailures( path, new String[]{id} );
560     }
561 
562     private void confirmFailures( String path, String[] ids )
563         throws LayoutException
564     {
565         wagonMockControl.replay();
566 
567         // Attempt the proxy fetch.
568         File downloadedFile = null;
569         try
570         {
571             downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository,
572                                                             managedDefaultRepository.toArtifactReference( path ) );
573             fail( "Proxy should not have succeeded" );
574         }
575         catch ( ProxyDownloadException e )
576         {
577             assertEquals( ids.length, e.getFailures().size() );
578             for ( String id : ids )
579             {
580                 assertTrue( e.getFailures().keySet().contains( id ) );
581             }
582         }
583 
584         wagonMockControl.verify();
585 
586         assertNotDownloaded( downloadedFile );
587     }
588 
589     private void confirmSuccess( String path, File expectedFile, String basedir )
590         throws Exception
591     {
592         File downloadedFile = performDownload( path );
593 
594         File proxied1File = new File( basedir, path );
595         assertFileEquals( expectedFile, downloadedFile, proxied1File );
596     }
597 
598     private void confirmNotDownloadedNoError( String path )
599         throws Exception
600     {
601         File downloadedFile = performDownload( path );
602 
603         assertNotDownloaded( downloadedFile );
604     }
605 
606     private File performDownload( String path )
607         throws ProxyDownloadException, LayoutException
608     {
609         wagonMockControl.replay();
610 
611         // Attempt the proxy fetch.
612         File downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository,
613                                                              managedDefaultRepository.toArtifactReference( path ) );
614 
615         wagonMockControl.verify();
616         return downloadedFile;
617     }
618 
619     private static TransferFailedException createTransferException()
620     {
621         return new TransferFailedException( "test download exception" );
622     }
623 
624     private static ResourceDoesNotExistException createResourceNotFoundException()
625     {
626         return new ResourceDoesNotExistException( "test download not found" );
627     }
628 }