Package org.apache.maven.plugins.site

Source Code of org.apache.maven.plugins.site.AbstractSiteDeployWebDavTest

package org.apache.maven.plugins.site;

/*
* 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.
*/

import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
import org.apache.maven.doxia.tools.SiteTool;
import org.apache.maven.execution.DefaultMavenExecutionRequest;
import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.apache.maven.plugins.site.SimpleDavServerHandler.HttpRequest;
import org.apache.maven.plugins.site.stubs.SiteMavenProjectStub;
import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Settings;
import org.codehaus.plexus.util.ReflectionUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* @author <a href="mailto:olamy@apache.org">olamy</a>
* @version $Id: AbstractSiteDeployWebDavTest.java 1085630 2011-03-26 02:43:30Z hboutemy $
*/
@RunWith(JUnit4.class)
public abstract class AbstractSiteDeployWebDavTest
    extends AbstractMojoTestCase
{
   
    File siteTargetPath = new File( getBasedir() + File.separator + "target" + File.separator + "siteTargetDeploy" );
   
    private Logger log = LoggerFactory.getLogger( getClass() );
   
    @Before
    public void setUp()
        throws Exception
    {
        super.setUp();
        if ( !siteTargetPath.exists() )
        {
            siteTargetPath.mkdirs();
            FileUtils.cleanDirectory( siteTargetPath );
        }
    }
   
    abstract String getMojoName();
   
    abstract AbstractMojo getMojo( File pluginXmlFile )
        throws Exception;
   
    @Test
    public void noAuthzDavDeploy()
        throws Exception
    {
        FileUtils.cleanDirectory( siteTargetPath );
        SimpleDavServerHandler simpleDavServerHandler = new SimpleDavServerHandler( siteTargetPath );
        try
        {
            File pluginXmlFile = getTestFile( "src/test/resources/unit/deploy-dav/pom.xml" );
            AbstractMojo mojo = getMojo( pluginXmlFile );
            assertNotNull( mojo );
            SiteMavenProjectStub siteMavenProjectStub =
                new SiteMavenProjectStub( "src/test/resources/unit/deploy-dav/pom.xml" );
           
            siteMavenProjectStub.getDistributionManagement().getSite()
                .setUrl( "dav:http://localhost:" + simpleDavServerHandler.getPort() + "/site/" );
           
            setVariableValueToObject( mojo, "project", siteMavenProjectStub );
            Settings settings = new Settings();
            setVariableValueToObject( mojo, "settings", settings );
            File inputDirectory = new File( "src/test/resources/unit/deploy-dav/target/site" );
           
            setVariableValueToObject( mojo, "inputDirectory", inputDirectory );
            mojo.execute();
           
            assertContentInFiles();
            assertFalse( requestsContainsProxyUse( simpleDavServerHandler.httpRequests ) );
        }
        finally
        {
            simpleDavServerHandler.stop();
        }
    }
   
    @Test
    public void davDeployThruProxyWithoutAuthzInProxy()
        throws Exception
    {
       
        FileUtils.cleanDirectory( siteTargetPath );
        SimpleDavServerHandler simpleDavServerHandler = new SimpleDavServerHandler( siteTargetPath );
        try
        {
            File pluginXmlFile = getTestFile( "src/test/resources/unit/deploy-dav/pom.xml" );
            AbstractMojo mojo = getMojo( pluginXmlFile );
            assertNotNull( mojo );
            SiteMavenProjectStub siteMavenProjectStub =
                new SiteMavenProjectStub( "src/test/resources/unit/deploy-dav/pom.xml" );
            // olamy, Note : toto is something like foo or bar for french folks :-)
            String siteUrl = "dav:http://toto.com/site/";
            siteMavenProjectStub.getDistributionManagement().getSite().setUrl( siteUrl );
           
            setVariableValueToObject( mojo, "project", siteMavenProjectStub );
            Settings settings = new Settings();
            Proxy proxy = new Proxy();

            //dummy proxy
            proxy.setActive( true );
            proxy.setHost( "localhost" );
            proxy.setPort( simpleDavServerHandler.getPort() );
            proxy.setProtocol( "http" );
            proxy.setNonProxyHosts( "www.google.com|*.somewhere.com" );
            settings.addProxy( proxy );
           
            setVariableValueToObject( mojo, "settings", settings );
           
            MavenExecutionRequest request = new DefaultMavenExecutionRequest();
            request.setProxies( Arrays.asList( proxy ) );
            MavenSession mavenSession = new MavenSession( getContainer(), null, request, null );
           
            setVariableValueToObject( mojo, "mavenSession", mavenSession );
           
            File inputDirectory = new File( "src/test/resources/unit/deploy-dav/target/site" );
           
            setVariableValueToObject( mojo, "inputDirectory", inputDirectory );
            mojo.execute();
           
            assertContentInFiles();
           
            assertTrue( requestsContainsProxyUse( simpleDavServerHandler.httpRequests ) );
           
            for ( HttpRequest rq : simpleDavServerHandler.httpRequests )
            {
                log.info( rq.toString() );
            }
           
        }
        finally
        {
            simpleDavServerHandler.stop();
        }       
       
    }
   
    @Test
    public void davDeployThruProxyWitAuthzInProxy() throws Exception
    {

        FileUtils.cleanDirectory( siteTargetPath );
        //SimpleDavServerHandler simpleDavServerHandler = new SimpleDavServerHandler( siteTargetPath );
       
        Map<String, String> authentications = new HashMap<String, String>();
        authentications.put( "foo", "titi" );
       
        AuthAsyncProxyServlet servlet = new AuthAsyncProxyServlet( authentications, siteTargetPath );

        SimpleDavServerHandler simpleDavServerHandler = new SimpleDavServerHandler( servlet );       
        try
        {
            File pluginXmlFile = getTestFile( "src/test/resources/unit/deploy-dav/pom.xml" );
            AbstractMojo mojo = getMojo( pluginXmlFile );
            assertNotNull( mojo );
            SiteMavenProjectStub siteMavenProjectStub =
                new SiteMavenProjectStub( "src/test/resources/unit/deploy-dav/pom.xml" );
           
            siteMavenProjectStub.getDistributionManagement().getSite()
                .setUrl( "dav:http://toto.com/site/" );
           
            setVariableValueToObject( mojo, "project", siteMavenProjectStub );
            Settings settings = new Settings();
            Proxy proxy = new Proxy();

            //dummy proxy
            proxy.setActive( true );
            proxy.setHost( "localhost" );
            proxy.setPort( simpleDavServerHandler.getPort() );
            proxy.setProtocol( "dav" );
            proxy.setUsername( "foo" );
            proxy.setPassword( "titi" );
            proxy.setNonProxyHosts( "www.google.com|*.somewhere.com" );
            settings.addProxy( proxy );
           
            setVariableValueToObject( mojo, "settings", settings );
           
            MavenExecutionRequest request = new DefaultMavenExecutionRequest();
            request.setProxies( Arrays.asList( proxy ) );
            MavenSession mavenSession = new MavenSession( getContainer(), null, request, null );
           
            setVariableValueToObject( mojo, "mavenSession", mavenSession );
           
            File inputDirectory = new File( "src/test/resources/unit/deploy-dav/target/site" );
           
            // test which mojo we are using
            if ( ReflectionUtils.getFieldByNameIncludingSuperclasses( "inputDirectory", mojo.getClass() ) != null )
            {
                setVariableValueToObject( mojo, "inputDirectory", inputDirectory );
            }
            else
            {
                ArtifactRepositoryFactory artifactRepositoryFactory = getContainer().lookup( ArtifactRepositoryFactory.class );
               
                setVariableValueToObject( mojo, "stagingDirectory", inputDirectory );
                setVariableValueToObject( mojo, "reactorProjects", Collections.emptyList() );
                setVariableValueToObject( mojo, "localRepository",
                                          artifactRepositoryFactory.createArtifactRepository( "local", "foo", "default",
                                                                                              null, null ) );
                setVariableValueToObject( mojo, "siteTool", getContainer().lookup( SiteTool.class ) );
                setVariableValueToObject( mojo, "siteDirectory", new File("foo") );
                setVariableValueToObject( mojo, "repositories", Collections.emptyList() );
            }
            mojo.execute();
           
            assertContentInFiles();
            assertTrue( requestsContainsProxyUse( servlet.httpRequests ) );
            assertAtLeastOneRequestContainsHeader( servlet.httpRequests, "Proxy-Authorization" );
            for ( HttpRequest rq : servlet.httpRequests )
            {
                log.info( rq.toString() );
            }
        }
        finally
        {
            simpleDavServerHandler.stop();
       
    }       
   
    private void assertContentInFiles()
        throws Exception
    {
        File fileToTest = new File( siteTargetPath, "site" + File.separator + "index.html" );
        assertTrue( fileToTest.exists() );
        String fileContent = FileUtils.readFileToString( fileToTest );
        assertTrue( fileContent.contains( "Welcome to Apache Maven" ) );

        fileToTest = new File( siteTargetPath, "site" + File.separator + "css" + File.separator + "maven-base.css" );
        assertTrue( fileToTest.exists() );
        fileContent = FileUtils.readFileToString( fileToTest );
        assertTrue( fileContent.contains( "background-image: url(../images/collapsed.gif);" ) );
    }
   
    /**
     * @param requests
     * @return true if at least on request use proxy http header Proxy-Connection : Keep-Alive
     */
    private boolean requestsContainsProxyUse( List<HttpRequest> requests )
    {
        return assertAtLeastOneRequestContainsHeader(requests, "Proxy-Connection");
    }
   
    private boolean assertAtLeastOneRequestContainsHeader(List<HttpRequest> requests , String headerName)
    {
        for ( HttpRequest rq : requests )
        {
            boolean containsProxyHeader = rq.headers.containsKey( headerName );
            if ( containsProxyHeader )
            {
                return true;
            }
        }
        return false;
    }
}
TOP

Related Classes of org.apache.maven.plugins.site.AbstractSiteDeployWebDavTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.