Kaynağa Gözat

MRM-1933, MRM-1940: Fixing repository check

Remove trailing slashes from the remote repositories
Use special check paths for certain servers
tags/archiva-2.2.3
Martin Stockhammer 7 yıl önce
ebeveyn
işleme
2bf5154f13

+ 4
- 2
archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java Dosyayı Görüntüle

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

+ 35
- 7
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java Dosyayı Görüntüle

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

+ 52
- 0
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java Dosyayı Görüntüle

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

}

Loading…
İptal
Kaydet