You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2017/05/05 11:11:09 UTC

archiva git commit: MRM-1933, MRM-1940: Fixing repository check

Repository: archiva
Updated Branches:
  refs/heads/master b7c191b33 -> 2bf5154f1


MRM-1933, MRM-1940: Fixing repository check

Remove trailing slashes from the remote repositories
Use special check paths for certain servers


Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/2bf5154f
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/2bf5154f
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/2bf5154f

Branch: refs/heads/master
Commit: 2bf5154f1366fc21c4ecb02ef4ef71ca6fdc5a45
Parents: b7c191b
Author: Martin Stockhammer <ma...@apache.org>
Authored: Thu May 4 00:22:31 2017 +0200
Committer: Martin Stockhammer <ma...@apache.org>
Committed: Thu May 4 00:22:31 2017 +0200

----------------------------------------------------------------------
 .../admin/model/beans/RemoteRepository.java     |  6 ++-
 .../DefaultRemoteRepositoriesService.java       | 42 +++++++++++++---
 .../services/RemoteRepositoriesServiceTest.java | 52 ++++++++++++++++++++
 3 files changed, 91 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/2bf5154f/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java
----------------------------------------------------------------------
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 db8021d..fdab243 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()

http://git-wip-us.apache.org/repos/asf/archiva/blob/2bf5154f/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java
----------------------------------------------------------------------
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 5a79487..a6b341a 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;
+    }
 }

http://git-wip-us.apache.org/repos/asf/archiva/blob/2bf5154f/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java
----------------------------------------------------------------------
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 3d284e4..d3d6672 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" );
+    }
+
 }