View Javadoc
1   package org.apache.maven.plugins.dependency;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.File;
23  import java.nio.file.Path;
24  import java.nio.file.Paths;
25  import java.util.Collections;
26  
27  import org.apache.maven.artifact.repository.ArtifactRepository;
28  import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
29  import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
30  import org.apache.maven.execution.MavenSession;
31  import org.apache.maven.plugin.LegacySupport;
32  import org.apache.maven.plugin.MojoFailureException;
33  import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
34  import org.apache.maven.settings.Server;
35  import org.apache.maven.settings.Settings;
36  import org.eclipse.jetty.security.ConstraintMapping;
37  import org.eclipse.jetty.security.ConstraintSecurityHandler;
38  import org.eclipse.jetty.security.HashLoginService;
39  import org.eclipse.jetty.security.LoginService;
40  import org.eclipse.jetty.security.authentication.BasicAuthenticator;
41  import org.eclipse.jetty.server.handler.ContextHandler;
42  import org.eclipse.jetty.server.handler.ResourceHandler;
43  import org.eclipse.jetty.util.security.Constraint;
44  
45  public class TestGetMojo
46      extends AbstractDependencyMojoTestCase
47  {
48      private GetMojo mojo;
49  
50      protected void setUp()
51          throws Exception
52      {
53          // required for mojo lookups to work
54          super.setUp( "markers", false );
55  
56          File testPom = new File( getBasedir(), "target/test-classes/unit/get-test/plugin-config.xml" );
57          mojo = (GetMojo) lookupMojo( "get", testPom );
58  
59          assertNotNull( mojo );
60  
61          LegacySupport legacySupport = lookup( LegacySupport.class );
62          MavenSession mavenSession = newMavenSession( new MavenProjectStub() );
63          Settings settings = mavenSession.getSettings();
64          Server server = new Server();
65          server.setId( "myserver" );
66          server.setUsername( "foo" );
67          server.setPassword( "bar" );
68          settings.addServer( server );
69          legacySupport.setSession( mavenSession );
70          
71          installLocalRepository( legacySupport );
72          
73          setVariableValueToObject( mojo, "session", legacySupport.getSession() );
74      }
75  
76      /**
77       * Test transitive parameter
78       * 
79       * @throws Exception in case of errors
80       */
81      public void testTransitive()
82          throws Exception
83      {
84          // Set properties, transitive = default value = true
85          setVariableValueToObject( mojo, "transitive", Boolean.FALSE );
86          setVariableValueToObject( mojo, "remoteRepositories",
87                                    "central::default::https://repo.maven.apache.org/maven2" );
88          mojo.setGroupId( "org.apache.maven" );
89          mojo.setArtifactId( "maven-model" );
90          mojo.setVersion( "2.0.9" );
91  
92          mojo.execute();
93  
94          // Set properties, transitive = false
95          setVariableValueToObject( mojo, "transitive", Boolean.FALSE );
96          mojo.execute();
97      }
98  
99      /**
100      * Test remote repositories parameter
101      * 
102      * @throws Exception in case of errors
103      */
104     public void testRemoteRepositories()
105         throws Exception
106     {
107         setVariableValueToObject( mojo, "remoteRepositories", "central::default::https://repo.maven.apache.org/maven2,"
108             + "central::::https://repo.maven.apache.org/maven2," + "https://repo.maven.apache.org/maven2" );
109         mojo.setGroupId( "org.apache.maven" );
110         mojo.setArtifactId( "maven-model" );
111         mojo.setVersion( "2.0.9" );
112 
113         mojo.execute();
114     }
115 
116     /**
117      * Test remote repositories parameter with basic authentication
118      *
119      * @throws Exception in case of errors
120      */
121     public void testRemoteRepositoriesAuthentication()
122         throws Exception
123     {
124         org.eclipse.jetty.server.Server server = createServer();
125         try {
126             server.start();
127 
128             setVariableValueToObject( mojo, "remoteRepositories", "myserver::default::" + server.getURI() );
129             mojo.setGroupId( "test" );
130             mojo.setArtifactId( "test" );
131             mojo.setVersion( "1.0" );
132 
133             mojo.execute();
134         }
135         finally
136         {
137             server.stop();
138         }
139     }
140 
141     /**
142      * Test parsing of the remote repositories parameter
143      * 
144      * @throws Exception in case of errors
145      */
146     public void testParseRepository()
147         throws Exception
148     {
149         ArtifactRepositoryPolicy policy = null;
150         ArtifactRepository repo = mojo.parseRepository( "central::default::https://repo.maven.apache.org/maven2", policy );
151         assertEquals( "central", repo.getId() );
152         assertEquals( DefaultRepositoryLayout.class, repo.getLayout().getClass() );
153         assertEquals( "https://repo.maven.apache.org/maven2", repo.getUrl() );
154 
155         try
156         {
157             repo = mojo.parseRepository( "central::legacy::https://repo.maven.apache.org/maven2", policy );
158             fail( "Exception expected: legacy repository not supported anymore" );
159         }
160         catch ( MojoFailureException e )
161         {
162         }
163 
164         repo = mojo.parseRepository( "central::::https://repo.maven.apache.org/maven2", policy );
165         assertEquals( "central", repo.getId() );
166         assertEquals( DefaultRepositoryLayout.class, repo.getLayout().getClass() );
167         assertEquals( "https://repo.maven.apache.org/maven2", repo.getUrl() );
168 
169         repo = mojo.parseRepository( "https://repo.maven.apache.org/maven2", policy );
170         assertEquals( "temp", repo.getId() );
171         assertEquals( DefaultRepositoryLayout.class, repo.getLayout().getClass() );
172         assertEquals( "https://repo.maven.apache.org/maven2", repo.getUrl() );
173 
174         try
175         {
176             mojo.parseRepository( "::::https://repo.maven.apache.org/maven2", policy );
177             fail( "Exception expected" );
178         }
179         catch ( MojoFailureException e )
180         {
181             // expected
182         }
183 
184         try
185         {
186             mojo.parseRepository( "central::https://repo.maven.apache.org/maven2", policy );
187             fail( "Exception expected" );
188         }
189         catch ( MojoFailureException e )
190         {
191             // expected
192         }
193     }
194 
195     private ContextHandler createContextHandler()
196     {
197         ResourceHandler resourceHandler = new ResourceHandler();
198         Path resourceDirectory = Paths.get( "src", "test", "resources", "unit", "get-test", "repository" );
199         resourceHandler.setResourceBase( resourceDirectory.toString() );
200         resourceHandler.setDirectoriesListed( true );
201 
202         ContextHandler contextHandler = new ContextHandler( "/maven" );
203         contextHandler.setHandler( resourceHandler );
204         return contextHandler;
205     }
206 
207     private org.eclipse.jetty.server.Server createServer()
208     {
209         org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server( 0 );
210         server.setStopAtShutdown( true );
211 
212         LoginService loginService = new HashLoginService( "myrealm",
213             "src/test/resources/unit/get-test/realm.properties" );
214         server.addBean( loginService );
215 
216         ConstraintSecurityHandler security = new ConstraintSecurityHandler();
217         server.setHandler( security );
218 
219         Constraint constraint = new Constraint();
220         constraint.setName( "auth" );
221         constraint.setAuthenticate( true );
222         constraint.setRoles(new String[]{ "userrole" });
223 
224         ConstraintMapping mapping = new ConstraintMapping();
225         mapping.setPathSpec( "/*" );
226         mapping.setConstraint( constraint );
227 
228         security.setConstraintMappings( Collections.singletonList( mapping ) );
229         security.setAuthenticator( new BasicAuthenticator() );
230         security.setLoginService( loginService );
231 
232         ContextHandler contextHandler = createContextHandler();
233         contextHandler.setServer( server );
234 
235         security.setHandler( contextHandler );
236         server.setHandler( security );
237         return server;
238     }
239 }