Add explicit build flag for experimenting with test execution cacheability (#42649)
* Add build flag for ignoring random test seed as task input * Fix checkstyle violations
This commit is contained in:
parent
7bc86f23ec
commit
ef0b75765b
|
@ -843,7 +843,7 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
}
|
}
|
||||||
|
|
||||||
test.jvmArgumentProviders.add(nonInputProperties)
|
test.jvmArgumentProviders.add(nonInputProperties)
|
||||||
test.extensions.getByType(ExtraPropertiesExtension).set('nonInputProperties', nonInputProperties)
|
test.extensions.add('nonInputProperties', nonInputProperties)
|
||||||
|
|
||||||
test.executable = "${ext.get('runtimeJavaHome')}/bin/java"
|
test.executable = "${ext.get('runtimeJavaHome')}/bin/java"
|
||||||
test.workingDir = project.file("${project.buildDir}/testrun/${test.name}")
|
test.workingDir = project.file("${project.buildDir}/testrun/${test.name}")
|
||||||
|
@ -865,7 +865,8 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// we use './temp' since this is per JVM and tests are forbidden from writing to CWD
|
// we use './temp' since this is per JVM and tests are forbidden from writing to CWD
|
||||||
test.systemProperties 'java.io.tmpdir': './temp',
|
test.systemProperties 'gradle.dist.lib': new File(project.class.location.toURI()).parent,
|
||||||
|
'java.io.tmpdir': './temp',
|
||||||
'java.awt.headless': 'true',
|
'java.awt.headless': 'true',
|
||||||
'tests.gradle': 'true',
|
'tests.gradle': 'true',
|
||||||
'tests.artifact': project.name,
|
'tests.artifact': project.name,
|
||||||
|
@ -881,7 +882,6 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't track these as inputs since they contain absolute paths and break cache relocatability
|
// don't track these as inputs since they contain absolute paths and break cache relocatability
|
||||||
nonInputProperties.systemProperty('gradle.dist.lib', new File(project.class.location.toURI()).parent)
|
|
||||||
nonInputProperties.systemProperty('gradle.worker.jar', "${project.gradle.getGradleUserHomeDir()}/caches/${project.gradle.gradleVersion}/workerMain/gradle-worker.jar")
|
nonInputProperties.systemProperty('gradle.worker.jar', "${project.gradle.getGradleUserHomeDir()}/caches/${project.gradle.gradleVersion}/workerMain/gradle-worker.jar")
|
||||||
nonInputProperties.systemProperty('gradle.user.home', project.gradle.getGradleUserHomeDir())
|
nonInputProperties.systemProperty('gradle.user.home', project.gradle.getGradleUserHomeDir())
|
||||||
|
|
||||||
|
@ -1007,19 +1007,4 @@ class BuildPlugin implements Plugin<Project> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class SystemPropertyCommandLineArgumentProvider implements CommandLineArgumentProvider {
|
|
||||||
private final Map<String, Object> systemProperties = [:]
|
|
||||||
|
|
||||||
void systemProperty(String key, Object value) {
|
|
||||||
systemProperties.put(key, value)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
Iterable<String> asArguments() {
|
|
||||||
return systemProperties.collect { key, value ->
|
|
||||||
"-D${key}=${value.toString()}".toString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
package org.elasticsearch.gradle;
|
||||||
|
|
||||||
|
import org.gradle.api.tasks.Input;
|
||||||
|
import org.gradle.process.CommandLineArgumentProvider;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class SystemPropertyCommandLineArgumentProvider implements CommandLineArgumentProvider {
|
||||||
|
private final Map<String, Object> systemProperties = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
public void systemProperty(String key, Object value) {
|
||||||
|
systemProperties.put(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterable<String> asArguments() {
|
||||||
|
return systemProperties.entrySet()
|
||||||
|
.stream()
|
||||||
|
.map(entry -> "-D" + entry.getKey() + "=" + entry.getValue())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Track system property keys as an input so our build cache key will change if we add properties but values are still ignored
|
||||||
|
@Input
|
||||||
|
public Iterable<String> getPropertyNames() {
|
||||||
|
return systemProperties.keySet();
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,7 +22,9 @@ import com.avast.gradle.dockercompose.ComposeExtension;
|
||||||
import com.avast.gradle.dockercompose.DockerComposePlugin;
|
import com.avast.gradle.dockercompose.DockerComposePlugin;
|
||||||
import com.avast.gradle.dockercompose.tasks.ComposeUp;
|
import com.avast.gradle.dockercompose.tasks.ComposeUp;
|
||||||
import org.elasticsearch.gradle.OS;
|
import org.elasticsearch.gradle.OS;
|
||||||
|
import org.elasticsearch.gradle.SystemPropertyCommandLineArgumentProvider;
|
||||||
import org.elasticsearch.gradle.precommit.TestingConventionsTasks;
|
import org.elasticsearch.gradle.precommit.TestingConventionsTasks;
|
||||||
|
import org.gradle.api.Action;
|
||||||
import org.gradle.api.DefaultTask;
|
import org.gradle.api.DefaultTask;
|
||||||
import org.gradle.api.Plugin;
|
import org.gradle.api.Plugin;
|
||||||
import org.gradle.api.Project;
|
import org.gradle.api.Project;
|
||||||
|
@ -142,7 +144,8 @@ public class TestFixturesPlugin implements Plugin<Project> {
|
||||||
configureServiceInfoForTask(
|
configureServiceInfoForTask(
|
||||||
task,
|
task,
|
||||||
fixtureProject,
|
fixtureProject,
|
||||||
task::systemProperty
|
(name, host) ->
|
||||||
|
task.getExtensions().getByType(SystemPropertyCommandLineArgumentProvider.class).systemProperty(name, host)
|
||||||
);
|
);
|
||||||
task.dependsOn(fixtureProject.getTasks().getByName("postProcessFixture"));
|
task.dependsOn(fixtureProject.getTasks().getByName("postProcessFixture"));
|
||||||
})
|
})
|
||||||
|
@ -165,7 +168,9 @@ public class TestFixturesPlugin implements Plugin<Project> {
|
||||||
private void configureServiceInfoForTask(Task task, Project fixtureProject, BiConsumer<String, Integer> consumer) {
|
private void configureServiceInfoForTask(Task task, Project fixtureProject, BiConsumer<String, Integer> consumer) {
|
||||||
// Configure ports for the tests as system properties.
|
// Configure ports for the tests as system properties.
|
||||||
// We only know these at execution time so we need to do it in doFirst
|
// We only know these at execution time so we need to do it in doFirst
|
||||||
task.doFirst(theTask ->
|
task.doFirst(new Action<Task>() {
|
||||||
|
@Override
|
||||||
|
public void execute(Task theTask) {
|
||||||
fixtureProject.getExtensions().getByType(ComposeExtension.class).getServicesInfos()
|
fixtureProject.getExtensions().getByType(ComposeExtension.class).getServicesInfos()
|
||||||
.forEach((service, infos) -> {
|
.forEach((service, infos) -> {
|
||||||
infos.getTcpPorts()
|
infos.getTcpPorts()
|
||||||
|
@ -186,7 +191,9 @@ public class TestFixturesPlugin implements Plugin<Project> {
|
||||||
host
|
host
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
})
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue