package org.codehaus.mojo.setup.security;
import java.io.File;
import org.apache.maven.plugin.MojoExecutionException;
import org.codehaus.mojo.setup.AbstractSetupMojoTest;
import org.codehaus.plexus.util.FileUtils;
import org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher;
import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
import org.sonatype.plexus.components.sec.dispatcher.SecUtil;
import org.sonatype.plexus.components.sec.dispatcher.model.SettingsSecurity;
public class SettingsSecuritySetupMojoTest
extends AbstractSetupMojoTest
{
private SettingsSecuritySetupMojo setupMojo;
private final String settingsPath = ".m2/settings-security.xml";
private File testResourceDefaultSettingsSecuritys;
private File testResourceNoSettingsSecurity;
private File testResourceMinimalSettingsSecurity;
private File targetFile;
@Override
protected void onSetUp()
throws Exception
{
super.onSetUp();
testResourceDefaultSettingsSecuritys = getTestFile( "src/test/resources/defaultUserHome" );
testResourceNoSettingsSecurity = getTestFile( "src/test/resources/emptyUserHome" );
testResourceMinimalSettingsSecurity = getTestFile( "src/test/resources/minimalUserHome" );
File testPom =
new File( getBasedir(),
"src/test/resources/unit/default-configuration/default-configuration-plugin-config.xml" );
setupMojo = (SettingsSecuritySetupMojo) lookupMojo( "settings-security", testPom );
}
@Override
protected void prepareMojo( File workDirectory )
throws Exception
{
super.prepareMojo( workDirectory );
targetFile = new File( workDirectory + File.separator + settingsPath );
DefaultSecDispatcher secDispatcher = (DefaultSecDispatcher) lookup( SecDispatcher.class.getName() );
secDispatcher.setConfigurationFile( targetFile.getAbsolutePath() );
}
public void testMaster()
throws Exception
{
File currentTestWorkDirectory = new File( getWorkDirectory(), getTestPrefix() + "-master" );
prepareDirectoryStructure( getDirectoryMissingTargetFile(), currentTestWorkDirectory );
prepareMojo( currentTestWorkDirectory );
setVariableValueToObject( getMojo(), "password", "password" );
assertFalse( getTargetFile().exists() );
assertFalse( FileUtils.resolveFile( currentTestWorkDirectory, getMojo().getDefaultTemplateFilename() ).exists() );
// execute the mojo
getMojo().execute();
assertTrue( targetFile.getAbsolutePath() + " doesn't exist", targetFile.exists() );
}
public void testInvalidPassword() throws Exception {
File currentTestWorkDirectory = new File( getWorkDirectory(), getTestPrefix() + "-invalidPassword" );
prepareDirectoryStructure( getDirectoryMissingTargetFile(), currentTestWorkDirectory );
prepareMojo( currentTestWorkDirectory );
String invalidPassword = "-D";
setVariableValueToObject( getMojo(), "password", invalidPassword ); //
try {
getMojo().execute();
fail( "Test should because of an invalid password: " + invalidPassword );
}
catch ( MojoExecutionException mee )
{
//nop
}
}
@Override
protected File getDirectoryDefaultTargetFile()
{
return testResourceDefaultSettingsSecuritys;
}
@Override
protected File getDirectoryMissingTargetFile()
{
return testResourceNoSettingsSecurity;
}
@Override
protected File getDirectoryMinimumTargetFile()
{
return testResourceMinimalSettingsSecurity;
}
@Override
protected SettingsSecuritySetupMojo getMojo()
{
return setupMojo;
}
@Override
protected String getTestPrefix()
{
return "settingssecurity";
}
@Override
protected File getTargetFile()
{
return targetFile;
}
@Override
protected String getTemplateBase()
{
return "settings-security";
}
@Override
public void testDefaultTargetDefaultTemplateMergeEXPAND()
throws Exception
{
try
{
super.testDefaultTargetDefaultTemplateMergeEXPAND();
fail("unsupported");
}
catch ( MojoExecutionException e) {}
}
@Override
public void testDefaultTargetDefaultTemplateMergeUPDATE()
throws Exception
{
try
{
super.testDefaultTargetDefaultTemplateMergeUPDATE();
fail("unsupported");
}
catch ( MojoExecutionException e) {}
}
@Override
public void testMinimumTargetDefaultTemplateMergeEXPAND()
throws Exception
{
try
{
super.testMinimumTargetDefaultTemplateMergeEXPAND();
fail("unsupported");
}
catch ( MojoExecutionException e) {}
}
@Override
public void testMinimumTargetDefaultTemplateMergeUPDATE()
throws Exception
{
try
{
super.testMinimumTargetDefaultTemplateMergeUPDATE();
fail("unsupported");
}
catch ( MojoExecutionException e) {}
}
@Override
protected void validateAsDefaultTemplate()
throws Exception
{
SettingsSecurity sec = SecUtil.read( targetFile.getAbsolutePath() , false );
assertEquals( "master_defaultTemplate", sec.getMaster() );
assertEquals( "relocation_defaultTemplate", sec.getRelocation() );
assertEquals( 0, sec.getConfigurations().size() );
}
@Override
protected void validateAsCustomTemplate()
throws Exception
{
SettingsSecurity sec = SecUtil.read( targetFile.getAbsolutePath() , false );
assertEquals( "master_customTemplate", sec.getMaster() );
assertEquals( "relocation_customTemplate", sec.getRelocation() );
assertEquals( 0, sec.getConfigurations().size() );
}
@Override
protected void validateAsFilteredTemplate()
throws Exception
{
SettingsSecurity sec = SecUtil.read( targetFile.getAbsolutePath() , false );
assertEquals( "master_filteredTemplate", sec.getMaster() );
assertEquals( "relocation_filteredTemplate", sec.getRelocation() );
assertEquals( 0, sec.getConfigurations().size() );
}
@Override
protected void validateAsMinimumTemplate()
throws Exception
{
SettingsSecurity sec = SecUtil.read( targetFile.getAbsolutePath() , false );
assertEquals( null, sec.getMaster() );
assertEquals( null, sec.getRelocation() );
assertEquals( 0, sec.getConfigurations().size() );
}
@Override
protected void validateAsDefaultSettings()
throws Exception
{
SettingsSecurity sec = SecUtil.read( targetFile.getAbsolutePath() , false );
assertEquals( "master_currentSettings", sec.getMaster() );
assertEquals( "relocation_currentSettings", sec.getRelocation() );
assertEquals( 0, sec.getConfigurations().size() );
}
@Override
protected void validateAsNoSettings()
throws Exception
{
assertEquals( false, targetFile.exists() );
}
}