PageRenderTime 39ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/src/main/java/com/atlassian/bamboo/plugin/dotnet/tests/mstest/MSTestRunnerTaskType.java

https://bitbucket.org/atlassian/bamboo-dotnet-plugin/
Java | 138 lines | 102 code | 28 blank | 8 comment | 4 complexity | c52c1108f9ca0e827cc80d94f6dfb736 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. package com.atlassian.bamboo.plugin.dotnet.tests.mstest;
  2. import com.atlassian.bamboo.build.logger.interceptors.ErrorMemorisingInterceptor;
  3. import com.atlassian.bamboo.build.test.TestCollationService;
  4. import com.atlassian.bamboo.configuration.ConfigurationMap;
  5. import com.atlassian.bamboo.plugin.dotnet.visualstudio.VisualStudioTaskType;
  6. import com.atlassian.bamboo.process.EnvironmentVariableAccessor;
  7. import com.atlassian.bamboo.process.ExternalProcessBuilder;
  8. import com.atlassian.bamboo.process.ProcessService;
  9. import com.atlassian.bamboo.task.TaskContext;
  10. import com.atlassian.bamboo.task.TaskException;
  11. import com.atlassian.bamboo.task.TaskResult;
  12. import com.atlassian.bamboo.task.TaskResultBuilder;
  13. import com.atlassian.bamboo.task.TaskType;
  14. import com.atlassian.bamboo.v2.build.agent.capability.Capability;
  15. import com.atlassian.bamboo.v2.build.agent.capability.CapabilityContext;
  16. import com.atlassian.utils.process.ExternalProcess;
  17. import com.google.common.base.Preconditions;
  18. import com.google.common.collect.Lists;
  19. import org.apache.commons.lang3.StringUtils;
  20. import org.apache.log4j.Logger;
  21. import org.jetbrains.annotations.NotNull;
  22. import java.io.File;
  23. import java.util.List;
  24. import java.util.Map;
  25. public class MSTestRunnerTaskType implements TaskType
  26. {
  27. private static final Logger log = Logger.getLogger(MSTestRunnerTaskType.class);
  28. // ------------------------------------------------------------------------------------------------------- Constants
  29. public static final String LABEL = "label";
  30. public static final String RUN_CONFIG = "mstestRunConfig";
  31. public static final String CONTAINER = "mstestContainer";
  32. public static final String RESULTS_FILE = "resultsfile";
  33. public static final String TEST_METADATA = "testmetadata";
  34. public static final String ENVIRONMENT = "environmentVariables";
  35. // ------------------------------------------------------------------------------------------------- Type Properties
  36. // ---------------------------------------------------------------------------------------------------- Dependencies
  37. private final ProcessService processService;
  38. private final TestCollationService testCollationService;
  39. private final CapabilityContext capabilityContext;
  40. private final EnvironmentVariableAccessor environmentVariableAccessor;
  41. // ---------------------------------------------------------------------------------------------------- Constructors
  42. public MSTestRunnerTaskType(final ProcessService processService, final TestCollationService testCollationService, final CapabilityContext capabilityContext, final EnvironmentVariableAccessor environmentVariableAccessor)
  43. {
  44. this.processService = processService;
  45. this.testCollationService = testCollationService;
  46. this.capabilityContext = capabilityContext;
  47. this.environmentVariableAccessor = environmentVariableAccessor;
  48. }
  49. // ----------------------------------------------------------------------------------------------- Interface Methods
  50. @Override
  51. @NotNull
  52. public TaskResult execute(@NotNull final TaskContext taskContext) throws TaskException
  53. {
  54. final ErrorMemorisingInterceptor errorLines = ErrorMemorisingInterceptor.newInterceptor();
  55. taskContext.getBuildLogger().getInterceptorStack().add(errorLines);
  56. try
  57. {
  58. final ConfigurationMap configuration = taskContext.getConfigurationMap();
  59. final String label = configuration.get(LABEL);
  60. Preconditions.checkNotNull(label, "You must select a Visual Studio executable before this task can execute.");
  61. final String runConfig = configuration.get(RUN_CONFIG);
  62. Preconditions.checkNotNull(runConfig, "Run Configuration");
  63. final String container = configuration.get(CONTAINER);
  64. final String testMetadata = configuration.get(TEST_METADATA);
  65. final String resultsfile = configuration.get(RESULTS_FILE);
  66. Preconditions.checkNotNull(resultsfile, "Results File Name");
  67. final Capability capability = capabilityContext.getCapabilitySet().getCapability(VisualStudioTaskType.VS_CAPABILITY_PREFIX + "." + label);
  68. Preconditions.checkNotNull(capability, "Capability");
  69. final File msTestExe = new File(capability.getValue(), "MSTest.exe");
  70. Preconditions.checkArgument(msTestExe.exists(), msTestExe.getAbsolutePath() + " cannot be found");
  71. final List<String> command = Lists.newArrayList(msTestExe.getAbsolutePath());
  72. if (StringUtils.isNotEmpty(container))
  73. {
  74. command.add("/testcontainer:" + container);
  75. }
  76. else if (StringUtils.isNotEmpty(testMetadata))
  77. {
  78. command.add("/testmetadata:" + testMetadata);
  79. }
  80. else
  81. {
  82. throw new IllegalStateException("Configuration is not valid. Neither a Test Container or a path to a Test Metadata file were specified");
  83. }
  84. command.add("/resultsfile:" + resultsfile);
  85. if (StringUtils.isNotEmpty(runConfig))
  86. {
  87. command.add("/runconfig:" + runConfig);
  88. }
  89. final String environment = configuration.get(ENVIRONMENT);
  90. final Map<String, String> env = environmentVariableAccessor.splitEnvironmentAssignments(environment);
  91. final ExternalProcess externalProcess = processService.executeExternalProcess(taskContext,
  92. new ExternalProcessBuilder()
  93. .command(command)
  94. .env(env)
  95. .workingDirectory(taskContext.getWorkingDirectory()));
  96. testCollationService.collateTestResults(taskContext, resultsfile, new MSTestTestReportCollector());
  97. return TaskResultBuilder.newBuilder(taskContext)
  98. .checkTestFailures()
  99. .checkReturnCode(externalProcess)
  100. .build();
  101. }
  102. finally
  103. {
  104. taskContext.getBuildContext().getBuildResult().addBuildErrors(errorLines.getErrorStringList());
  105. }
  106. }
  107. // -------------------------------------------------------------------------------------------------- Action Methods
  108. // -------------------------------------------------------------------------------------------------- Public Methods
  109. // -------------------------------------------------------------------------------------- Basic Accessors / Mutators
  110. }