Skip to content

Commit 2b8c8f6

Browse files
committed
iter
1 parent 2e60a3b commit 2b8c8f6

File tree

1 file changed

+178
-20
lines changed

1 file changed

+178
-20
lines changed

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

Lines changed: 178 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
9595

9696
when: "We modify the latest files"
9797
originalModifiedLatestFiles.forEach {
98-
latestTransportVersion(it.branch, it.name + "_modification", (it.id + 1).toString())
98+
latestTransportVersion(it.branch, it.name + "_modification", (it.id + 7).toString())
9999
}
100100

101101
and: "We run the generation task"
@@ -106,10 +106,12 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
106106
if (branchesParam != null) {
107107
args.add("--branches=" + branchesParam.join(","))
108108
}
109+
def result = gradleRunner(args.toArray(new String[0])).build()
110+
111+
and: "If a name is specified, we add a reference so validation succeeds"
109112
if (name != null) {
110-
referencedTransportVersion(name) // Ensure the definition file is referenced to allow validation to succeed
113+
referencedTransportVersion(name)
111114
}
112-
def result = gradleRunner(args.toArray(new String[0])).build()
113115

114116
then: "The generation and validation tasks should succeed"
115117
result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
@@ -143,7 +145,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
143145
}
144146

145147
// TODO this test is finding a legitimate bug
146-
def "definitions that are no longer referenced should be deleted and latest files reverted"(List<String> branches) {
148+
def "When a reference is removed after a definition is generated, the definition should be deleted and latest files reverted"(List<String> branches) {
147149
given:
148150
String definitionName = "test_tv_patch_ids"
149151
referencedTransportVersion(definitionName)
@@ -182,34 +184,190 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
182184
]
183185
}
184186

