/src/test/java/com/atlassian/bamboo/plugin/dotnet/visualstudio/DevEnvRunnerTest.java
Java | 187 lines | 159 code | 28 blank | 0 comment | 3 complexity | 0691e7015022f759bcf48133c78ce639 MD5 | raw file
Possible License(s): BSD-3-Clause
- package com.atlassian.bamboo.plugin.dotnet.visualstudio;
- import com.atlassian.bamboo.build.LogEntry;
- import com.atlassian.bamboo.plan.PlanKeys;
- import com.atlassian.bamboo.plan.PlanResultKey;
- import com.atlassian.bamboo.process.EnvironmentVariableAccessor;
- import com.atlassian.bamboo.process.ExternalProcessBuilder;
- import com.atlassian.bamboo.process.ProcessService;
- import com.atlassian.bamboo.process.ProcessServiceImpl;
- import com.atlassian.bamboo.task.TaskContext;
- import com.atlassian.bamboo.task.TaskProcessCommandDecoratorModuleDescriptor;
- import com.atlassian.bamboo.testutils.build.logger.BuildLoggerManagerForTesting;
- import com.atlassian.bamboo.utils.BambooTestUtils;
- import com.atlassian.bamboo.v2.build.BuildContext;
- import com.atlassian.bamboo.v2.build.CurrentBuildResult;
- import com.atlassian.bamboo.v2.build.CurrentBuildResultImpl;
- import com.atlassian.bamboo.v2.build.agent.capability.CapabilityContext;
- 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.google.common.collect.Iterables;
- import com.google.common.collect.Lists;
- import com.google.common.collect.Maps;
- import org.apache.commons.lang.SystemUtils;
- import org.junit.Before;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.mockito.Mock;
- import org.mockito.runners.MockitoJUnitRunner;
- import java.io.File;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.List;
- import java.util.Map;
- import static org.hamcrest.MatcherAssert.assertThat;
- import static org.hamcrest.Matchers.equalTo;
- import static org.hamcrest.Matchers.greaterThanOrEqualTo;
- import static org.hamcrest.Matchers.is;
- import static org.mockito.Mockito.mock;
- import static org.mockito.Mockito.when;
- @RunWith(MockitoJUnitRunner.class)
- public class DevEnvRunnerTest
- {
- private static final PlanResultKey PLAN_RESULT_KEY = PlanKeys.getPlanResultKey("FOO-BAR", 1);
- private static final String PLAN_NAME = "Foo Bar";
- private static final String TASK_PLUGIN_KEY = "com.atlassian.foobar";
- private ProcessService processService;
- private BuildLoggerManagerForTesting buildLoggerManager;
- @Mock private EnvironmentVariableAccessor mockEnvironmentVariableAccessor;
- @Mock private PluginAccessor mockPluginAccessor;
- @Mock private TaskContext mockTaskContext;
- private Map<String, String> environment;
- @Before
- public void setUp() throws Exception
- {
- buildLoggerManager = new BuildLoggerManagerForTesting();
- CapabilityContext mockCapabilityContext = mock(CapabilityContext.class);
- VariableContext mockVariableContext = mock(VariableContext.class);
- when(mockVariableContext.getDefinitions()).thenReturn(Collections.<String, VariableDefinitionContext>emptyMap());
- processService = new ProcessServiceImpl(buildLoggerManager, mockCapabilityContext, mockEnvironmentVariableAccessor, mockPluginAccessor);
- CurrentBuildResult currentBuildResult = new CurrentBuildResultImpl();
- BuildContext mockBuildContext = mock(BuildContext.class);
- when(mockBuildContext.getResultKey()).thenReturn(PLAN_RESULT_KEY);
- when(mockBuildContext.getPlanResultKey()).thenReturn(PLAN_RESULT_KEY);
- when(mockBuildContext.getPlanName()).thenReturn(PLAN_NAME);
- when(mockBuildContext.getBuildResult()).thenReturn(currentBuildResult);
- when(mockBuildContext.getVariableContext()).thenReturn(mockVariableContext);
- when(mockTaskContext.getCommonContext()).thenReturn(mockBuildContext);
- when(mockTaskContext.getBuildLogger()).thenReturn(buildLoggerManager.getBuildLogger(PLAN_RESULT_KEY));
- when(mockTaskContext.getPluginKey()).thenReturn(TASK_PLUGIN_KEY);
- environment = Maps.newHashMap();
- when(mockEnvironmentVariableAccessor.getEnvironment(mockTaskContext)).thenReturn(environment);
- }
- @Test
- public void testTargetWithPipe() throws Exception
- {
- if (!SystemUtils.IS_OS_WINDOWS)
- {
- return;
- }
- when(mockEnvironmentVariableAccessor.getPaths(mockTaskContext)).thenReturn(Collections.<String>emptyList());
- when(mockPluginAccessor.getEnabledModuleDescriptorsByClass(TaskProcessCommandDecoratorModuleDescriptor.class)).thenReturn(Collections.<TaskProcessCommandDecoratorModuleDescriptor>emptyList());
- final List<String> actualArguments = Arrays.asList(
- "C:\\bamboo\\xml-data\\build-dir\\TRUNK-WIN64-SANDBOX\\source",
- "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0",
- "x86",
- "product/legasrv/legasrv-vs2010.sln",
- "/build",
- "Release Unicode|x64",
- "\"Release Unicode|x86\"",
- "\"Release|x86\""
- );
- final List<String> expectedOutput = Arrays.asList(
- "cd \"C:\\bamboo\\xml-data\\build-dir\\TRUNK-WIN64-SANDBOX\\source\"",
- "call \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" x86",
- "call \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\devenv.com\" \"product/legasrv/legasrv-vs2010.sln\" /build \"Release Unicode|x64\" \"Release Unicode|x86\" \"Release|x86\""
- );
- final List<String> command = Lists.newArrayList(Iterables.concat(
- Collections.singleton(BambooTestUtils.getFileFromResourceDirectory(this, "devenvrunner-test.bat").getPath()),
- actualArguments
- ));
- ExternalProcess externalProcess = processService.executeExternalProcess(
- mockTaskContext,
- new ExternalProcessBuilder()
- .workingDirectory(new File("."))
- .command(command)
- );
- assertThat(externalProcess.getHandler().isComplete(), is(true));
- List<String> logs = asStringLogs(buildLoggerManager.getBuildLogger(PLAN_RESULT_KEY).getBuildLog());
- assertThat(logs.size(), greaterThanOrEqualTo(expectedOutput.size()));
- assertThat(logs.subList(logs.size() - expectedOutput.size(), logs.size()), equalTo(expectedOutput));
- }
- private List<String> asStringLogs(List<LogEntry> logs)
- {
- List<String> errors = Lists.newArrayList();
- for (LogEntry entry : logs)
- {
- errors.add(entry.getUnstyledLog());
- }
- return errors;
- }
- @Test
- public void testTargetWithoutPipe() throws Exception
- {
- if (!SystemUtils.IS_OS_WINDOWS)
- {
- return;
- }
- when(mockEnvironmentVariableAccessor.getPaths(mockTaskContext)).thenReturn(Collections.<String>emptyList());
- when(mockPluginAccessor.getEnabledModuleDescriptorsByClass(TaskProcessCommandDecoratorModuleDescriptor.class)).thenReturn(Collections.<TaskProcessCommandDecoratorModuleDescriptor>emptyList());
- final List<String> actualArguments = Arrays.asList(
- "C:\\bamboo\\xml-data\\build-dir\\TRUNK-WIN64-SANDBOX\\source",
- "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0",
- "x86",
- "product/legasrv/legasrv-vs2010.sln",
- "/build",
- "Release Unicode"
- );
- final List<String> expectedOutput = Arrays.asList(
- "cd \"C:\\bamboo\\xml-data\\build-dir\\TRUNK-WIN64-SANDBOX\\source\"",
- "call \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" x86",
- "call \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\devenv.com\" \"product/legasrv/legasrv-vs2010.sln\" /build \"Release Unicode\""
- );
- final List<String> command = Lists.newArrayList(Iterables.concat(
- Collections.singleton(BambooTestUtils.getFileFromResourceDirectory(this, "devenvrunner-test.bat").getPath()),
- actualArguments
- ));
- ExternalProcess externalProcess = processService.executeExternalProcess(
- mockTaskContext,
- new ExternalProcessBuilder()
- .workingDirectory(new File("."))
- .command(command)
- );
- assertThat(externalProcess.getHandler().isComplete(), is(true));
- List<String> logs = asStringLogs(buildLoggerManager.getBuildLogger(PLAN_RESULT_KEY).getBuildLog());
- assertThat(logs.size(), greaterThanOrEqualTo(expectedOutput.size()));
- assertThat(logs.subList(logs.size() - expectedOutput.size(), logs.size()), equalTo(expectedOutput));
- }
- }