1 package org.apache.maven.plugins.dependency;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.net.InetAddress;
24 import java.nio.file.Path;
25 import java.nio.file.Paths;
26 import java.util.Collections;
27
28 import org.apache.maven.artifact.repository.ArtifactRepository;
29 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
30 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
31 import org.apache.maven.execution.MavenSession;
32 import org.apache.maven.plugin.LegacySupport;
33 import org.apache.maven.plugin.MojoFailureException;
34 import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
35 import org.apache.maven.settings.Server;
36 import org.apache.maven.settings.Settings;
37 import org.eclipse.jetty.security.ConstraintMapping;
38 import org.eclipse.jetty.security.ConstraintSecurityHandler;
39 import org.eclipse.jetty.security.HashLoginService;
40 import org.eclipse.jetty.security.LoginService;
41 import org.eclipse.jetty.security.authentication.BasicAuthenticator;
42 import org.eclipse.jetty.server.ServerConnector;
43 import org.eclipse.jetty.server.handler.ContextHandler;
44 import org.eclipse.jetty.server.handler.ResourceHandler;
45 import org.eclipse.jetty.util.security.Constraint;
46
47 public class TestGetMojo
48 extends AbstractDependencyMojoTestCase
49 {
50 private GetMojo mojo;
51
52 protected void setUp()
53 throws Exception
54 {
55
56 super.setUp( "markers", false );
57
58 File testPom = new File( getBasedir(), "target/test-classes/unit/get-test/plugin-config.xml" );
59 mojo = (GetMojo) lookupMojo( "get", testPom );
60
61 assertNotNull( mojo );
62
63 LegacySupport legacySupport = lookup( LegacySupport.class );
64 MavenSession mavenSession = newMavenSession( new MavenProjectStub() );
65 Settings settings = mavenSession.getSettings();
66 Server server = new Server();
67 server.setId( "myserver" );
68 server.setUsername( "foo" );
69 server.setPassword( "bar" );
70 settings.addServer( server );
71 legacySupport.setSession( mavenSession );
72
73 installLocalRepository( legacySupport );
74
75 setVariableValueToObject( mojo, "session", legacySupport.getSession() );
76 }
77
78
79
80
81
82
83 public void testTransitive()
84 throws Exception
85 {
86
87 setVariableValueToObject( mojo, "transitive", Boolean.FALSE );
88 setVariableValueToObject( mojo, "remoteRepositories",
89 "central::default::https://repo.maven.apache.org/maven2" );
90 mojo.setGroupId( "org.apache.maven" );
91 mojo.setArtifactId( "maven-model" );
92 mojo.setVersion( "2.0.9" );
93
94 mojo.execute();
95
96
97 setVariableValueToObject( mojo, "transitive", Boolean.FALSE );
98 mojo.execute();
99 }
100
101
102
103
104
105
106 public void testRemoteRepositories()
107 throws Exception
108 {
109 setVariableValueToObject( mojo, "remoteRepositories", "central::default::https://repo.maven.apache.org/maven2,"
110 + "central::::https://repo.maven.apache.org/maven2," + "https://repo.maven.apache.org/maven2" );
111 mojo.setGroupId( "org.apache.maven" );
112 mojo.setArtifactId( "maven-model" );
113 mojo.setVersion( "2.0.9" );
114
115 mojo.execute();
116 }
117
118
119
120
121
122
123 public void testRemoteRepositoriesAuthentication()
124 throws Exception
125 {
126 org.eclipse.jetty.server.Server server = createServer();
127 try {
128 server.start();
129 ServerConnector serverConnector = (ServerConnector)server.getConnectors()[0];
130 String url = "http://" + (serverConnector.getHost() == null ?
131 InetAddress.getLoopbackAddress().getHostName() : serverConnector.getHost());
132 url = url + ":" + serverConnector.getLocalPort() + "/maven";
133
134 setVariableValueToObject( mojo, "remoteRepositories", "myserver::default::" + url );
135 mojo.setGroupId( "test" );
136 mojo.setArtifactId( "test" );
137 mojo.setVersion( "1.0" );
138
139 mojo.execute();
140 }
141 finally
142 {
143 server.stop();
144 }
145 }
146
147
148
149
150
151
152 public void testParseRepository()
153 throws Exception
154 {
155 ArtifactRepositoryPolicy policy = null;
156 ArtifactRepository repo = mojo.parseRepository( "central::default::https://repo.maven.apache.org/maven2", policy );
157 assertEquals( "central", repo.getId() );
158 assertEquals( DefaultRepositoryLayout.class, repo.getLayout().getClass() );
159 assertEquals( "https://repo.maven.apache.org/maven2", repo.getUrl() );
160
161 try
162 {
163 repo = mojo.parseRepository( "central::legacy::https://repo.maven.apache.org/maven2", policy );
164 fail( "Exception expected: legacy repository not supported anymore" );
165 }
166 catch ( MojoFailureException e )
167 {
168 }
169
170 repo = mojo.parseRepository( "central::::https://repo.maven.apache.org/maven2", policy );
171 assertEquals( "central", repo.getId() );
172 assertEquals( DefaultRepositoryLayout.class, repo.getLayout().getClass() );
173 assertEquals( "https://repo.maven.apache.org/maven2", repo.getUrl() );
174
175 repo = mojo.parseRepository( "https://repo.maven.apache.org/maven2", policy );
176 assertEquals( "temp", repo.getId() );
177 assertEquals( DefaultRepositoryLayout.class, repo.getLayout().getClass() );
178 assertEquals( "https://repo.maven.apache.org/maven2", repo.getUrl() );
179
180 try
181 {
182 mojo.parseRepository( "::::https://repo.maven.apache.org/maven2", policy );
183 fail( "Exception expected" );
184 }
185 catch ( MojoFailureException e )
186 {
187
188 }
189
190 try
191 {
192 mojo.parseRepository( "central::https://repo.maven.apache.org/maven2", policy );
193 fail( "Exception expected" );
194 }
195 catch ( MojoFailureException e )
196 {
197
198 }
199 }
200
201 private ContextHandler createContextHandler()
202 {
203 ResourceHandler resourceHandler = new ResourceHandler();
204 Path resourceDirectory = Paths.get( "src", "test", "resources", "unit", "get-test", "repository" );
205 resourceHandler.setResourceBase( resourceDirectory.toString() );
206 resourceHandler.setDirectoriesListed( true );
207
208 ContextHandler contextHandler = new ContextHandler( "/maven" );
209 contextHandler.setHandler( resourceHandler );
210 return contextHandler;
211 }
212
213 private org.eclipse.jetty.server.Server createServer()
214 {
215 org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server( 0 );
216 server.setStopAtShutdown( true );
217
218 LoginService loginService = new HashLoginService( "myrealm",
219 "src/test/resources/unit/get-test/realm.properties" );
220 server.addBean( loginService );
221
222 ConstraintSecurityHandler security = new ConstraintSecurityHandler();
223 server.setHandler( security );
224
225 Constraint constraint = new Constraint();
226 constraint.setName( "auth" );
227 constraint.setAuthenticate( true );
228 constraint.setRoles(new String[]{ "userrole" });
229
230 ConstraintMapping mapping = new ConstraintMapping();
231 mapping.setPathSpec( "/*" );
232 mapping.setConstraint( constraint );
233
234 security.setConstraintMappings( Collections.singletonList( mapping ) );
235 security.setAuthenticator( new BasicAuthenticator() );
236 security.setLoginService( loginService );
237
238 ContextHandler contextHandler = createContextHandler();
239 contextHandler.setServer( server );
240
241 security.setHandler( contextHandler );
242 server.setHandler( security );
243 return server;
244 }
245 }