Skip to content

Commit 8d13cec

Browse files
committed
iter
1 parent 1cfe88c commit 8d13cec

File tree

3 files changed

+114
-12
lines changed

3 files changed

+114
-12
lines changed

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/AbstractTransportVersionFuncTest.groovy

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
3434
}
3535
}
3636

37+
def deleteJavaSource(String project, String packageName, String className) {
38+
String packageSlashes = packageName.replace('.', '/')
39+
def filePath = "${project}/src/main/java/${packageSlashes}/${className}.java"
40+
assert file(filePath).exists(): "File does not exist: ${filePath}"
41+
file(filePath).delete()
42+
}
43+
3744
def namedTransportVersion(String name, String ids) {
3845
javaResource("myserver", "transport/definitions/named/" + name + ".csv", ids)
3946
}
@@ -61,6 +68,10 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
6168
return referencedTransportVersion(name, "Test${name.capitalize()}")
6269
}
6370

71+
def deleteTransportVersionReference(String name) {
72+
deleteJavaSource("myserver", "org.elasticsearch", "Test${name.capitalize()}")
73+
}
74+
6475
def latestTransportVersion(String branch, String name, String id) {
6576
javaResource("myserver", "transport/latest/" + branch + ".csv","${name},${id}")
6677
}

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/TransportVersionGenerationFuncTest.groovy

