MRM-1933, MRM-1940: Fixing repository check

Remove trailing slashes from the remote repositories
Use special check paths for certain servers
This commit is contained in:
Martin Stockhammer 2017-05-04 00:22:31 +02:00
parent b7c191b331
commit 2bf5154f13
3 changed files with 91 additions and 9 deletions

View File

@ -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()

View File

@ -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;
}
}

View File

@ -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" );
}
}