185-
def "unreferenced definition files should be deleted"() {
187+
def "When a reference is renamed after a definition was generated, the original should be removed and latest files updated"(List<String> branches) {
186188
given:
187-
namedTransportVersion("old_name", "8124000")
188-
referencedTransportVersion("new_name")
189+
String firstName = "original_tv_name"
190+
referencedTransportVersion(firstName)
191+
List<LatestFile> originalLatestFiles1 = readLatestFiles(branches)
189192

190-
when:
193+
when: "The definition is generated"
191194
def result = gradleRunner(
192195
":myserver:validateTransportVersionDefinitions",
193196
":myserver:generateTransportVersionDefinition",
194-
"--name=new_name",
195-
"--branches=9.2"
197+
"--name=" + firstName,
198+
"--branches=" + branches.join(",")
196199
).build()
197200

198-
then:
199-
!file("myserver/src/main/resources/transport/definitions/named/old_name.csv").exists()
201+
then: "The generation task should succeed and create the definition file"
202+
file("myserver/src/main/resources/transport/definitions/named/${firstName}.csv").exists()
200203
result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
201204
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
205+
validateDefinitionFile(firstName, originalLatestFiles1)
206+
207+
when: "The reference is renamed and the generation is run again"
208+
deleteTransportVersionReference(firstName)
209+
String secondName = "new_tv_name"
210+
referencedTransportVersion(secondName)
211+
List<LatestFile> originalLatestFiles2 = readLatestFiles(branches)
212+
213+
def secondResult = gradleRunner(
214+
":myserver:validateTransportVersionDefinitions",
215+
":myserver:generateTransportVersionDefinition",
216+
"--branches=" + branches.join(",")
217+
).build()
218+
219+
then: "The generation task should succeed and the definition file should be deleted"
220+
!file("myserver/src/main/resources/transport/definitions/named/${firstName}.csv").exists()
221+
file("myserver/src/main/resources/transport/definitions/named/${secondName}.csv").exists()
222+
secondResult.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
223+
secondResult.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
224+
validateDefinitionFile(secondName, originalLatestFiles2)
225+
226+
where:
227+
branches << [
228+
["9.2"],
229+
["9.2", "9.1"]
230+
]
202231
}
203232

233+
def "when a definition file is deleted and the reference and latest files haven't been, the system should regenerate"(List<String> branches) {
234+
given:
235+
String definitionName = "test_tv"
236+
referencedTransportVersion(definitionName)
237+
List<LatestFile> originalLatestFiles = readLatestFiles(branches)
238+
239+
when: "The definition is generated"
240+
def result = gradleRunner(
241+
":myserver:validateTransportVersionDefinitions",
242+
":myserver:generateTransportVersionDefinition",
243+
"--name=" + definitionName,
244+
"--branches=" + branches.join(",")
245+
).build()
246+
247+
then: "The generation task should succeed and create the definition file"
248+
result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
249+
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
250+
validateDefinitionFile(definitionName, originalLatestFiles)
251+
252+
when: "The definition file is deleted"
253+
file("myserver/src/main/resources/transport/definitions/named/${definitionName}.csv").delete()
254+
255+
then: "The definition file should no longer exist"
256+
!file("myserver/src/main/resources/transport/definitions/named/${definitionName}.csv").exists()
257+
258+
when: "Validation is run"
259+
def validationResult = gradleRunner(":myserver:validateTransportVersionDefinitions").buildAndFail()
260+
261+
then: "The validation task should fail since the definition file is missing"
262+
validationResult.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.FAILED
263+
264+
when: "The generation task is run again"
265+
def secondResult = gradleRunner(
266+
":myserver:validateTransportVersionDefinitions",
267+
":myserver:generateTransportVersionDefinition",
268+
"--branches=" + branches.join(",")
269+
).build()
270+
271+
then: "The generation task should succeed and the definition file should be recreated"
272+
secondResult.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
273+
secondResult.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
274+
validateDefinitionFile(definitionName, originalLatestFiles)
275+
276+
where:
277+
branches << [
278+
["9.2"],
279+
["9.2", "9.1"]
280+
]
281+
}
204282

205-
/*
206-
TODO: Add tests that check that:
207-
-
208-
- a latest file without a corresponding definition file should be reverted to main
209-
- a merge conflict should be resolved, resulting in regeneration of the latest file.
210-
- add a reference, generate, remove the reference, add another reference, generate
211-
-
212-
*/
283+
def "When a latest file is incorrectly changed and a referenced definition file exists, the latest file should be regenerated"(List<String> branches) {
284+
given:
285+
String definitionName = "test_tv"
286+
referencedTransportVersion(definitionName)
287+
List<LatestFile> originalLatestFiles = readLatestFiles(branches)
288+
289+
when: "The definition is generated"
290+
def result = gradleRunner(
291+
":myserver:validateTransportVersionDefinitions",
292+
":myserver:generateTransportVersionDefinition",
293+
"--name=" + definitionName,
294+
"--branches=" + branches.join(",")
295+
).build()
296+
297+
then: "The generation task should succeed and create the definition file"
298+
result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
299+
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
300+
validateDefinitionFile(definitionName, originalLatestFiles)
301+
302+
when: "The latest files are modified"
303+
originalLatestFiles.forEach {
304+
latestTransportVersion(it.branch, it.name + "_modification", (it.id + 7).toString())
305+
}
306+
307+
and: "The generation task is run again"
308+
def secondResult = gradleRunner(
309+
":myserver:validateTransportVersionDefinitions",
310+
":myserver:generateTransportVersionDefinition",
311+
"--branches=" + branches.join(",")
312+
).build()
313+
314+
then: "The generation task should succeed and the latest files should be reverted and incremented correctly"
315+
secondResult.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
316+
secondResult.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
317+
validateDefinitionFile(definitionName, originalLatestFiles)
318+
319+
where:
320+
branches << [
321+
["9.2"],
322+
["9.2", "9.1"]
323+
]
324+
}
325+
326+
// TODO legitimate bug, need to always clean up latest for patch versions
327+
def "When a definition is created with a patch version, then generation is called without the patch version, the state should be updated"() {
328+
given:
329+
String definitionName = "test_tv"
330+
referencedTransportVersion(definitionName)
331+
List<String> branches = ["9.2", "9.1"]
332+
List<String> mainBranch = ["9.2"]
333+
List<LatestFile> originalLatestFilesWithPatch = readLatestFiles(branches)
334+
List<LatestFile> originalLatestMainFile = readLatestFiles(mainBranch)
335+
String originalLatestPatchText = file("myserver/src/main/resources/transport/latest/9.1.csv").text.strip()
336+
337+
when: "The definition is generated with a patch version"
338+
def result = gradleRunner(
339+
":myserver:validateTransportVersionDefinitions",
340+
":myserver:generateTransportVersionDefinition",
341+
"--name=" + definitionName,
342+
"--branches=" + branches.join(",")
343+
).build()
344+
345+
then: "The generation task should succeed and create the definition file"
346+
result.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
347+
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
348+
validateDefinitionFile(definitionName, originalLatestFilesWithPatch)
349+
350+
when: "The generation is called again without the patch version"
351+
def secondResult = gradleRunner(
352+
":myserver:validateTransportVersionDefinitions",
353+
":myserver:generateTransportVersionDefinition",
354+
"--branches=" + mainBranch.join(",")
355+
).build()
356+
357+
then: "The generation task should succeed and the definition file should be updated"
358+
secondResult.task(":myserver:generateTransportVersionDefinition").outcome == TaskOutcome.SUCCESS
359+
secondResult.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
360+
validateDefinitionFile(definitionName, originalLatestMainFile)
361+
originalLatestPatchText == file("myserver/src/main/resources/transport/latest/9.1.csv").text.strip()
362+
}
363+
364+
def "Latest files mangled by a merge conflict should be regenerated, and the most recent definition file should be updated"() {
365+
366+
}
367+
368+
def "When a reference is deleted, the system should revert to the original state"() {
369+
370+
}
213371

214372
List<LatestFile> readLatestFiles(List<String> branches) {
215373
return branches.stream()

0 commit comments

Comments
 (0)