1 package org.apache.maven.plugins.site;
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.util.Arrays;
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28
29 import org.apache.commons.io.FileUtils;
30 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
31 import org.apache.maven.doxia.tools.SiteTool;
32 import org.apache.maven.execution.DefaultMavenExecutionRequest;
33 import org.apache.maven.execution.MavenExecutionRequest;
34 import org.apache.maven.execution.MavenSession;
35 import org.apache.maven.plugin.AbstractMojo;
36 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
37 import org.apache.maven.plugins.site.SimpleDavServerHandler.HttpRequest;
38 import org.apache.maven.plugins.site.stubs.SiteMavenProjectStub;
39 import org.apache.maven.settings.Proxy;
40 import org.apache.maven.settings.Settings;
41 import org.codehaus.plexus.util.ReflectionUtils;
42 import org.junit.Before;
43 import org.junit.Test;
44 import org.junit.runner.RunWith;
45 import org.junit.runners.JUnit4;
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48
49
50
51
52
53 @RunWith(JUnit4.class)
54 public abstract class AbstractSiteDeployWebDavTest
55 extends AbstractMojoTestCase
56 {
57
58 File siteTargetPath = new File( getBasedir() + File.separator + "target" + File.separator + "siteTargetDeploy" );
59
60 private Logger log = LoggerFactory.getLogger( getClass() );
61
62 @Before
63 public void setUp()
64 throws Exception
65 {
66 super.setUp();
67 if ( !siteTargetPath.exists() )
68 {
69 siteTargetPath.mkdirs();
70 FileUtils.cleanDirectory( siteTargetPath );
71 }
72 }
73
74 abstract String getMojoName();
75
76 abstract AbstractMojo getMojo( File pluginXmlFile )
77 throws Exception;
78
79 @Test
80 public void noAuthzDavDeploy()
81 throws Exception
82 {
83 FileUtils.cleanDirectory( siteTargetPath );
84 SimpleDavServerHandler simpleDavServerHandler = new SimpleDavServerHandler( siteTargetPath );
85
86 try
87 {
88 File pluginXmlFile = getTestFile( "src/test/resources/unit/deploy-dav/pom.xml" );
89 AbstractMojo mojo = getMojo( pluginXmlFile );
90 assertNotNull( mojo );
91 SiteMavenProjectStub siteMavenProjectStub =
92 new SiteMavenProjectStub( "src/test/resources/unit/deploy-dav/pom.xml" );
93
94 assertTrue( "dav server port not available: " + simpleDavServerHandler.getPort(),
95 simpleDavServerHandler.getPort() > 0 );
96
97 siteMavenProjectStub.getDistributionManagement().getSite()
98 .setUrl( "dav:http://localhost:" + simpleDavServerHandler.getPort() + "/site/" );
99
100 setVariableValueToObject( mojo, "project", siteMavenProjectStub );
101 Settings settings = new Settings();
102 setVariableValueToObject( mojo, "settings", settings );
103 File inputDirectory = new File( "src/test/resources/unit/deploy-dav/target/site" );
104
105 setVariableValueToObject( mojo, "inputDirectory", inputDirectory );
106 mojo.execute();
107
108 assertContentInFiles();
109 assertFalse( requestsContainsProxyUse( simpleDavServerHandler.httpRequests ) );
110 }
111 finally
112 {
113 simpleDavServerHandler.stop();
114 }
115 }
116
117 @Test
118 public void davDeployThruProxyWithoutAuthzInProxy()
119 throws Exception
120 {
121
122 FileUtils.cleanDirectory( siteTargetPath );
123 SimpleDavServerHandler simpleDavServerHandler = new SimpleDavServerHandler( siteTargetPath );
124 try
125 {
126 File pluginXmlFile = getTestFile( "src/test/resources/unit/deploy-dav/pom.xml" );
127 AbstractMojo mojo = getMojo( pluginXmlFile );
128 assertNotNull( mojo );
129 SiteMavenProjectStub siteMavenProjectStub =
130 new SiteMavenProjectStub( "src/test/resources/unit/deploy-dav/pom.xml" );
131
132 String siteUrl = "dav:http://toto.com/site/";
133 siteMavenProjectStub.getDistributionManagement().getSite().setUrl( siteUrl );
134
135 setVariableValueToObject( mojo, "project", siteMavenProjectStub );
136 Settings settings = new Settings();
137 Proxy proxy = new Proxy();
138
139
140 proxy.setActive( true );
141 proxy.setHost( "localhost" );
142 proxy.setPort( simpleDavServerHandler.getPort() );
143 proxy.setProtocol( "http" );
144 proxy.setNonProxyHosts( "www.google.com|*.somewhere.com" );
145 settings.addProxy( proxy );
146
147 setVariableValueToObject( mojo, "settings", settings );
148
149 MavenExecutionRequest request = new DefaultMavenExecutionRequest();
150 request.setProxies( Arrays.asList( proxy ) );
151 MavenSession mavenSession = new MavenSession( getContainer(), null, request, null );
152
153 setVariableValueToObject( mojo, "mavenSession", mavenSession );
154
155 File inputDirectory = new File( "src/test/resources/unit/deploy-dav/target/site" );
156
157 setVariableValueToObject( mojo, "inputDirectory", inputDirectory );
158 mojo.execute();
159
160 assertContentInFiles();
161
162 assertTrue( requestsContainsProxyUse( simpleDavServerHandler.httpRequests ) );
163
164 for ( HttpRequest rq : simpleDavServerHandler.httpRequests )
165 {
166 log.info( rq.toString() );
167 }
168
169 }
170 finally
171 {
172 simpleDavServerHandler.stop();
173 }
174
175 }
176
177 @Test
178 public void davDeployThruProxyWitAuthzInProxy() throws Exception
179 {
180
181 FileUtils.cleanDirectory( siteTargetPath );
182
183
184 Map<String, String> authentications = new HashMap<String, String>();
185 authentications.put( "foo", "titi" );
186
187 AuthAsyncProxyServlet servlet = new AuthAsyncProxyServlet( authentications, siteTargetPath );
188
189 SimpleDavServerHandler simpleDavServerHandler = new SimpleDavServerHandler( servlet );
190 try
191 {
192 File pluginXmlFile = getTestFile( "src/test/resources/unit/deploy-dav/pom.xml" );
193 AbstractMojo mojo = getMojo( pluginXmlFile );
194 assertNotNull( mojo );
195 SiteMavenProjectStub siteMavenProjectStub =
196 new SiteMavenProjectStub( "src/test/resources/unit/deploy-dav/pom.xml" );
197
198 siteMavenProjectStub.getDistributionManagement().getSite()
199 .setUrl( "dav:http://toto.com/site/" );
200
201 setVariableValueToObject( mojo, "project", siteMavenProjectStub );
202 Settings settings = new Settings();
203 Proxy proxy = new Proxy();
204
205
206 proxy.setActive( true );
207 proxy.setHost( "localhost" );
208 proxy.setPort( simpleDavServerHandler.getPort() );
209 proxy.setProtocol( "dav" );
210 proxy.setUsername( "foo" );
211 proxy.setPassword( "titi" );
212 proxy.setNonProxyHosts( "www.google.com|*.somewhere.com" );
213 settings.addProxy( proxy );
214
215 setVariableValueToObject( mojo, "settings", settings );
216
217 MavenExecutionRequest request = new DefaultMavenExecutionRequest();
218 request.setProxies( Arrays.asList( proxy ) );
219 MavenSession mavenSession = new MavenSession( getContainer(), null, request, null );
220
221 setVariableValueToObject( mojo, "mavenSession", mavenSession );
222
223 File inputDirectory = new File( "src/test/resources/unit/deploy-dav/target/site" );
224
225
226 if ( ReflectionUtils.getFieldByNameIncludingSuperclasses( "inputDirectory", mojo.getClass() ) != null )
227 {
228 setVariableValueToObject( mojo, "inputDirectory", inputDirectory );
229 }
230 else
231 {
232 ArtifactRepositoryFactory artifactRepositoryFactory = getContainer().lookup( ArtifactRepositoryFactory.class );
233
234 setVariableValueToObject( mojo, "stagingDirectory", inputDirectory );
235 setVariableValueToObject( mojo, "reactorProjects", Collections.emptyList() );
236 setVariableValueToObject( mojo, "localRepository",
237 artifactRepositoryFactory.createArtifactRepository( "local", "foo", "default",
238 null, null ) );
239 setVariableValueToObject( mojo, "siteTool", getContainer().lookup( SiteTool.class ) );
240 setVariableValueToObject( mojo, "siteDirectory", new File("foo") );
241 setVariableValueToObject( mojo, "repositories", Collections.emptyList() );
242 }
243 mojo.execute();
244
245 assertContentInFiles();
246 assertTrue( requestsContainsProxyUse( servlet.httpRequests ) );
247 assertAtLeastOneRequestContainsHeader( servlet.httpRequests, "Proxy-Authorization" );
248 for ( HttpRequest rq : servlet.httpRequests )
249 {
250 log.info( rq.toString() );
251 }
252 }
253 finally
254 {
255 simpleDavServerHandler.stop();
256 }
257 }
258
259 private void assertContentInFiles()
260 throws Exception
261 {
262 File fileToTest = new File( siteTargetPath, "site" + File.separator + "index.html" );
263 assertTrue( fileToTest.exists() );
264 String fileContent = FileUtils.readFileToString( fileToTest );
265 assertTrue( fileContent.contains( "Welcome to Apache Maven" ) );
266
267 fileToTest = new File( siteTargetPath, "site" + File.separator + "css" + File.separator + "maven-base.css" );
268 assertTrue( fileToTest.exists() );
269 fileContent = FileUtils.readFileToString( fileToTest );
270 assertTrue( fileContent.contains( "background-image: url(../images/collapsed.gif);" ) );
271 }
272
273
274
275
276
277 private boolean requestsContainsProxyUse( List<HttpRequest> requests )
278 {
279 return assertAtLeastOneRequestContainsHeader( requests, "Proxy-Connection" );
280 }
281
282 private boolean assertAtLeastOneRequestContainsHeader( List<HttpRequest> requests, String headerName )
283 {
284 for ( HttpRequest rq : requests )
285 {
286 boolean containsProxyHeader = rq.headers.containsKey( headerName );
287 if ( containsProxyHeader )
288 {
289 return true;
290 }
291 }
292 return false;
293 }
294 }