PageRenderTime 52ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/src/test/java/com/atlassian/bamboo/plugin/dotnet/visualstudio/DevEnvRunnerTest.java

https://bitbucket.org/lmeyer/bamboo-dotnet-plugin
Java | 187 lines | 159 code | 28 blank | 0 comment | 3 complexity | 0691e7015022f759bcf48133c78ce639 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. package com.atlassian.bamboo.plugin.dotnet.visualstudio;
  2. import com.atlassian.bamboo.build.LogEntry;
  3. import com.atlassian.bamboo.plan.PlanKeys;
  4. import com.atlassian.bamboo.plan.PlanResultKey;
  5. import com.atlassian.bamboo.process.EnvironmentVariableAccessor;
  6. import com.atlassian.bamboo.process.ExternalProcessBuilder;
  7. import com.atlassian.bamboo.process.ProcessService;
  8. import com.atlassian.bamboo.process.ProcessServiceImpl;
  9. import com.atlassian.bamboo.task.TaskContext;
  10. import com.atlassian.bamboo.task.TaskProcessCommandDecoratorModuleDescriptor;
  11. import com.atlassian.bamboo.testutils.build.logger.BuildLoggerManagerForTesting;
  12. import com.atlassian.bamboo.utils.BambooTestUtils;
  13. import com.atlassian.bamboo.v2.build.BuildContext;
  14. import com.atlassian.bamboo.v2.build.CurrentBuildResult;
  15. import com.atlassian.bamboo.v2.build.CurrentBuildResultImpl;
  16. import com.atlassian.bamboo.v2.build.agent.capability.CapabilityContext;
  17. import com.atlassian.bamboo.variable.VariableContext;
  18. import com.atlassian.bamboo.variable.VariableDefinitionContext;
  19. import com.atlassian.plugin.PluginAccessor;
  20. import com.atlassian.utils.process.ExternalProcess;
  21. import com.google.common.collect.Iterables;
  22. import com.google.common.collect.Lists;
  23. import com.google.common.collect.Maps;
  24. import org.apache.commons.lang.SystemUtils;
  25. import org.junit.Before;
  26. import org.junit.Test;
  27. import org.junit.runner.RunWith;
  28. import org.mockito.Mock;
  29. import org.mockito.runners.MockitoJUnitRunner;
  30. import java.io.File;
  31. import java.util.Arrays;
  32. import java.util.Collections;
  33. import java.util.List;
  34. import java.util.Map;
  35. import static org.hamcrest.MatcherAssert.assertThat;
  36. import static org.hamcrest.Matchers.equalTo;
  37. import static org.hamcrest.Matchers.greaterThanOrEqualTo;
  38. import static org.hamcrest.Matchers.is;
  39. import static org.mockito.Mockito.mock;
  40. import static org.mockito.Mockito.when;
  41. @RunWith(MockitoJUnitRunner.class)
  42. public class DevEnvRunnerTest
  43. {
  44. private static final PlanResultKey PLAN_RESULT_KEY = PlanKeys.getPlanResultKey("FOO-BAR", 1);
  45. private static final String PLAN_NAME = "Foo Bar";
  46. private static final String TASK_PLUGIN_KEY = "com.atlassian.foobar";
  47. private ProcessService processService;
  48. private BuildLoggerManagerForTesting buildLoggerManager;
  49. @Mock private EnvironmentVariableAccessor mockEnvironmentVariableAccessor;
  50. @Mock private PluginAccessor mockPluginAccessor;
  51. @Mock private TaskContext mockTaskContext;
  52. private Map<String, String> environment;
  53. @Before
  54. public void setUp() throws Exception
  55. {
  56. buildLoggerManager = new BuildLoggerManagerForTesting();
  57. CapabilityContext mockCapabilityContext = mock(CapabilityContext.class);
  58. VariableContext mockVariableContext = mock(VariableContext.class);
  59. when(mockVariableContext.getDefinitions()).thenReturn(Collections.<String, VariableDefinitionContext>emptyMap());
  60. processService = new ProcessServiceImpl(buildLoggerManager, mockCapabilityContext, mockEnvironmentVariableAccessor, mockPluginAccessor);
  61. CurrentBuildResult currentBuildResult = new CurrentBuildResultImpl();
  62. BuildContext mockBuildContext = mock(BuildContext.class);
  63. when(mockBuildContext.getResultKey()).thenReturn(PLAN_RESULT_KEY);
  64. when(mockBuildContext.getPlanResultKey()).thenReturn(PLAN_RESULT_KEY);
  65. when(mockBuildContext.getPlanName()).thenReturn(PLAN_NAME);
  66. when(mockBuildContext.getBuildResult()).thenReturn(currentBuildResult);
  67. when(mockBuildContext.getVariableContext()).thenReturn(mockVariableContext);
  68. when(mockTaskContext.getCommonContext()).thenReturn(mockBuildContext);
  69. when(mockTaskContext.getBuildLogger()).thenReturn(buildLoggerManager.getBuildLogger(PLAN_RESULT_KEY));
  70. when(mockTaskContext.getPluginKey()).thenReturn(TASK_PLUGIN_KEY);
  71. environment = Maps.newHashMap();
  72. when(mockEnvironmentVariableAccessor.getEnvironment(mockTaskContext)).thenReturn(environment);
  73. }
  74. @Test
  75. public void testTargetWithPipe() throws Exception
  76. {
  77. if (!SystemUtils.IS_OS_WINDOWS)
  78. {
  79. return;
  80. }
  81. when(mockEnvironmentVariableAccessor.getPaths(mockTaskContext)).thenReturn(Collections.<String>emptyList());
  82. when(mockPluginAccessor.getEnabledModuleDescriptorsByClass(TaskProcessCommandDecoratorModuleDescriptor.class)).thenReturn(Collections.<TaskProcessCommandDecoratorModuleDescriptor>emptyList());
  83. final List<String> actualArguments = Arrays.asList(
  84. "C:\\bamboo\\xml-data\\build-dir\\TRUNK-WIN64-SANDBOX\\source",
  85. "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0",
  86. "x86",
  87. "product/legasrv/legasrv-vs2010.sln",
  88. "/build",
  89. "Release Unicode|x64",
  90. "\"Release Unicode|x86\"",
  91. "\"Release|x86\""
  92. );
  93. final List<String> expectedOutput = Arrays.asList(
  94. "cd \"C:\\bamboo\\xml-data\\build-dir\\TRUNK-WIN64-SANDBOX\\source\"",
  95. "call \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" x86",
  96. "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\""
  97. );
  98. final List<String> command = Lists.newArrayList(Iterables.concat(
  99. Collections.singleton(BambooTestUtils.getFileFromResourceDirectory(this, "devenvrunner-test.bat").getPath()),
  100. actualArguments
  101. ));
  102. ExternalProcess externalProcess = processService.executeExternalProcess(
  103. mockTaskContext,
  104. new ExternalProcessBuilder()
  105. .workingDirectory(new File("."))
  106. .command(command)
  107. );
  108. assertThat(externalProcess.getHandler().isComplete(), is(true));
  109. List<String> logs = asStringLogs(buildLoggerManager.getBuildLogger(PLAN_RESULT_KEY).getBuildLog());
  110. assertThat(logs.size(), greaterThanOrEqualTo(expectedOutput.size()));
  111. assertThat(logs.subList(logs.size() - expectedOutput.size(), logs.size()), equalTo(expectedOutput));
  112. }
  113. private List<String> asStringLogs(List<LogEntry> logs)
  114. {
  115. List<String> errors = Lists.newArrayList();
  116. for (LogEntry entry : logs)
  117. {
  118. errors.add(entry.getUnstyledLog());
  119. }
  120. return errors;
  121. }
  122. @Test
  123. public void testTargetWithoutPipe() throws Exception
  124. {
  125. if (!SystemUtils.IS_OS_WINDOWS)
  126. {
  127. return;
  128. }
  129. when(mockEnvironmentVariableAccessor.getPaths(mockTaskContext)).thenReturn(Collections.<String>emptyList());
  130. when(mockPluginAccessor.getEnabledModuleDescriptorsByClass(TaskProcessCommandDecoratorModuleDescriptor.class)).thenReturn(Collections.<TaskProcessCommandDecoratorModuleDescriptor>emptyList());
  131. final List<String> actualArguments = Arrays.asList(
  132. "C:\\bamboo\\xml-data\\build-dir\\TRUNK-WIN64-SANDBOX\\source",
  133. "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0",
  134. "x86",
  135. "product/legasrv/legasrv-vs2010.sln",
  136. "/build",
  137. "Release Unicode"
  138. );
  139. final List<String> expectedOutput = Arrays.asList(
  140. "cd \"C:\\bamboo\\xml-data\\build-dir\\TRUNK-WIN64-SANDBOX\\source\"",
  141. "call \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" x86",
  142. "call \"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE\\devenv.com\" \"product/legasrv/legasrv-vs2010.sln\" /build \"Release Unicode\""
  143. );
  144. final List<String> command = Lists.newArrayList(Iterables.concat(
  145. Collections.singleton(BambooTestUtils.getFileFromResourceDirectory(this, "devenvrunner-test.bat").getPath()),
  146. actualArguments
  147. ));
  148. ExternalProcess externalProcess = processService.executeExternalProcess(
  149. mockTaskContext,
  150. new ExternalProcessBuilder()
  151. .workingDirectory(new File("."))
  152. .command(command)
  153. );
  154. assertThat(externalProcess.getHandler().isComplete(), is(true));
  155. List<String> logs = asStringLogs(buildLoggerManager.getBuildLogger(PLAN_RESULT_KEY).getBuildLog());
  156. assertThat(logs.size(), greaterThanOrEqualTo(expectedOutput.size()));
  157. assertThat(logs.subList(logs.size() - expectedOutput.size(), logs.size()), equalTo(expectedOutput));
  158. }
  159. }