diff options
author | Martin Stockhammer <martin_s@apache.org> | 2017-05-04 00:22:31 +0200 |
---|---|---|
committer | Martin Stockhammer <martin_s@apache.org> | 2017-05-04 00:22:31 +0200 |
commit | 2bf5154f1366fc21c4ecb02ef4ef71ca6fdc5a45 (patch) | |
tree | 0a380c3e0115b0d07e9c355b40fea6215ff02e12 | |
parent | b7c191b331ac6a2f09a643835afdac154c9554fa (diff) | |
download | archiva-2bf5154f1366fc21c4ecb02ef4ef71ca6fdc5a45.tar.gz archiva-2bf5154f1366fc21c4ecb02ef4ef71ca6fdc5a45.zip |
MRM-1933, MRM-1940: Fixing repository check
Remove trailing slashes from the remote repositories
Use special check paths for certain servers
3 files changed, 91 insertions, 9 deletions
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java index db8021d86..fdab2432e 100644 --- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java +++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java @@ -19,6 +19,8 @@ package org.apache.archiva.admin.model.beans; * under the License. */ +import org.apache.commons.lang.StringUtils; + import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; import java.util.ArrayList; @@ -112,7 +114,7 @@ public class RemoteRepository int timeout ) { super( id, name, layout ); - this.url = url; + this.url = StringUtils.stripEnd(url,"/"); this.userName = userName; this.password = password; this.timeout = timeout; @@ -135,7 +137,7 @@ public class RemoteRepository public void setUrl( String url ) { - this.url = url; + this.url = StringUtils.stripEnd(url,"/"); } public String getUserName() diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java index 5a7948719..a6b341aa7 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java @@ -38,11 +38,14 @@ import org.apache.maven.wagon.proxy.ProxyInfo; import org.apache.maven.wagon.repository.Repository; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.ws.rs.core.Response; import java.net.URL; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @author Olivier Lamy @@ -67,6 +70,16 @@ public class DefaultRemoteRepositoriesService int checkReadTimeout = 10000; int checkTimeout = 9000; + // TODO: make this configurable + private Map<String,String> remoteConnectivityCheckPaths = new HashMap<>(); + + @PostConstruct + private void init() { + // default initialization for known servers + remoteConnectivityCheckPaths.put("http://download.oracle.com/maven","com/sleepycat/je/license.txt"); + remoteConnectivityCheckPaths.put("https://download.oracle.com/maven","com/sleepycat/je/license.txt"); + } + @Override public List<RemoteRepository> getRemoteRepositories() throws ArchivaRestServiceException @@ -197,12 +210,17 @@ public class DefaultRemoteRepositoriesService proxyInfo.setUserName( networkProxy.getUsername() ); proxyInfo.setPassword( networkProxy.getPassword() ); } + String url = StringUtils.stripEnd(remoteRepository.getUrl(),"/"); + wagon.connect( new Repository( remoteRepository.getId(), url ), proxyInfo ); - wagon.connect( new Repository( remoteRepository.getId(), remoteRepository.getUrl() ), proxyInfo ); - - // we only check connectivity as remote repo can be empty - // MRM-1909: Wagon implementation appends a slash already - wagon.getFileList( "" ); + // MRM-1933, there are certain servers that do not allow browsing + if (remoteConnectivityCheckPaths.containsKey(url)) { + return wagon.resourceExists(remoteConnectivityCheckPaths.get(url)); + } else { + // we only check connectivity as remote repo can be empty + // MRM-1909: Wagon implementation appends a slash already + wagon.getFileList(""); + } return Boolean.TRUE; } @@ -213,8 +231,10 @@ public class DefaultRemoteRepositoriesService } catch ( Exception e ) { - throw new ArchivaRestServiceException( e.getMessage(), - Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e ); + // This service returns either true or false, Exception cannot be handled by the clients + log.debug("Exception occured on connectivity test.", e); + log.info("Connection exception: {}", e.getMessage()); + return Boolean.FALSE; } } @@ -234,4 +254,12 @@ public class DefaultRemoteRepositoriesService public void setCheckTimeout(int checkTimeout) { this.checkTimeout = checkTimeout; } + + public Map<String, String> getRemoteConnectivityCheckPaths() { + return remoteConnectivityCheckPaths; + } + + public void setRemoteConnectivityCheckPaths(Map<String, String> remoteConnectivityCheckPaths) { + this.remoteConnectivityCheckPaths = remoteConnectivityCheckPaths; + } } diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java index 3d284e452..d3d667283 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java @@ -161,10 +161,62 @@ public class RemoteRepositoriesServiceTest } + /* + * Check maven repository + */ + @Test + public void checkRemoteConnectivity2() + throws Exception { + RemoteRepositoriesService service = getRemoteRepositoriesService(); + + WebClient.client(service).header("Authorization", authorizationHeader); + + int initialSize = service.getRemoteRepositories().size(); + + service.addRemoteRepository(getRemoteMavenRepository()); + + assertTrue(service.checkRemoteConnectivity("id-maven1")); + + } + + + /* + * Check oracle repository that allows not browsing (MRM-1933) + */ + @Test + public void checkRemoteConnectivity3() + throws Exception { + RemoteRepositoriesService service = getRemoteRepositoriesService(); + + WebClient.client(service).header("Authorization", authorizationHeader); + WebClient.client(service).accept("application/json"); + + int initialSize = service.getRemoteRepositories().size(); + + service.addRemoteRepository(getRemoteOracleRepository()); + + assertTrue(service.checkRemoteConnectivity("id-oracle")); + + } + RemoteRepository getRemoteRepository() { return new RemoteRepository( "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120, "cool repo" ); } + + RemoteRepository getRemoteMavenRepository() + { + return new RemoteRepository( "id-maven1", "Maven1", "http://repo.maven.apache.org/maven2", "default", "foo", "foopassword", 120, + "cool repo3" ); + } + + + RemoteRepository getRemoteOracleRepository() + { + return new RemoteRepository( "id-oracle", "Oracle", "http://download.oracle.com/maven", "default", "foo", "foopassword", 120, + "cool repo4" ); + } + } |