blob: c11f4006a00130b84fe9035ab71cf2f67d7df6ef [file] [log] [blame]
package org.apache.maven.shared.release.exec;
/*
* 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 static org.mockito.Matchers.isA;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.File;
import java.io.Writer;
import org.apache.maven.settings.Proxy;
import org.apache.maven.settings.Server;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
import org.apache.maven.shared.invoker.DefaultInvocationRequest;
import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.release.ReleaseResult;
import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
import org.apache.maven.shared.release.env.ReleaseEnvironment;
import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.logging.Logger;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
public class InvokerMavenExecutorTest
extends PlexusTestCase
{
private InvokerMavenExecutor executor;
private SecDispatcher secDispatcher;
@Override
protected void setUp()
throws Exception
{
super.setUp();
executor = (InvokerMavenExecutor) lookup( MavenExecutor.class, "invoker" );
secDispatcher = (SecDispatcher) lookup( SecDispatcher.class, "mng-4384" );
}
@Test
public void testThreads()
throws Exception
{
Logger logger = mock( Logger.class );
executor.enableLogging( logger );
InvocationRequest req = new DefaultInvocationRequest();
executor.setupRequest( req, null, "-T 3" );
assertEquals( "3", req.getThreads() );
req = new DefaultInvocationRequest();
executor.setupRequest( req, null, "-T4" );
assertEquals( "4", req.getThreads() );
req = new DefaultInvocationRequest();
executor.setupRequest( req, null, "\"-T5\"" );
assertEquals( "5", req.getThreads() );
}
@Test
public void testBatch()
throws Exception
{
Logger logger = mock( Logger.class );
executor.enableLogging( logger );
InvocationRequest req = new DefaultInvocationRequest();
// bug: assertEquals( true, req.isInteractive() );
req = new DefaultInvocationRequest();
req.setInteractive( true );
executor.setupRequest( req, null, "-B" );
assertEquals( false, req.isInteractive() );
req = new DefaultInvocationRequest();
req.setInteractive( true );
executor.setupRequest( req, null, "\"-B\"" );
assertEquals( false, req.isInteractive() );
}
@Test
public void testUserToolchains()
throws Exception
{
Logger logger = mock( Logger.class );
executor.enableLogging( logger );
InvocationRequest req = new DefaultInvocationRequest();
executor.setupRequest( req, null, "-t mytoolchains.xml" );
assertEquals( new File( "mytoolchains.xml" ), req.getToolchainsFile() );
req = new DefaultInvocationRequest();
executor.setupRequest( req, null, "-tmytoolchains.xml" );
assertEquals( new File( "mytoolchains.xml" ), req.getToolchainsFile() );
req = new DefaultInvocationRequest();
executor.setupRequest( req, null, "\"-tmytoolchains.xml\"" );
assertEquals( new File( "mytoolchains.xml" ), req.getToolchainsFile() );
}
@Test
public void testGlobalSettings()
throws Exception
{
Logger logger = mock( Logger.class );
executor.enableLogging( logger );
InvocationRequest req = new DefaultInvocationRequest();
executor.setupRequest( req, null, "-gs custom-settings.xml" );
assertEquals( "custom-settings.xml", req.getGlobalSettingsFile().getPath() );
req = new DefaultInvocationRequest();
executor.setupRequest( req, null, "--global-settings other-settings.xml" );
assertEquals( "other-settings.xml", req.getGlobalSettingsFile().getPath() );
}
public void testEncryptSettings()
throws Exception
{
// prepare
File workingDirectory = getTestFile( "target/working-directory" );
workingDirectory.mkdirs();
Settings settings = new Settings();
Server server = new Server();
server.setPassphrase( "server_passphrase" );
server.setPassword( "server_password" );
settings.addServer( server );
Proxy proxy = new Proxy();
proxy.setPassword( "proxy_password" );
settings.addProxy( proxy );
ReleaseEnvironment releaseEnvironment = new DefaultReleaseEnvironment();
releaseEnvironment.setSettings( settings );
releaseEnvironment.setMavenHome( new File( System.getProperty( "injectedMavenHome" ) ) );
InvokerMavenExecutor executorSpy = spy( executor );
SettingsXpp3Writer settingsWriter = mock( SettingsXpp3Writer.class );
ArgumentCaptor<Settings> encryptedSettings = ArgumentCaptor.forClass( Settings.class );
when( executorSpy.getSettingsWriter() ).thenReturn( settingsWriter );
when( executorSpy.getOutputHandler() ).thenReturn( null );
when( executorSpy.getInvokerLogger() ).thenReturn( null );
try
{
executorSpy.executeGoals( workingDirectory, "validate", releaseEnvironment, false, null, new ReleaseResult() );
}
catch ( MavenExecutorException e )
{
}
verify( settingsWriter ).write( isA( Writer.class ), encryptedSettings.capture() );
assertNotSame( settings, encryptedSettings.getValue() );
Server encryptedServer = encryptedSettings.getValue().getServers().get( 0 );
assertEquals( "server_passphrase", secDispatcher.decrypt( encryptedServer.getPassphrase() ) );
assertEquals( "server_password", secDispatcher.decrypt( encryptedServer.getPassword() ) );
Proxy encryptedProxy = encryptedSettings.getValue().getProxies().get( 0 );
assertEquals( "proxy_password", secDispatcher.decrypt( encryptedProxy.getPassword() ) );
File settingsSecurity = new File( System.getProperty( "user.home" ), ".m2/settings-security.xml" );
if ( settingsSecurity.exists() )
{
assertFalse( "server_passphrase".equals( encryptedServer.getPassphrase() ) );
assertFalse( "server_password".equals( encryptedServer.getPassword() ) );
assertFalse( "proxy_password".equals( encryptedProxy.getPassword() ) );
}
}
}