package org.jboss.shrinkwrap.resolver.impl.maven.embedded;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.maven.shared.invoker.InvocationRequest;
import org.apache.maven.shared.invoker.Invoker;
import org.apache.maven.shared.invoker.InvokerLogger;
import org.jboss.shrinkwrap.resolver.api.maven.embedded.pom.equipped.ConfigurationStage;
import org.jboss.shrinkwrap.resolver.api.maven.embedded.EmbeddedMaven;
import org.jboss.shrinkwrap.resolver.impl.maven.embedded.pom.equipped.ConfigurationStageImpl;
import org.junit.Assert;
import org.junit.Test;
import static org.jboss.shrinkwrap.resolver.impl.maven.embedded.Utils.pathToJarSamplePom;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* @author <a href="mailto:mjobanek@redhat.com">Matous Jobanek</a>
*/
public class ConfigurationStageTestCase {
String[] goals = new String[] { "clean", "test", "package", "install" };
String[] includes = new String[] { "include1", "include2" };
String[] excludes = new String[] { "exclude1", "exclude2" };
Properties properties = new Properties() {{
put("propertyKey1", "propertyValue1");
put("propertyKey2", "propertyValue2");
}};
Map<String, String> shellEnvironments = new HashMap() {{
put("shellEnvName1", "shellEnvValue1");
put("shellEnvName2", "shellEnvValue2");
}};
String failureBehavior = "failureBehavior";
String globalChecksumPolicy = "globalChecksumPolicy";
InputStream inputStream = new ByteArrayInputStream(new byte[] {});
File globalSettingFile = new File("globalSettingFile");
File javaHome = new File("javaHome");
File localRepositoryDirectory = new File("localRepositoryDirectory");
InvokerLogger invokerLogger = new DummyInvokerLogger();
String mavenOpts = "--maven --opts";
String[] profiles = new String[] { "profile1", "profile2" };
String[] projects = new String[] { "project1", "project2" };
String resumeFrom = "resumeFrom";
String threads = "8.0C";
File toolChainsFile = new File("toolChainsFile");
File userSettingFile = new File("userSettingFile");
File workingDirectory = new File("workingDirectory");
@Test
public void runTest() {
ConfigurationStageImpl configurationStageImpl = getConfigurationStageImpl();
// invocation request validation
InvocationRequest invocationRequest = configurationStageImpl.getInvocationRequest();
properties.put("skipTests", "true");
assertEquals(properties, invocationRequest.getProperties());
assertEquals(Arrays.asList(profiles), invocationRequest.getProfiles());
assertEquals(excludes, invocationRequest.getActivatedReactorExcludes());
assertEquals(includes, invocationRequest.getActivatedReactorIncludes());
assertEquals(failureBehavior, invocationRequest.getFailureBehavior());
assertEquals(globalChecksumPolicy, invocationRequest.getGlobalChecksumPolicy());
assertEquals(globalSettingFile, invocationRequest.getGlobalSettingsFile());
assertEquals(Arrays.asList(goals), invocationRequest.getGoals());
assertEquals(inputStream, invocationRequest.getInputStream(null));
assertEquals(javaHome, invocationRequest.getJavaHome());
assertEquals(localRepositoryDirectory, invocationRequest.getLocalRepositoryDirectory(null));
assertEquals(mavenOpts, invocationRequest.getMavenOpts());
File jarSamplePom = new File(pathToJarSamplePom);
assertEquals(jarSamplePom.getAbsoluteFile(), invocationRequest.getPomFile());
assertNotNull(invocationRequest.getErrorHandler(null));
assertNotNull(invocationRequest.getOutputHandler(null));
assertEquals(Arrays.asList(profiles), invocationRequest.getProfiles());
assertEquals(Arrays.asList(projects), invocationRequest.getProjects());
assertEquals(resumeFrom, invocationRequest.getResumeFrom());
assertEquals(shellEnvironments, invocationRequest.getShellEnvironments());
assertEquals(threads, invocationRequest.getThreads());
assertEquals(toolChainsFile, invocationRequest.getToolchainsFile());
assertEquals(userSettingFile, invocationRequest.getUserSettingsFile());
assertEquals(true, invocationRequest.isActivatedReactor());
assertEquals(true, invocationRequest.isAlsoMake());
assertEquals(true, invocationRequest.isAlsoMakeDependents());
assertEquals(true, invocationRequest.isDebug());
assertEquals(true, invocationRequest.isInteractive());
assertEquals(true, invocationRequest.isNonPluginUpdates());
assertEquals(true, invocationRequest.isOffline());
assertEquals(true, invocationRequest.isRecursive());
assertEquals(true, invocationRequest.isShellEnvironmentInherited());
assertEquals(true, invocationRequest.isShowErrors());
assertEquals(true, invocationRequest.isShowVersion());
assertEquals(true, invocationRequest.isUpdateSnapshots());
// invoker validation
Invoker invoker = configurationStageImpl.getInvoker();
assertEquals(invokerLogger, invoker.getLogger());
assertEquals(localRepositoryDirectory, invoker.getLocalRepositoryDirectory());
assertEquals(workingDirectory, invoker.getWorkingDirectory());
boolean hasFailed = false;
try {
configurationStageImpl.ignoreFailure().build();
} catch (Exception e) {
hasFailed = true;
}
if (!hasFailed) {
Assert.fail("Maven build execution should fail as the local repository location is NOT a directory");
}
assertNotNull(invoker.getMavenHome());
assertEquals("apache-maven-3.3.9", invoker.getMavenHome().getName());
}
private ConfigurationStageImpl getConfigurationStageImpl() {
ConfigurationStage configurationStage =
EmbeddedMaven.forProject(pathToJarSamplePom)
.useMaven3Version("3.3.9")
.setGoals(goals)
.activateReactor(includes, excludes)
.addProperty("propertyKey1", properties.getProperty("propertyKey1"))
.addProperty("propertyKey2", properties.getProperty("propertyKey2"))
.addShellEnvironment("shellEnvName1", shellEnvironments.get("shellEnvName1"))
.addShellEnvironment("shellEnvName2", shellEnvironments.get("shellEnvName2"))
.setAlsoMake(true)
.setAlsoMakeDependents(true)
.setDebug(true)
.setFailureBehavior(failureBehavior)
.setGlobalChecksumPolicy(globalChecksumPolicy)
.setInputStream(inputStream)
.setGlobalSettingsFile(globalSettingFile)
.setInteractive(true)
.setJavaHome(javaHome)
.setLocalRepositoryDirectory(localRepositoryDirectory)
.setLogger(invokerLogger)
.setMavenOpts(mavenOpts)
.setNonPluginUpdates(true)
.setOffline(true)
.setProfiles(profiles)
.setProjects(projects)
.setRecursive(true)
.setResumeFrom(resumeFrom)
.setShellEnvironmentInherited(true)
.setShowErrors(true)
.setShowVersion(true)
.setThreads(threads)
.setToolchainsFile(toolChainsFile)
.setUpdateSnapshots(true)
.setRecursive(true)
.setUserSettingsFile(userSettingFile)
.setWorkingDirectory(workingDirectory);
return (ConfigurationStageImpl) configurationStage;
}
class DummyInvokerLogger implements InvokerLogger {
@Override public void debug(String s) {
}
@Override public void debug(String s, Throwable throwable) {
}
@Override public boolean isDebugEnabled() {
return false;
}
@Override public void info(String s) {
}
@Override public void info(String s, Throwable throwable) {
}
@Override public boolean isInfoEnabled() {
return false;
}
@Override public void warn(String s) {
}
@Override public void warn(String s, Throwable throwable) {
}
@Override public boolean isWarnEnabled() {
return false;
}
@Override public void error(String s) {
}
@Override public void error(String s, Throwable throwable) {
}
@Override public boolean isErrorEnabled() {
return false;
}
@Override public void fatalError(String s) {
}
@Override public void fatalError(String s, Throwable throwable) {
}
@Override public boolean isFatalErrorEnabled() {
return false;
}
@Override public void setThreshold(int i) {
}
@Override public int getThreshold() {
return 0;
}
}
}