This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git


The following commit(s) were added to refs/heads/master by this push:
     new e897911  [MDEP-579] Regression: get goal does not pass server 
credentials to BasicRepositoryConnector
e897911 is described below

commit e897911067c643ee891bfc2b05a85f8c7ca658d5
Author: Pim Moerenhout <[email protected]>
AuthorDate: Sat Nov 2 11:54:20 2019 +0100

    [MDEP-579] Regression: get goal does not pass server credentials to 
BasicRepositoryConnector
---
 pom.xml                                            |  25 +++++
 .../apache/maven/plugins/dependency/GetMojo.java   |  17 +++-
 .../maven/plugins/dependency/TestGetMojo.java      | 101 ++++++++++++++++++++-
 src/test/resources/unit/get-test/realm.properties  |  19 ++++
 .../get-test/repository/test/test/1.0/test-1.0.jar | Bin 0 -> 2178 bytes
 .../repository/test/test/1.0/test-1.0.jar.sha1     |   1 +
 .../get-test/repository/test/test/1.0/test-1.0.pom |  34 +++++++
 .../repository/test/test/1.0/test-1.0.pom.sha1     |   1 +
 8 files changed, 191 insertions(+), 7 deletions(-)

diff --git a/pom.xml b/pom.xml
index 7c2d4e0..6f864f8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -91,6 +91,7 @@ under the License.
   <properties>
     <mavenVersion>3.0</mavenVersion>
     <doxiaVersion>1.9</doxiaVersion>
+    <jettyVersion>9.2.28.v20190418</jettyVersion>
     <pluginTestingVersion>2.1</pluginTestingVersion>
     <javaVersion>7</javaVersion>
   </properties>
@@ -314,6 +315,25 @@ under the License.
       <scope>provided</scope>
     </dependency>
 
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-server</artifactId>
+      <version>${jettyVersion}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-servlet</artifactId>
+      <version>${jettyVersion}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-webapp</artifactId>
+      <version>${jettyVersion}</version>
+      <scope>test</scope>
+    </dependency>
+
   </dependencies>
 
   <build>
@@ -334,6 +354,11 @@ under the License.
               
<exclude>src/it/projects/tree-multimodule/module-a/expected.txt</exclude>
               
<exclude>src/it/projects/tree-multimodule/module-b/expected.txt</exclude>
               <exclude>src/it/projects/tree-verbose/expected.txt</exclude>
+              <!--
+                These files contain real repository artifacts.
+              -->
+              
<exclude>src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1</exclude>
+              
<exclude>src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1</exclude>
             </excludes>
           </configuration>
         </plugin>
diff --git a/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java 
b/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java
index d434e64..420c71b 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/GetMojo.java
@@ -41,6 +41,8 @@ import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.settings.Settings;
 import org.apache.maven.shared.transfer.artifact.ArtifactCoordinate;
 import org.apache.maven.shared.transfer.artifact.DefaultArtifactCoordinate;
 import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver;
@@ -71,8 +73,8 @@ public class GetMojo
     private ArtifactResolver artifactResolver;
 
     /**
-    *
-    */
+     *
+     */
     @Component
     private DependencyResolver dependencyResolver;
 
@@ -85,6 +87,12 @@ public class GetMojo
     @Component( role = ArtifactRepositoryLayout.class )
     private Map<String, ArtifactRepositoryLayout> repositoryLayouts;
 
+    /**
+     * The repository system.
+     */
+    @Component
+    private RepositorySystem repositorySystem;
+
     private DefaultDependableCoordinate coordinate = new 
DefaultDependableCoordinate();
 
     /**
@@ -214,6 +222,11 @@ public class GetMojo
             ProjectBuildingRequest buildingRequest =
                 new DefaultProjectBuildingRequest( 
session.getProjectBuildingRequest() );
 
+            Settings settings = session.getSettings();
+            repositorySystem.injectMirror( repoList, settings.getMirrors() );
+            repositorySystem.injectProxy( repoList, settings.getProxies() );
+            repositorySystem.injectAuthentication( repoList, 
settings.getServers() );
+
             buildingRequest.setRemoteRepositories( repoList );
 
             if ( transitive )
diff --git a/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java 
b/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java
index 32d602c..d1a94c9 100644
--- a/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java
+++ b/src/test/java/org/apache/maven/plugins/dependency/TestGetMojo.java
@@ -20,13 +20,27 @@ package org.apache.maven.plugins.dependency;
  */
 
 import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collections;
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.LegacySupport;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
+import org.apache.maven.settings.Server;
+import org.apache.maven.settings.Settings;
+import org.eclipse.jetty.security.ConstraintMapping;
+import org.eclipse.jetty.security.ConstraintSecurityHandler;
+import org.eclipse.jetty.security.HashLoginService;
+import org.eclipse.jetty.security.LoginService;
+import org.eclipse.jetty.security.authentication.BasicAuthenticator;
+import org.eclipse.jetty.server.handler.ContextHandler;
+import org.eclipse.jetty.server.handler.ResourceHandler;
+import org.eclipse.jetty.util.security.Constraint;
 import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
 import org.sonatype.aether.util.DefaultRepositorySystemSession;
 
