Java tutorial
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.model.ArtifactReference; import org.apache.archiva.policies.CachedFailuresPolicy; import org.apache.archiva.policies.ChecksumPolicy; import org.apache.archiva.policies.ReleasesPolicy; import org.apache.archiva.policies.SnapshotsPolicy; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; import org.apache.maven.wagon.ResourceDoesNotExistException; import org.easymock.EasyMock; import org.junit.Test; import java.io.File; import java.nio.charset.Charset; import static org.junit.Assert.*; /** * ManagedDefaultTransferTest */ public class ManagedDefaultTransferTest extends AbstractProxyTestCase { @Test public void testGetDefaultLayoutNotPresentConnectorOffline() throws Exception { String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); // Ensure file isn't present first. assertNotExistsInManagedDefaultRepo(expectedFile); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE, CachedFailuresPolicy.NO, true); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); assertNull("File should not have been downloaded", downloadedFile); } @Test public void testGetDefaultLayoutNotPresent() throws Exception { String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); // Ensure file isn't present first. assertNotExistsInManagedDefaultRepo(expectedFile); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE, CachedFailuresPolicy.NO, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); File sourceFile = new File(REPOPATH_PROXIED1, path); assertFileEquals(expectedFile, downloadedFile, sourceFile); assertNoTempFiles(expectedFile); } @Test public void testGetDefaultLayoutNotPresentPassthrough() throws Exception { String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar.asc"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); // Ensure file isn't present first. assertNotExistsInManagedDefaultRepo(expectedFile); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE, CachedFailuresPolicy.NO, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, path); File sourceFile = new File(REPOPATH_PROXIED1, path); assertFileEquals(expectedFile, downloadedFile, sourceFile); assertFalse(new File(downloadedFile.getParentFile(), downloadedFile.getName() + ".sha1").exists()); assertFalse(new File(downloadedFile.getParentFile(), downloadedFile.getName() + ".md5").exists()); assertFalse(new File(downloadedFile.getParentFile(), downloadedFile.getName() + ".asc").exists()); assertNoTempFiles(expectedFile); } /** * The attempt here should result in no file being transferred. * <p/> * The file exists locally, and the policy is ONCE. * * @throws Exception */ @Test public void testGetDefaultLayoutAlreadyPresentPolicyOnce() throws Exception { String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); assertTrue(expectedFile.exists()); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE, CachedFailuresPolicy.NO, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); assertFileEquals(expectedFile, downloadedFile, expectedFile); assertNoTempFiles(expectedFile); } /** * The attempt here should result in no file being transferred. * <p/> * The file exists locally, and the policy is ONCE. * * @throws Exception */ @Test public void testGetDefaultLayoutAlreadyPresentPassthrough() throws Exception { String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar.asc"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); File remoteFile = new File(REPOPATH_PROXIED1, path); assertTrue(expectedFile.exists()); // Set the managed File to be newer than local. setManagedOlderThanRemote(expectedFile, remoteFile); long originalModificationTime = expectedFile.lastModified(); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ONCE, SnapshotsPolicy.ONCE, CachedFailuresPolicy.NO, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, path); assertNotDownloaded(downloadedFile); assertNotModified(expectedFile, originalModificationTime); assertNoTempFiles(expectedFile); } /** * <p> * Request a file, that exists locally, and remotely. * </p> * <p> * All policies are set to IGNORE. * </p> * <p> * Managed file is newer than remote file. * </p> * <p> * Transfer should not have occured, as managed file is newer. * </p> * * @throws Exception */ @Test public void testGetDefaultLayoutAlreadyPresentNewerThanRemotePolicyIgnored() throws Exception { String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); File remoteFile = new File(REPOPATH_PROXIED1, path); // Set the managed File to be newer than local. setManagedNewerThanRemote(expectedFile, remoteFile); long originalModificationTime = expectedFile.lastModified(); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); assertTrue(expectedFile.exists()); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); assertNotDownloaded(downloadedFile); assertNotModified(expectedFile, originalModificationTime); assertNoTempFiles(expectedFile); } /** * <p> * Request a file, that exists locally, and remotely. * </p> * <p> * All policies are set to IGNORE. * </p> * <p> * Managed file is older than Remote file. * </p> * <p> * Transfer should have occured, as managed file is older than remote. * </p> * * @throws Exception */ @Test public void testGetDefaultLayoutAlreadyPresentOlderThanRemotePolicyIgnored() throws Exception { String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); File remoteFile = new File(REPOPATH_PROXIED1, path); // Set the managed file to be newer than remote file. setManagedOlderThanRemote(expectedFile, remoteFile); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); assertTrue(expectedFile.exists()); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); File proxiedFile = new File(REPOPATH_PROXIED1, path); assertFileEquals(expectedFile, downloadedFile, proxiedFile); assertNoTempFiles(expectedFile); } /** * The attempt here should result in file being transferred. * <p/> * The file exists locally, is over 6 years old, and the policy is DAILY. * * @throws Exception */ @Test public void testGetDefaultLayoutRemoteUpdate() throws Exception { String path = "org/apache/maven/test/get-default-layout-present/1.0/get-default-layout-present-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); assertTrue(expectedFile.exists()); expectedFile.setLastModified(getPastDate().getTime()); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, ChecksumPolicy.FIX, ReleasesPolicy.DAILY, SnapshotsPolicy.DAILY, CachedFailuresPolicy.NO, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); File proxiedFile = new File(REPOPATH_PROXIED1, path); assertFileEquals(expectedFile, downloadedFile, proxiedFile); assertNoTempFiles(expectedFile); } @Test public void testGetWhenInBothProxiedRepos() throws Exception { String path = "org/apache/maven/test/get-in-both-proxies/1.0/get-in-both-proxies-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); assertNotExistsInManagedDefaultRepo(expectedFile); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, false); saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED2, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); File proxied1File = new File(REPOPATH_PROXIED1, path); File proxied2File = new File(REPOPATH_PROXIED2, path); assertFileEquals(expectedFile, downloadedFile, proxied1File); assertNoTempFiles(expectedFile); // TODO: is this check even needed if it passes above? String actualContents = FileUtils.readFileToString(downloadedFile, Charset.defaultCharset()); String badContents = FileUtils.readFileToString(proxied2File, Charset.defaultCharset()); assertFalse("Downloaded file contents should not be that of proxy 2", StringUtils.equals(actualContents, badContents)); } @Test public void testGetInSecondProxiedRepo() throws Exception { String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); assertNotExistsInManagedDefaultRepo(expectedFile); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, false); saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED2, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); File proxied2File = new File(REPOPATH_PROXIED2, path); assertFileEquals(expectedFile, downloadedFile, proxied2File); assertNoTempFiles(expectedFile); } @Test public void testNotFoundInAnyProxies() throws Exception { String path = "org/apache/maven/test/does-not-exist/1.0/does-not-exist-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); assertNotExistsInManagedDefaultRepo(expectedFile); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED1, false); saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED2, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); assertNull("File returned was: " + downloadedFile + "; should have got a not found exception", downloadedFile); assertNoTempFiles(expectedFile); } @Test public void testGetInSecondProxiedRepoFirstFails() throws Exception { String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir, path); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); assertNotExistsInManagedDefaultRepo(expectedFile); // Configure Repository (usually done within archiva.xml configuration) saveRemoteRepositoryConfig("badproxied", "Bad Proxied", "test://bad.machine.com/repo/", "default"); wagonMock.get(EasyMock.eq(path), EasyMock.anyObject(File.class)); EasyMock.expectLastCall().andThrow(new ResourceDoesNotExistException("transfer failed")); wagonMockControl.replay(); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, "badproxied", false); saveConnector(ID_DEFAULT_MANAGED, ID_PROXIED2, false); // Attempt the proxy fetch. File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); wagonMockControl.verify(); File proxied2File = new File(REPOPATH_PROXIED2, path); assertFileEquals(expectedFile, downloadedFile, proxied2File); assertNoTempFiles(expectedFile); } @Test public void testGetAllRepositoriesFail() throws Exception { String path = "org/apache/maven/test/get-in-second-proxy/1.0/get-in-second-proxy-1.0.jar"; setupTestableManagedRepository(path); File expectedFile = new File(managedDefaultDir.getAbsoluteFile(), path); ArtifactReference artifact = managedDefaultRepository.toArtifactReference(path); assertNotExistsInManagedDefaultRepo(expectedFile); // Configure Repository (usually done within archiva.xml configuration) saveRemoteRepositoryConfig("badproxied1", "Bad Proxied 1", "test://bad.machine.com/repo/", "default"); saveRemoteRepositoryConfig("badproxied2", "Bad Proxied 2", "test://dead.machine.com/repo/", "default"); // Configure Connector (usually done within archiva.xml configuration) saveConnector(ID_DEFAULT_MANAGED, "badproxied1", false); saveConnector(ID_DEFAULT_MANAGED, "badproxied2", false); File tmpFile = new File(expectedFile.getParentFile(), expectedFile.getName() + ".tmp"); wagonMock.get(EasyMock.eq(path), EasyMock.anyObject(File.class)); EasyMock.expectLastCall().andThrow(new ResourceDoesNotExistException("Can't find resource.")); wagonMock.get(EasyMock.eq(path), EasyMock.anyObject(File.class)); EasyMock.expectLastCall().andThrow(new ResourceDoesNotExistException("Can't find resource.")); wagonMockControl.replay(); File downloadedFile = proxyHandler.fetchFromProxies(managedDefaultRepository, artifact); assertNotDownloaded(downloadedFile); wagonMockControl.verify(); assertNoTempFiles(expectedFile); // TODO: do not want failures to present as a not found [MRM-492] // TODO: How much information on each failure should we pass back to the user vs. logging in the proxy? } }