package org.apache.archiva.proxy; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import org.apache.archiva.policies.CachedFailuresPolicy; import org.apache.archiva.policies.ChecksumPolicy; import org.apache.archiva.policies.PropagateErrorsDownloadPolicy; import org.apache.archiva.policies.PropagateErrorsOnUpdateDownloadPolicy; import org.apache.archiva.policies.ProxyDownloadException; import org.apache.archiva.policies.ReleasesPolicy; import org.apache.archiva.policies.SnapshotsPolicy; import org.apache.archiva.repository.LayoutException; import org.apache.maven.wagon.ResourceDoesNotExistException; import org.apache.maven.wagon.TransferFailedException; import org.apache.maven.wagon.authorization.AuthorizationException; import org.easymock.EasyMock; import org.junit.Test; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import static org.junit.Assert.*; /** * ErrorHandlingTest * * */ public class ErrorHandlingTest extends AbstractProxyTestCase { private static final String PATH_IN_BOTH_REMOTES_NOT_LOCAL = "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar"; private static final String PATH_IN_BOTH_REMOTES_AND_LOCAL = "org/apache/maven/test/get-on-multiple-repos/1.0/get-on-multiple-repos-1.0.pom"; private static final String ID_MOCKED_PROXIED1 = "badproxied1"; private static final String NAME_MOCKED_PROXIED1 = "Bad Proxied 1"; private static final String ID_MOCKED_PROXIED2 = "badproxied2"; private static final String NAME_MOCKED_PROXIED2 = "Bad Proxied 2"; @Test public void testPropagateErrorImmediatelyWithErrorThenSuccess() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP ); saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false ); simulateGetError( path, expectedFile, createTransferException() ); confirmSingleFailure( path, ID_MOCKED_PROXIED1 ); } @Test public void testPropagateErrorImmediatelyWithNotFoundThenError() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP ); simulateGetError( path, expectedFile, createResourceNotFoundException() ); simulateGetError( path, expectedFile, createTransferException() ); confirmSingleFailure( path, ID_MOCKED_PROXIED2 ); } @Test public void testPropagateErrorImmediatelyWithSuccessThenError() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP ); confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 ); } @Test public void testPropagateErrorImmediatelyWithNotFoundThenSuccess() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP ); saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false ); simulateGetError( path, expectedFile, createResourceNotFoundException() ); confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 ); } @Test public void testPropagateErrorAtEndWithErrorThenSuccess() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP ); saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false ); simulateGetError( path, expectedFile, createTransferException() ); confirmSingleFailure( path, ID_MOCKED_PROXIED1 ); } @Test public void testPropagateErrorAtEndWithSuccessThenError() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE ); confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 ); } @Test public void testPropagateErrorAtEndWithNotFoundThenError() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE ); simulateGetError( path, expectedFile, createResourceNotFoundException() ); simulateGetError( path, expectedFile, createTransferException() ); confirmSingleFailure( path, ID_MOCKED_PROXIED2 ); } @Test public void testPropagateErrorAtEndWithErrorThenNotFound() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE ); simulateGetError( path, expectedFile, createTransferException() ); simulateGetError( path, expectedFile, createResourceNotFoundException() ); confirmSingleFailure( path, ID_MOCKED_PROXIED1 ); } @Test public void testPropagateErrorAtEndWithErrorThenError() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE ); simulateGetError( path, expectedFile, createTransferException() ); simulateGetError( path, expectedFile, createTransferException() ); confirmFailures( path, new String[]{ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2} ); } @Test public void testPropagateErrorAtEndWithNotFoundThenSuccess() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE ); saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false ); simulateGetError( path, expectedFile, createResourceNotFoundException() ); confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 ); } @Test public void testIgnoreErrorWithErrorThenSuccess() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE ); saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED2, false ); simulateGetError( path, expectedFile, createTransferException() ); confirmSuccess( path, expectedFile, REPOPATH_PROXIED2 ); } @Test public void testIgnoreErrorWithSuccessThenError() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); saveConnector( ID_DEFAULT_MANAGED, ID_PROXIED1, false ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE ); confirmSuccess( path, expectedFile, REPOPATH_PROXIED1 ); } @Test public void testIgnoreErrorWithNotFoundThenError() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE ); simulateGetError( path, expectedFile, createResourceNotFoundException() ); simulateGetError( path, expectedFile, createTransferException() ); confirmNotDownloadedNoError( path ); } @Test public void testIgnoreErrorWithErrorThenNotFound() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE ); simulateGetError( path, expectedFile, createTransferException() ); simulateGetError( path, expectedFile, createResourceNotFoundException() ); confirmNotDownloadedNoError( path ); } @Test public void testIgnoreErrorWithErrorThenError() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE ); simulateGetError( path, expectedFile, createTransferException() ); simulateGetError( path, expectedFile, createTransferException() ); confirmNotDownloadedNoError( path ); } @Test public void testPropagateOnUpdateAlwaysArtifactNotPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); simulateGetError( path, expectedFile, createTransferException() ); confirmSingleFailure( path, ID_MOCKED_PROXIED1 ); } @Test public void testPropagateOnUpdateAlwaysArtifactPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_AND_LOCAL; Path expectedFile = setupRepositoriesWithLocalFilePresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); confirmSingleFailure( path, ID_MOCKED_PROXIED1 ); } @Test public void testPropagateOnUpdateAlwaysQueueArtifactNotPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); simulateGetError( path, expectedFile, createTransferException() ); simulateGetError( path, expectedFile, createTransferException() ); confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } ); } @Test public void testPropagateOnUpdateAlwaysQueueArtifactPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_AND_LOCAL; Path expectedFile = setupRepositoriesWithLocalFilePresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } ); } @Test public void testPropagateOnUpdateAlwaysIgnoreArtifactNotPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); simulateGetError( path, expectedFile, createTransferException() ); simulateGetError( path, expectedFile, createTransferException() ); confirmNotDownloadedNoError( path ); } @Test public void testPropagateOnUpdateAlwaysIgnoreArtifactPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_AND_LOCAL; Path expectedFile = setupRepositoriesWithLocalFilePresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE, PropagateErrorsOnUpdateDownloadPolicy.ALWAYS ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); confirmNotDownloadedNoError( path ); assertTrue( Files.exists(expectedFile) ); } @Test public void testPropagateOnUpdateNotPresentArtifactNotPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); simulateGetError( path, expectedFile, createTransferException() ); confirmSingleFailure( path, ID_MOCKED_PROXIED1 ); } @Test public void testPropagateOnUpdateNotPresentArtifactPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_AND_LOCAL; Path expectedFile = setupRepositoriesWithLocalFilePresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.STOP, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.STOP, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); confirmNotDownloadedNoError( path ); assertTrue( Files.exists(expectedFile) ); } @Test public void testPropagateOnUpdateNotPresentQueueArtifactNotPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); simulateGetError( path, expectedFile, createTransferException() ); simulateGetError( path, expectedFile, createTransferException() ); confirmFailures( path, new String[] { ID_MOCKED_PROXIED1, ID_MOCKED_PROXIED2 } ); } @Test public void testPropagateOnUpdateNotPresentQueueArtifactPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_AND_LOCAL; Path expectedFile = setupRepositoriesWithLocalFilePresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.QUEUE, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.QUEUE, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); confirmNotDownloadedNoError( path ); assertTrue( Files.exists(expectedFile)); } @Test public void testPropagateOnUpdateNotPresentIgnoreArtifactNotPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_NOT_LOCAL; Path expectedFile = setupRepositoriesWithLocalFileNotPresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); simulateGetError( path, expectedFile, createTransferException() ); simulateGetError( path, expectedFile, createTransferException() ); confirmNotDownloadedNoError( path ); } @Test public void testPropagateOnUpdateNotPresentIgnoreArtifactPresent() throws Exception { String path = PATH_IN_BOTH_REMOTES_AND_LOCAL; Path expectedFile = setupRepositoriesWithLocalFilePresent( path ); createMockedProxyConnector( ID_MOCKED_PROXIED1, NAME_MOCKED_PROXIED1, PropagateErrorsDownloadPolicy.IGNORE, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); createMockedProxyConnector( ID_MOCKED_PROXIED2, NAME_MOCKED_PROXIED2, PropagateErrorsDownloadPolicy.IGNORE, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); simulateGetIfNewerError( path, expectedFile, createTransferException() ); confirmNotDownloadedNoError( path ); assertTrue( Files.exists(expectedFile)); } // ------------------------------------------ // HELPER METHODS // ------------------------------------------ private void createMockedProxyConnector( String id, String name, String errorPolicy ) { saveRemoteRepositoryConfig( id, name, "test://bad.machine.com/repo/", "default" ); saveConnector( ID_DEFAULT_MANAGED, id, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, errorPolicy, false ); } private void createMockedProxyConnector( String id, String name, String errorPolicy, String errorOnUpdatePolicy ) { saveRemoteRepositoryConfig( id, name, "test://bad.machine.com/repo/", "default" ); saveConnector( ID_DEFAULT_MANAGED, id, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, errorPolicy, errorOnUpdatePolicy, false ); } private Path setupRepositoriesWithLocalFileNotPresent( String path ) throws Exception { setupTestableManagedRepository( path ); Path file = managedDefaultDir.resolve( path ); assertNotExistsInManagedDefaultRepo( file ); return file; } private Path setupRepositoriesWithLocalFilePresent( String path ) throws Exception { setupTestableManagedRepository( path ); Path file = managedDefaultDir.resolve( path ); assertTrue( Files.exists(file) ); return file; } private void simulateGetError( String path, Path expectedFile, Exception throwable ) throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException { wagonMock.get( EasyMock.eq( path ), EasyMock.anyObject( File.class )); EasyMock.expectLastCall().andThrow(throwable ); } private void simulateGetIfNewerError( String path, Path expectedFile, TransferFailedException exception ) throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException, IOException { wagonMock.getIfNewer( EasyMock.eq( path ), EasyMock.anyObject( File.class ), EasyMock.eq( Files.getLastModifiedTime( expectedFile ).toMillis() )); EasyMock.expectLastCall().andThrow( exception ); } private Path createExpectedTempFile( Path expectedFile ) { return managedDefaultDir.resolve(expectedFile.getFileName().toString() + ".tmp" ).toAbsolutePath(); } private void confirmSingleFailure( String path, String id ) throws LayoutException { confirmFailures( path, new String[]{id} ); } private void confirmFailures( String path, String[] ids ) throws LayoutException { wagonMockControl.replay(); // Attempt the proxy fetch. Path downloadedFile = null; try { downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, managedDefaultRepository.toArtifactReference( path ) ); fail( "Proxy should not have succeeded" ); } catch ( ProxyDownloadException e ) { assertEquals( ids.length, e.getFailures().size() ); for ( String id : ids ) { assertTrue( e.getFailures().keySet().contains( id ) ); } } wagonMockControl.verify(); assertNotDownloaded( downloadedFile ); } private void confirmSuccess( String path, Path expectedFile, String basedir ) throws Exception { Path downloadedFile = performDownload( path ); Path proxied1File = Paths.get( basedir, path ); assertFileEquals( expectedFile, downloadedFile, proxied1File ); } private void confirmNotDownloadedNoError( String path ) throws Exception { Path downloadedFile = performDownload( path ); assertNotDownloaded( downloadedFile ); } private Path performDownload( String path ) throws ProxyDownloadException, LayoutException { wagonMockControl.replay(); // Attempt the proxy fetch. Path downloadedFile = proxyHandler.fetchFromProxies( managedDefaultRepository, managedDefaultRepository.toArtifactReference( path ) ); wagonMockControl.verify(); return downloadedFile; } private static TransferFailedException createTransferException() { return new TransferFailedException( "test download exception" ); } private static ResourceDoesNotExistException createResourceNotFoundException() { return new ResourceDoesNotExistException( "test download not found" ); } }