@@ -35,7 +49,7 @@ public class TestGetMojo
 {
     GetMojo mojo;
 
-    protected void z_setUp()
+    protected void setUp()
         throws Exception
     {
         // required for mojo lookups to work
@@ -48,7 +62,14 @@ public class TestGetMojo
         assertNotNull( mojo );
 
         LegacySupport legacySupport = lookup( LegacySupport.class );
-        legacySupport.setSession( newMavenSession( new MavenProjectStub() ) );
+        MavenSession session = newMavenSession( new MavenProjectStub() );
+        Settings settings = session.getSettings();
+        Server server = new Server();
+        server.setId( "myserver" );
+        server.setUsername( "foo" );
+        server.setPassword( "bar" );
+        settings.addServer( server );
+        legacySupport.setSession( session );
         DefaultRepositorySystemSession repoSession =
             (DefaultRepositorySystemSession) 
legacySupport.getRepositorySession();
         repoSession.setLocalRepositoryManager( new 
SimpleLocalRepositoryManager( testDir.getAbsolutePath() ) );
@@ -65,7 +86,7 @@ public class TestGetMojo
      * 
      * @throws Exception in case of errors
      */
-    public void z_testTransitive()
+    public void testTransitive()
         throws Exception
     {
         // Set properties, transitive = default value = true
@@ -88,7 +109,7 @@ public class TestGetMojo
      * 
      * @throws Exception in case of errors
      */
-    public void z_testRemoteRepositories()
+    public void testRemoteRepositories()
         throws Exception
     {
         setVariableValueToObject( mojo, "remoteRepositories", 
"central::default::http://repo1.maven.apache.org/maven2,";
@@ -101,11 +122,36 @@ public class TestGetMojo
     }
 
     /**
+     * Test remote repositories parameter with basic authentication
+     *
+     * @throws Exception in case of errors
+     */
+    public void testRemoteRepositoriesAuthentication()
+        throws Exception
+    {
+        org.eclipse.jetty.server.Server server = createServer();
+        try {
+            server.start();
+
+            setVariableValueToObject( mojo, "remoteRepositories", 
"myserver::default::" + server.getURI() );
+            mojo.setGroupId( "test" );
+            mojo.setArtifactId( "test" );
+            mojo.setVersion( "1.0" );
+
+            mojo.execute();
+        }
+        finally
+        {
+            server.stop();
+        }
+    }
+
+    /**
      * Test parsing of the remote repositories parameter
      * 
      * @throws Exception in case of errors
      */
-    public void z_testParseRepository()
+    public void testParseRepository()
         throws Exception
     {
         ArtifactRepository repo;
@@ -154,4 +200,49 @@ public class TestGetMojo
             // expected
         }
     }
+
+    private ContextHandler createContextHandler()
+    {
+        ResourceHandler resourceHandler = new ResourceHandler();
+        Path resourceDirectory = Paths.get( "src", "test", "resources", 
"unit", "get-test", "repository" );
+        resourceHandler.setResourceBase( resourceDirectory.toString() );
+        resourceHandler.setDirectoriesListed( true );
+
+        ContextHandler contextHandler = new ContextHandler( "/maven" );
+        contextHandler.setHandler( resourceHandler );
+        return contextHandler;
+    }
+
+    private org.eclipse.jetty.server.Server createServer()
+    {
+        org.eclipse.jetty.server.Server server = new 
org.eclipse.jetty.server.Server( 0 );
+        server.setStopAtShutdown( true );
+
+        LoginService loginService = new HashLoginService( "myrealm",
+            "src/test/resources/unit/get-test/realm.properties" );
+        server.addBean( loginService );
+
+        ConstraintSecurityHandler security = new ConstraintSecurityHandler();
+        server.setHandler( security );
+
+        Constraint constraint = new Constraint();
+        constraint.setName( "auth" );
+        constraint.setAuthenticate( true );
+        constraint.setRoles(new String[]{ "userrole" });
+
+        ConstraintMapping mapping = new ConstraintMapping();
+        mapping.setPathSpec( "/*" );
+        mapping.setConstraint( constraint );
+
+        security.setConstraintMappings( Collections.singletonList( mapping ) );
+        security.setAuthenticator( new BasicAuthenticator() );
+        security.setLoginService( loginService );
+
+        ContextHandler contextHandler = createContextHandler();
+        contextHandler.setServer( server );
+
+        security.setHandler( contextHandler );
+        server.setHandler( security );
+        return server;
+    }
 }
diff --git a/src/test/resources/unit/get-test/realm.properties 
b/src/test/resources/unit/get-test/realm.properties
new file mode 100644
index 0000000..e616630
--- /dev/null
+++ b/src/test/resources/unit/get-test/realm.properties
@@ -0,0 +1,19 @@
+# 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.
+
+# username: password[,rolename ...]
+foo: bar,userrole
diff --git 
a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar 
b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar
new file mode 100644
index 0000000..fdf53e9
Binary files /dev/null and 
b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar differ
diff --git 
a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1 
b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1
new file mode 100644
index 0000000..e1d138a
--- /dev/null
+++ 
b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.jar.sha1
@@ -0,0 +1 @@
+cd6c154c2c15ff5d75bd15c62388db0057ce5598
\ No newline at end of file
diff --git 
a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom 
b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom
new file mode 100644
index 0000000..1add1ce
--- /dev/null
+++ b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>test</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0</version>
+
+  <properties>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+  </properties>
+
+</project>
\ No newline at end of file
diff --git 
a/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1 
b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1
new file mode 100644
index 0000000..5dab4ca
--- /dev/null
+++ 
b/src/test/resources/unit/get-test/repository/test/test/1.0/test-1.0.pom.sha1
@@ -0,0 +1 @@
+fc2169034b2608b4cee1fd4af9bb0aa11c948fac
\ No newline at end of file

Reply via email to