build scripts: support env variables specified in JUnit run configurations

This commit is contained in:
nik
2018-01-18 10:08:16 +03:00
parent a66fece72a
commit 1b75a74009
4 changed files with 26 additions and 9 deletions
@@ -15,6 +15,7 @@ class JUnitRunConfigurationProperties {
final List<String> testClassPatterns
final List<String> vmParameters
final List<String> requiredArtifacts
final Map<String, String> envVariables
static JUnitRunConfigurationProperties findRunConfiguration(String projectHome, String name, BuildMessages messages) {
def file = new File(projectHome, ".idea/runConfigurations/${FileUtil.sanitizeFileName(name)}.xml")
@@ -64,18 +65,21 @@ class JUnitRunConfigurationProperties {
artifact?.collect { it.@name } ?: []
def vmParameters = options["VM_PARAMETERS"].tokenize()
return new JUnitRunConfigurationProperties(configuration.@name, moduleName, testClassPatterns, vmParameters, requiredArtifacts)
def envVariables = first(configuration.envs)?.env?.collectEntries { [it.@name, it.@value] } ?: [:]
return new JUnitRunConfigurationProperties(configuration.@name, moduleName, testClassPatterns, vmParameters, requiredArtifacts, envVariables)
}
private static <T> T first(Collection<T> collection) {
collection == null || collection.isEmpty() ? null : collection.first()
}
JUnitRunConfigurationProperties(String name, String moduleName, List<String> testClassPatterns, List<String> vmParameters, List<String> requiredArtifacts) {
JUnitRunConfigurationProperties(String name, String moduleName, List<String> testClassPatterns, List<String> vmParameters,
List<String> requiredArtifacts, Map<String, String> envVariables) {
this.name = name
this.moduleName = moduleName
this.testClassPatterns = testClassPatterns
this.requiredArtifacts = requiredArtifacts
this.vmParameters = vmParameters
this.envVariables = envVariables
}
}
@@ -31,6 +31,7 @@ import org.jetbrains.jps.util.JpsPathUtil
import java.util.function.Predicate
import java.util.jar.Manifest
/**
* @author nik
*/
@@ -106,7 +107,7 @@ class TestingTasksImpl extends TestingTasks {
context.messages.progress("Running '${runConfigurationProperties.name}' run configuration")
List<String> filteredVmOptions = removeStandardJvmOptions(runConfigurationProperties.vmParameters)
runTestsProcess(runConfigurationProperties.moduleName, null, runConfigurationProperties.testClassPatterns.join(";"),
filteredVmOptions + additionalJvmOptions, [:], false)
filteredVmOptions + additionalJvmOptions, [:], runConfigurationProperties.envVariables, false)
}
private static List<String> removeStandardJvmOptions(List<String> vmOptions) {
@@ -136,7 +137,7 @@ class TestingTasksImpl extends TestingTasks {
additionalSystemProperties["exclude.tests.roots.file"] = excludedRootsFile.absolutePath
}
runTestsProcess(mainModule, options.testGroups, options.testPatterns, additionalJvmOptions, additionalSystemProperties, false)
runTestsProcess(mainModule, options.testGroups, options.testPatterns, additionalJvmOptions, additionalSystemProperties, [:], false)
}
private void debugTests(String remoteDebugJvmOptions, List<String> additionalJvmOptions, String defaultMainModule, Predicate<File> rootExcludeCondition) {
@@ -161,11 +162,11 @@ class TestingTasksImpl extends TestingTasks {
}
def mainModule = options.mainModule ?: defaultMainModule
def filteredOptions = removeStandardJvmOptions(remoteDebugJvmOptions.split(";").toList())
runTestsProcess(mainModule, null, junitClass, filteredOptions + additionalJvmOptions, [:], true)
runTestsProcess(mainModule, null, junitClass, filteredOptions + additionalJvmOptions, [:], [:], true)
}
private void runTestsProcess(String mainModule, String testGroups, String testPatterns,
List<String> additionalJvmOptions, Map<String, String> additionalSystemProperties, boolean remoteDebugging) {
List<String> additionalJvmOptions, Map<String, String> additionalSystemProperties, Map<String, String> envVariables, boolean remoteDebugging) {
List<String> testsClasspath = context.getModuleRuntimeClasspath(context.findRequiredModule(mainModule), true)
List<String> bootstrapClasspath = context.getModuleRuntimeClasspath(context.findRequiredModule("tests_bootstrap"), false)
def classpathFile = new File("$context.paths.temp/junit.classpath")
@@ -254,6 +255,9 @@ class TestingTasksImpl extends TestingTasks {
context.messages.info("System properties: $systemProperties")
context.messages.info("Bootstrap classpath: $bootstrapClasspath")
context.messages.info("Tests classpath: $testsClasspath")
if (!envVariables.isEmpty()) {
context.messages.info("Environment variables: $envVariables")
}
if (suspendDebugProcess) {
context.messages.info("""
@@ -262,11 +266,11 @@ class TestingTasksImpl extends TestingTasks {
""")
}
if (isBootstrapSuiteDefault()) {
runJUnitTask(jvmArgs, systemProperties, bootstrapClasspath)
runJUnitTask(jvmArgs, systemProperties, envVariables, bootstrapClasspath)
}
else {
//run other suites instead of BootstrapTests
runJUnitTask(jvmArgs, systemProperties, testsClasspath)
runJUnitTask(jvmArgs, systemProperties, envVariables, testsClasspath)
}
if (new File(hprofSnapshotFilePath).exists()) {
@@ -283,8 +287,9 @@ class TestingTasksImpl extends TestingTasks {
return snapshotsDir
}
@SuppressWarnings("GrUnresolvedAccess")
@CompileDynamic
private void runJUnitTask(List<String> jvmArgs, Map<String, String> systemProperties, List<String> bootstrapClasspath) {
private void runJUnitTask(List<String> jvmArgs, Map<String, String> systemProperties, Map<String, String> envVariables, List<String> bootstrapClasspath) {
defineJunitTask(context.ant, "$context.paths.communityHome/lib")
String junitTemp = "$context.paths.temp/junit"
@@ -300,6 +305,9 @@ class TestingTasksImpl extends TestingTasks {
sysproperty(key: key, value: value)
}
}
envVariables.each {
env(key: it.key, value: it.value)
}
if (teamCityFormatterClasspath != null) {
classpath {
@@ -13,6 +13,10 @@
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies"/>
</option>
<envs>
<env name="foo" value="1"/>
<env name="bar" value="2"/>
</envs>
<method>
<option name="BuildArtifacts" enabled="true">
<artifact name="artifact1"/>
@@ -17,6 +17,7 @@ class JUnitRunConfigurationPropertiesTest {
assertEquals(listOf("com.example.test.MainTest"), properties.testClassPatterns)
assertEquals(listOf("-ea", "-Xmx512m"), properties.vmParameters)
assertEquals(listOf("artifact1", "artifact2"), properties.requiredArtifacts)
assertEquals(mapOf("foo" to "1", "bar" to "2"), properties.envVariables)
}
@Test