Lines changed: 100 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,38 +14,47 @@ import org.gradle.testkit.runner.TaskOutcome
1414
class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTest {
1515
def "test setup works"() {
1616
when:
17-
def result = gradleRunner("generateTransportVersionDefinition").build()
17+
def result = gradleRunner(
18+
":myserver:generateTransportVersionDefinition",
19+
":myserver:validateTransportVersionDefinitions"
20+
).build()
21+
1822
then:
1923
result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
24+
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
2025
}
2126

22-
def "A definition should be generated for the given branches"(List<String> branches) {
27+
def "A definition should be generated when specified by an arg but no code reference exists"(List<String> branches) {
2328
given:
2429
String tvName = "test_tv_patch_ids"
25-
referencedTransportVersion(tvName)
2630
List<LatestFile> latestBranchesToOriginalIds = readLatestFiles(branches)
2731

28-
when:
32+
when: "generation is run with a name specified and no code references"
2933
def result = gradleRunner(
30-
":myserver:validateTransportVersionDefinitions",
3134
"generateTransportVersionDefinition",
3235
"--name=" + tvName,
3336
"--branches=" + branches.join(",")
3437
).build()
3538

36-
then:
39+
then: "The generation task should succeed and create the definition file"
3740
result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
38-
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
3941
validateDefinitionFile(tvName, latestBranchesToOriginalIds)
4042

43+
when: "A reference is added"
44+
referencedTransportVersion(tvName)
45+
def validateResult = gradleRunner("validateTransportVersionDefinitions").build()
46+
47+
then: "The full validation should succeed now that the reference exists"
48+
validateResult.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
49+
4150
where:
4251
branches << [
4352
["9.2"],
4453
["9.2", "9.1"]
4554
]
4655
}
4756

48-
def "A definition should be generated when the name isn't specified"() {
57+
def "A definition should be generated when the name arg isn't specified but a code reference exists"() {
4958
given:
5059
String tvName = "test_tv_patch_ids"
5160
referencedTransportVersion(tvName)
@@ -65,7 +74,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
6574
validateDefinitionFile(tvName, latestBranchesToOriginalIds)
6675
}
6776

68-
def "Should fail if branches are omitted and state should remain unaltered"() {
77+
def "Generation should fail if the branches arg is omitted, the state should remain unaltered"() {
6978
when:
7079
def generateResult = gradleRunner("generateTransportVersionDefinition", "--name=no_branches").buildAndFail()
7180
def validateResult = gradleRunner("validateTransportVersionDefinitions").build()
@@ -75,11 +84,91 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
7584
validateResult.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
7685
}
7786

87+
def "Latest file modifications should be reverted"(
88+
List<String> branchesParam,
89+
List<String> latestFilesModified,
90+
String name
91+
) {
92+
given:
93+
def originalLatestFiles = latestFilesModified.stream().map { readLatestFile(it) }.toList()
94+
95+
when: "The latest files are modified then generation is run without a name"
96+
originalLatestFiles.forEach {
97+
latestTransportVersion(it.branch, it.name + "_modification", (it.id + 1).toString())
98+
}
99+
def args = [
100+
":myserver:validateTransportVersionDefinitions",
101+
":myserver:generateTransportVersionDefinition"
102+
]
103+
if (branchesParam != null) {
104+
args.add("--branches=" + branchesParam.join(","))
105+
}
106+
if (name != null) {
107+
referencedTransportVersion(name)
108+
}
109+
def result = gradleRunner(args.toArray(new String[0])).build()
110+
111+
then: "The generation and validation tasks should succeed, and the latest files should be reverted"
112+
result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
113+
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
114+
originalLatestFiles.forEach { originalLatest ->
115+
def latest = readLatestFile(originalLatest.branch)
116+
assert latest.branch == originalLatest.branch
117+
assert latest.id == originalLatest.id
118+
}
119+
120+
where:
121+
branchesParam | latestFilesModified | name
122+
null | ["9.2"] | null
123+
null | ["9.2", "9.1"] | null
124+
["9.2", "9.1"] | ["9.2"] | null
125+
["9.2"] | ["9.1"] | "test_tv" // TODO legitimate bug?
126+
}
127+
128+
// TODO this test is finding a legitimate bug
129+
def "definitions that are no longer referenced should be deleted"(List<String> branches) {
130+
given:
131+
String definitionName = "test_tv_patch_ids"
132+
referencedTransportVersion(definitionName)
133+
List<LatestFile> originalLatestFiles = readLatestFiles(branches)
134+
135+
when: "The definition is generated"
136+
def result = gradleRunner(
137+
":myserver:validateTransportVersionDefinitions",
138+
":myserver:generateTransportVersionDefinition",
139+
"--name=" + definitionName,
140+
"--branches=" + branches.join(",")
141+
).build()
142+
143+
then: "The generation task should succeed and create the definition file"
144+
result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
145+
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
146+
validateDefinitionFile(definitionName, originalLatestFiles)
147+
148+
when: "The reference is removed and the generation is run again"
149+
deleteTransportVersionReference(definitionName)
150+
def secondResult = gradleRunner(
151+
":myserver:validateTransportVersionDefinitions",
152+
":myserver:generateTransportVersionDefinition",
153+
"--branches=" + branches.join(",")
154+
).build()
155+
156+
then: "The generation task should succeed and the definition file should be deleted"
157+
!file("myserver/src/main/resources/transport/definitions/named/${definitionName}.csv").exists()
158+
secondResult.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
159+
secondResult.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
160+
161+
where:
162+
branches << [
163+
["9.2"],
164+
["9.2", "9.1"]
165+
]
166+
}
167+
78168

79169
/*
80170
TODO: Add tests that check that:
81-
- TVs added ontop of main in git, but are no longer referenced, are deleted
82-
- name without branches param should fail
171+
-
83172
- a latest file without a corresponding definition file should be reverted to main
84173
- a merge conflict should be resolved, resulting in regeneration of the latest file.
85174
-

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/TransportVersionResourcesService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,10 @@ List<TransportVersionDefinition> getChangedNamedDefinitions() throws IOException
127127
List<TransportVersionDefinition> changedDefinitions = new ArrayList<>();
128128
String namedPrefix = NAMED_DIR.toString();
129129
for (String changedPath : getChangedResources()) {
130-
if (changedPath.startsWith(namedPrefix) == false) {
130+
if (changedPath.contains(namedPrefix) == false) { // TODO make this more robust
131131
continue;
132132
}
133+
// TODO why are we getting the main file here? Shouldn't we just read the changed file directly?
133134
TransportVersionDefinition definition = getMainFile(changedPath, TransportVersionDefinition::fromString);
134135
changedDefinitions.add(definition);
135136
}
@@ -224,6 +225,7 @@ private Set<String> getMainResources() {
224225
private Set<String> getChangedResources() {
225226
if (changedResources.get() == null) {
226227
synchronized (changedResources) {
228+
// gitCommand("add", "."); // TODO this finds the files that have been added without being committed.
227229
String output = gitCommand("diff", "--name-only", "main", ".");
228230

229231
HashSet<String> resources = new HashSet<>();

0 commit comments

Comments
 (0)