/src/test/java/com/atlassian/bamboo/plugin/dotnet/msbuild/MsBuildTaskTypeTest.java
Java | 251 lines | 194 code | 46 blank | 11 comment | 7 complexity | 945463d4fc02be351ac4e4a617c5b2f6 MD5 | raw file
Possible License(s): BSD-3-Clause
- package com.atlassian.bamboo.plugin.dotnet.msbuild;
- import com.atlassian.bamboo.build.LogEntry;
- import com.atlassian.bamboo.build.fileserver.BuildDirectoryManager;
- import com.atlassian.bamboo.build.logger.BuildLogger;
- import com.atlassian.bamboo.build.logger.SimpleBuildLogger;
- import com.atlassian.bamboo.configuration.ConfigurationMapImpl;
- import com.atlassian.bamboo.plan.PlanKeys;
- import com.atlassian.bamboo.plan.PlanResultKey;
- import com.atlassian.bamboo.process.EnvironmentVariableAccessor;
- import com.atlassian.bamboo.process.ProcessService;
- import com.atlassian.bamboo.process.ProcessServiceImpl;
- import com.atlassian.bamboo.task.TaskContext;
- import com.atlassian.bamboo.testutils.build.logger.BuildLoggerManagerForTesting;
- import com.atlassian.bamboo.utils.BambooTestUtils;
- import com.atlassian.bamboo.v2.build.CommonContext;
- import com.atlassian.bamboo.v2.build.CurrentBuildResult;
- import com.atlassian.bamboo.v2.build.agent.capability.CapabilityContext;
- import com.atlassian.bamboo.v2.build.agent.capability.CapabilitySet;
- import com.atlassian.bamboo.v2.build.agent.capability.CapabilitySetImpl;
- import com.atlassian.bamboo.variable.VariableContext;
- import com.atlassian.bamboo.variable.VariableDefinitionContext;
- import com.atlassian.plugin.PluginAccessor;
- import com.atlassian.utils.process.ExternalProcess;
- import com.atlassian.utils.process.ProcessHandler;
- import com.google.common.base.Joiner;
- import com.google.common.collect.ImmutableList;
- import com.google.common.collect.ImmutableMap;
- import com.google.common.collect.Lists;
- import org.apache.commons.io.FileUtils;
- import org.apache.commons.lang.SystemUtils;
- import org.jetbrains.annotations.NotNull;
- import org.junit.Before;
- import org.junit.Rule;
- import org.junit.Test;
- import org.junit.contrib.java.lang.system.RestoreSystemProperties;
- import org.junit.rules.TemporaryFolder;
- import org.junit.runner.RunWith;
- import org.mockito.Mock;
- import org.mockito.runners.MockitoJUnitRunner;
- import java.io.File;
- import java.util.Collections;
- import java.util.List;
- import static com.atlassian.bamboo.testutils.spring.SpringTestHelper.mockSpringComponent;
- import static org.hamcrest.MatcherAssert.assertThat;
- import static org.hamcrest.Matchers.hasItem;
- import static org.junit.Assert.fail;
- import static org.mockito.Mockito.when;
- @RunWith(MockitoJUnitRunner.class)
- public class MsBuildTaskTypeTest
- {
- private final static Joiner DOT_JOINER = Joiner.on(".");
- private static final String PLAN_NAME = "Foo Bar";
- private static final PlanResultKey PLAN_RESULT_KEY = PlanKeys.getPlanResultKey("FOO-BAR", 1);
- @Rule public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties(MsBuildTaskType.PROPERTY_USE_RESPONSE_FILE);
- @Rule public TemporaryFolder tmpFolder = new TemporaryFolder();
- @Mock private BuildDirectoryManager buildDirectoryManager;
- @Mock private EnvironmentVariableAccessor environmentVariableAccessor;
- @Mock private CapabilityContext capabilityContext;
- @Mock private CommonContext buildContext;
- @Mock private CurrentBuildResult currentBuildResult;
- @Mock private ExternalProcess externalProcess;
- @Mock private PluginAccessor pluginAccessor;
- @Mock private ProcessHandler processHandler;
- @Mock private TaskContext taskContext;
- @Mock private VariableContext variableContext;
- private File applicationHomeDirectory;
- private BuildLogger buildLogger;
- private BuildLoggerManagerForTesting buildLoggerManager;
- private CapabilitySet capabilitySet;
- private File taskWorkingDirectory;
- private ProcessService processService;
- private File msBuildProjectFile;
- @Before
- public void setUp() throws Exception
- {
- applicationHomeDirectory = tmpFolder.newFolder("application-home");
- buildLogger = new SimpleBuildLogger();
- buildLoggerManager = new BuildLoggerManagerForTesting();
- taskWorkingDirectory = tmpFolder.newFolder("task-working-directory");
- mockSpringComponent("buildDirectoryManager", buildDirectoryManager);
- when(buildDirectoryManager.getApplicationHome()).thenReturn(applicationHomeDirectory);
- when(variableContext.getDefinitions()).thenReturn(Collections.<String, VariableDefinitionContext>emptyMap());
- when(buildContext.getCurrentResult()).thenReturn(currentBuildResult);
- when(buildContext.getDisplayName()).thenReturn(PLAN_NAME);
- when(buildContext.getResultKey()).thenReturn(PLAN_RESULT_KEY);
- when(buildContext.getVariableContext()).thenReturn(variableContext);
- // capabilities
- {
- capabilitySet = new CapabilitySetImpl();
- new MsBuildCapabilityDefaultsHelper().addDefaultCapabilities(capabilitySet);
- when(capabilityContext.getCapabilitySet()).thenReturn(capabilitySet);
- }
- when(processHandler.getExitCode()).thenReturn(0);
- when(externalProcess.getHandler()).thenReturn(processHandler);
- when(taskContext.getCommonContext()).thenReturn(buildContext);
- when(taskContext.getBuildLogger()).thenReturn(buildLogger);
- when(taskContext.getWorkingDirectory()).thenReturn(taskWorkingDirectory);
- processService = new ProcessServiceImpl(buildLoggerManager, capabilityContext, environmentVariableAccessor, pluginAccessor);
- msBuildProjectFile = new File(taskWorkingDirectory, "msbuild.proj");
- FileUtils.copyFile(BambooTestUtils.getFileFromResourceDirectory(this, "msbuild.proj"), msBuildProjectFile);
- }
- /**
- * regression test for BDEV-5798
- */
- @Test
- public void testBDEV5798() throws Exception
- {
- if (!SystemUtils.IS_OS_WINDOWS)
- {
- return;
- }
- final MsBuildTaskType task = new MsBuildTaskType(processService, environmentVariableAccessor, capabilityContext);
- final String msBuildCapabilityLabel = pickNativeMsBuilderCapability(capabilitySet);
- final String options = "/nologo /t:BDEV-5798 /p:BuildVersion=\"1.2.3.4\" /p:ProductsToRelease=\"JIRA;Bamboo;Fisheye\" /clp:ShowCommandLine /v:diag";
- final String solution = msBuildProjectFile.getAbsolutePath();
- when(taskContext.getConfigurationMap()).thenReturn(new ConfigurationMapImpl(ImmutableMap.of(
- MsBuildConfig.LABEL, msBuildCapabilityLabel,
- MsBuildConfig.SOLUTION, solution,
- MsBuildConfig.OPTIONS, options
- )));
- // execute
- task.execute(taskContext);
- // verify
- final List<String> logs = asStringLogs(buildLoggerManager.getBuildLogger(PLAN_RESULT_KEY).getBuildLog());
- assertThat(logs, hasItem("BuildVersion = 1.2.3.4"));
- assertThat(logs, hasItem("ProductsToRelease = JIRA;Bamboo;Fisheye"));
- }
- @Test
- public void testBAM11561() throws Exception
- {
- if (!SystemUtils.IS_OS_WINDOWS)
- {
- return;
- }
- System.setProperty(MsBuildTaskType.PROPERTY_USE_RESPONSE_FILE, Boolean.toString(true));
- final MsBuildTaskType task = new MsBuildTaskType(processService, environmentVariableAccessor, capabilityContext);
- final String msBuildCapabilityLabel = pickNativeMsBuilderCapability(capabilitySet);
- final String options = "/nologo /t:BAM-11561 /p:Configuration=Release;Platform=\"Any CPU\" /clp:ShowCommandLine /v:diag";
- final String solution = msBuildProjectFile.getAbsolutePath();
- when(taskContext.getConfigurationMap()).thenReturn(new ConfigurationMapImpl(ImmutableMap.of(
- MsBuildConfig.LABEL, msBuildCapabilityLabel,
- MsBuildConfig.SOLUTION, solution,
- MsBuildConfig.OPTIONS, options
- )));
- // execute
- task.execute(taskContext);
- // verify
- final List<String> logs = asStringLogs(buildLoggerManager.getBuildLogger(PLAN_RESULT_KEY).getBuildLog());
- assertThat(logs, hasItem("Configuration = Release"));
- assertThat(logs, hasItem("Platform = Any CPU"));
- }
- @Test
- public void testBAM13608() throws Exception
- {
- if (!SystemUtils.IS_OS_WINDOWS)
- {
- return;
- }
- System.setProperty(MsBuildTaskType.PROPERTY_USE_RESPONSE_FILE, Boolean.toString(true));
- final MsBuildTaskType task = new MsBuildTaskType(processService, environmentVariableAccessor, capabilityContext);
- final String msBuildCapabilityLabel = pickNativeMsBuilderCapability(capabilitySet);
- final String options = "/nologo /t:BAM-13608 /p:ReferencePath=\"C:\\Program Files (x86)\\WiX Toolset v3.7\\SDK;C:\\Program Files (x86)\\DGIT\\bin\" /clp:ShowCommandLine /v:diag";
- final String solution = msBuildProjectFile.getAbsolutePath();
- when(taskContext.getConfigurationMap()).thenReturn(new ConfigurationMapImpl(ImmutableMap.of(
- MsBuildConfig.LABEL, msBuildCapabilityLabel,
- MsBuildConfig.SOLUTION, solution,
- MsBuildConfig.OPTIONS, options
- )));
- // execute
- task.execute(taskContext);
- // verify
- final List<String> logs = asStringLogs(buildLoggerManager.getBuildLogger(PLAN_RESULT_KEY).getBuildLog());
- assertThat(logs, hasItem("ReferencePath = C:\\Program Files (x86)\\WiX Toolset v3.7\\SDK;C:\\Program Files (x86)\\DGIT\\bin"));
- }
- // -------------------------------------------------------------------------------------------------- Helper Methods
- private List<String> asStringLogs(List<LogEntry> logs)
- {
- List<String> errors = Lists.newArrayList();
- for (LogEntry entry : logs)
- {
- errors.add(entry.getUnstyledLog());
- }
- return errors;
- }
- private boolean hasCapability(@NotNull CapabilitySet capabilitySet, @NotNull String capabilityKey)
- {
- return capabilitySet.getCapability(DOT_JOINER.join(MsBuildTaskType.MSBUILD_CAPABILITY_PREFIX, capabilityKey)) != null;
- }
- private String pickNativeMsBuilderCapability(@NotNull CapabilitySet capabilitySet)
- {
- final List<String> candidates = ImmutableList.of(
- "MSBuild v4.0 (64bit)",
- "MSBuild v4.0 (32bit)"
- );
- for (String candidate : candidates)
- {
- if (hasCapability(capabilitySet, candidate))
- {
- return candidate;
- }
- }
- fail("Can't find native MSBuild");
- return null;
- }
- }