Skip to content

Commit b3ee485

Browse files
Merge branch 'main' into parker/random-tests-patterned-text
2 parents d9b0c6f + e03b894 commit b3ee485

File tree

48 files changed

+2171
-237
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2171
-237
lines changed

.buildkite/pipelines/intake.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ steps:
6565
timeout_in_minutes: 300
6666
matrix:
6767
setup:
68-
BWC_VERSION: ["8.17.11", "8.18.6", "8.19.3", "9.0.6", "9.1.2", "9.2.0"]
68+
BWC_VERSION: ["8.17.11", "8.18.6", "8.19.3", "9.0.6", "9.1.3", "9.2.0"]
6969
agents:
7070
provider: gcp
7171
image: family/elasticsearch-ubuntu-2404

.buildkite/pipelines/periodic-packaging.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -366,8 +366,8 @@ steps:
366366
env:
367367
BWC_VERSION: 9.0.6
368368

369-
- label: "{{matrix.image}} / 9.1.2 / packaging-tests-upgrade"
370-
command: ./.ci/scripts/packaging-test.sh -Dbwc.checkout.align=true destructiveDistroUpgradeTest.v9.1.2
369+
- label: "{{matrix.image}} / 9.1.3 / packaging-tests-upgrade"
370+
command: ./.ci/scripts/packaging-test.sh -Dbwc.checkout.align=true destructiveDistroUpgradeTest.v9.1.3
371371
timeout_in_minutes: 300
372372
matrix:
373373
setup:
@@ -380,7 +380,7 @@ steps:
380380
machineType: custom-16-32768
381381
buildDirectory: /dev/shm/bk
382382
env:
383-
BWC_VERSION: 9.1.2
383+
BWC_VERSION: 9.1.3
384384

385385
- label: "{{matrix.image}} / 9.2.0 / packaging-tests-upgrade"
386386
command: ./.ci/scripts/packaging-test.sh -Dbwc.checkout.align=true destructiveDistroUpgradeTest.v9.2.0

.buildkite/pipelines/periodic.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -401,8 +401,8 @@ steps:
401401
- signal_reason: agent_stop
402402
limit: 3
403403

404-
- label: 9.1.2 / bwc
405-
command: .ci/scripts/run-gradle.sh -Dbwc.checkout.align=true v9.1.2#bwcTest
404+
- label: 9.1.3 / bwc
405+
command: .ci/scripts/run-gradle.sh -Dbwc.checkout.align=true v9.1.3#bwcTest
406406
timeout_in_minutes: 300
407407
agents:
408408
provider: gcp
@@ -411,7 +411,7 @@ steps:
411411
buildDirectory: /dev/shm/bk
412412
preemptible: true
413413
env:
414-
BWC_VERSION: 9.1.2
414+
BWC_VERSION: 9.1.3
415415
retry:
416416
automatic:
417417
- exit_status: "-1"
@@ -506,7 +506,7 @@ steps:
506506
setup:
507507
ES_RUNTIME_JAVA:
508508
- openjdk21
509-
BWC_VERSION: ["8.17.11", "8.18.6", "8.19.3", "9.0.6", "9.1.2", "9.2.0"]
509+
BWC_VERSION: ["8.17.11", "8.18.6", "8.19.3", "9.0.6", "9.1.3", "9.2.0"]
510510
agents:
511511
provider: gcp
512512
image: family/elasticsearch-ubuntu-2404
@@ -550,7 +550,7 @@ steps:
550550
ES_RUNTIME_JAVA:
551551
- openjdk21
552552
- openjdk23
553-
BWC_VERSION: ["8.17.11", "8.18.6", "8.19.3", "9.0.6", "9.1.2", "9.2.0"]
553+
BWC_VERSION: ["8.17.11", "8.18.6", "8.19.3", "9.0.6", "9.1.3", "9.2.0"]
554554
agents:
555555
provider: gcp
556556
image: family/elasticsearch-ubuntu-2404

.ci/bwcVersions

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ BWC_VERSION:
2020
- "8.18.6"
2121
- "8.19.3"
2222
- "9.0.6"
23-
- "9.1.2"
23+
- "9.1.3"
2424
- "9.2.0"

.ci/snapshotBwcVersions

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ BWC_VERSION:
33
- "8.18.6"
44
- "8.19.3"
55
- "9.0.6"
6-
- "9.1.2"
6+
- "9.1.3"
77
- "9.2.0"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,301 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport
11+
12+
13+
import org.elasticsearch.gradle.fixtures.AbstractGradleFuncTest
14+
import org.gradle.testkit.runner.BuildResult
15+
import org.gradle.testkit.runner.TaskOutcome
16+
17+
class TransportVersionManagementPluginFuncTest extends AbstractGradleFuncTest {
18+
19+
/**
20+
*
21+
* @param project
22+
* @param path
23+
* @param content
24+
* @return
25+
*/
26+
def javaResource(String project, String path, String content) {
27+
file("${project}/src/main/resources/${path}").withWriter { writer ->
28+
writer << content
29+
}
30+
}
31+
32+
def javaSource(String project, String packageName, String className, String imports, String content) {
33+
String packageSlashes = packageName.replace('.', '/')
34+
file("${project}/src/main/java/${packageSlashes}/${className}.java").withWriter { writer ->
35+
writer << """
36+
package ${packageName};
37+
${imports}
38+
public class ${className} {
39+
${content}
40+
}
41+
"""
42+
}
43+
}
44+
45+
def definedTransportVersion(String name, String ids) {
46+
javaResource("myserver", "transport/defined/" + name + ".csv", ids)
47+
}
48+
49+
def definedAndUsedTransportVersion(String name, String ids) {
50+
return definedAndUsedTransportVersion(name, ids, "Test${name.capitalize()}")
51+
}
52+
53+
def definedAndUsedTransportVersion(String name, String ids, String classname) {
54+
javaSource("myserver", "org.elasticsearch", classname, "", """
55+
static final TransportVersion usage = TransportVersion.fromName("${name}");
56+
""")
57+
definedTransportVersion(name, ids)
58+
}
59+
60+
def latestTransportVersion(String branch, String name, String id) {
61+
javaResource("myserver", "transport/latest/" + branch + ".csv","${name},${id}")
62+
}
63+
64+
def validateReferencesFails(String project) {
65+
return gradleRunner(":${project}:validateTransportVersionReferences").buildAndFail()
66+
}
67+
68+
def validateDefinitionsFails() {
69+
return gradleRunner(":myserver:validateTransportVersionDefinitions").buildAndFail()
70+
}
71+
72+
def assertReferencesFailure(BuildResult result, String project, String expectedOutput) {
73+
result.task(":${project}:validateTransportVersionReferences").outcome == TaskOutcome.FAILED
74+
assertOutputContains(result.output, expectedOutput)
75+
}
76+
77+
def assertDefinitionsFailure(BuildResult result, String expectedOutput) {
78+
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.FAILED
79+
assertOutputContains(result.output, expectedOutput)
80+
}
81+
82+
def setup() {
83+
configurationCacheCompatible = false
84+
internalBuild()
85+
settingsFile << """
86+
include ':myserver'
87+
include ':myplugin'
88+
"""
89+
file("gradle.properties") << """
90+
org.elasticsearch.transport.definitionsProject=:myserver
91+
"""
92+
93+
file("myserver/build.gradle") << """
94+
apply plugin: 'java-library'
95+
apply plugin: 'elasticsearch.transport-version-management'
96+
apply plugin: 'elasticsearch.global-transport-version-management'
97+
"""
98+
definedTransportVersion("existing_91", "8012000")
99+
definedTransportVersion("existing_92", "8123000,8012001")
100+
latestTransportVersion("9.2", "existing_92", "8123000")
101+
latestTransportVersion("9.1", "existing_92", "8012001")
102+
// a mock version of TransportVersion, just here so we can compile Dummy.java et al
103+
javaSource("myserver", "org.elasticsearch", "TransportVersion", "", """
104+
public static TransportVersion fromName(String name) {
105+
return null;
106+
}
107+
""")
108+
javaSource("myserver", "org.elasticsearch", "Dummy", "", """
109+
static final TransportVersion existing91 = TransportVersion.fromName("existing_91");
110+
static final TransportVersion existing92 = TransportVersion.fromName("existing_92");
111+
""")
112+
113+
file("myplugin/build.gradle") << """
114+
apply plugin: 'java-library'
115+
apply plugin: 'elasticsearch.transport-version-management'
116+
117+
dependencies {
118+
implementation project(":myserver")
119+
}
120+
"""
121+
122+
setupLocalGitRepo()
123+
execute("git checkout -b main")
124+
execute("git checkout -b test")
125+
}
126+
127+
def "test setup works"() {
128+
when:
129+
def result = gradleRunner("validateTransportVersionDefinitions", "validateTransportVersionReferences").build()
130+
then:
131+
result.task(":myserver:validateTransportVersionDefinitions").outcome == TaskOutcome.SUCCESS
132+
result.task(":myserver:validateTransportVersionReferences").outcome == TaskOutcome.SUCCESS
133+
result.task(":myplugin:validateTransportVersionReferences").outcome == TaskOutcome.SUCCESS
134+
}
135+
136+
def "definitions must be referenced"() {
137+
given:
138+
javaSource("myplugin", "org.elasticsearch.plugin", "MyPlugin",
139+
"import org.elasticsearch.TransportVersion;", """
140+
static final TransportVersion dne = TransportVersion.fromName("dne");
141+
""")
142+
when:
143+
def result = validateReferencesFails("myplugin")
144+
then:
145+
assertReferencesFailure(result, "myplugin", "TransportVersion.fromName(\"dne\") was used at " +
146+
"org.elasticsearch.plugin.MyPlugin line 6, but lacks a transport version definition.")
147+
}
148+
149+
def "references must be defined"() {
150+
given:
151+
definedTransportVersion("not_used", "1000000")
152+
when:
153+
def result = validateDefinitionsFails()
154+
then:
155+
assertDefinitionsFailure(result, "Transport version definition file " +
156+
"[myserver/src/main/resources/transport/defined/not_used.csv] is not referenced")
157+
}
158+
159+
def "names must be lowercase alphanum or underscore"() {
160+
given:
161+
definedAndUsedTransportVersion("${name}", "8100000", "TestNames")
162+
when:
163+
def result = validateDefinitionsFails()
164+
then:
165+
assertDefinitionsFailure(result, "Transport version definition file " +
166+
"[myserver/src/main/resources/transport/defined/${name}.csv] does not have a valid name, " +
167+
"must be lowercase alphanumeric and underscore")
168+
169+
where:
170+
name << ["CapitalTV", "spaces tv", "trailing_spaces_tv ", "hyphen-tv", "period.tv"]
171+
}
172+
173+
def "definitions contain at least one id"() {
174+
given:
175+
definedAndUsedTransportVersion("empty", "")
176+
when:
177+
def result = validateDefinitionsFails()
178+
then:
179+
assertDefinitionsFailure(result, "Transport version definition file " +
180+
"[myserver/src/main/resources/transport/defined/empty.csv] does not contain any ids")
181+
}
182+
183+
def "definitions have ids in descending order"() {
184+
given:
185+
definedAndUsedTransportVersion("out_of_order", "8100000,8200000")
186+
when:
187+
def result = validateDefinitionsFails()
188+
then:
189+
assertDefinitionsFailure(result, "Transport version definition file " +
190+
"[myserver/src/main/resources/transport/defined/out_of_order.csv] does not have ordered ids")
191+
}
192+
193+
def "definition ids are unique"() {
194+
given:
195+
definedAndUsedTransportVersion("duplicate", "8123000")
196+
when:
197+
def result = validateDefinitionsFails()
198+
then:
199+
assertDefinitionsFailure(result, "Transport version definition file " +
200+
"[myserver/src/main/resources/transport/defined/existing_92.csv] contains id 8123000 already defined in " +
201+
"[myserver/src/main/resources/transport/defined/duplicate.csv]")
202+
}
203+
204+
def "definitions have bwc ids with non-zero patch part"() {
205+
given:
206+
definedAndUsedTransportVersion("patched", "8200000,8100000")
207+
when:
208+
def result = validateDefinitionsFails()
209+
then:
210+
assertDefinitionsFailure(result, "Transport version definition file " +
211+
"[myserver/src/main/resources/transport/defined/patched.csv] contains bwc id [8100000] with a patch part of 0")
212+
}
213+
214+
def "definitions have primary ids which cannot change"() {
215+
given:
216+
definedTransportVersion("existing_92", "8500000")
217+
when:
218+
def result = validateDefinitionsFails()
219+
then:
220+
assertDefinitionsFailure(result, "Transport version definition file " +
221+
"[myserver/src/main/resources/transport/defined/existing_92.csv] has modified primary id from 8123000 to 8500000")
222+
}
223+
224+
def "cannot change committed ids to a branch"() {
225+
given:
226+
definedTransportVersion("existing_92", "8123000,8012002")
227+
when:
228+
def result = validateDefinitionsFails()
229+
then:
230+
assertDefinitionsFailure(result, "Transport version definition file " +
231+
"[myserver/src/main/resources/transport/defined/existing_92.csv] modifies existing patch id from 8012001 to 8012002")
232+
}
233+
234+
def "latest files must reference defined name"() {
235+
given:
236+
latestTransportVersion("9.2", "dne", "8123000")
237+
when:
238+
def result = validateDefinitionsFails()
239+
then:
240+
assertDefinitionsFailure(result, "Latest transport version file " +
241+
"[myserver/src/main/resources/transport/latest/9.2.csv] contains transport version name [dne] which is not defined")
242+
}
243+
244+
def "latest files id must exist in definition"() {
245+
given:
246+
latestTransportVersion("9.2", "existing_92", "8124000")
247+
when:
248+
def result = validateDefinitionsFails()
249+
then:
250+
assertDefinitionsFailure(result, "Latest transport version file " +
251+
"[myserver/src/main/resources/transport/latest/9.2.csv] has id 8124000 which is not in definition " +
252+
"[myserver/src/main/resources/transport/defined/existing_92.csv]")
253+
}
254+
255+
def "latest files have latest id within base"() {
256+
given:
257+
latestTransportVersion("9.0", "seemingly_latest", "8110001")
258+
definedAndUsedTransportVersion("original", "8110000")
259+
definedAndUsedTransportVersion("seemingly_latest", "8111000,8110001")
260+
definedAndUsedTransportVersion("actual_latest", "8112000,8110002")
261+
when:
262+
def result = validateDefinitionsFails()
263+
then:
264+
assertDefinitionsFailure(result, "Latest transport version file " +
265+
"[myserver/src/main/resources/transport/latest/9.0.csv] has id 8110001 from [seemingly_latest] with base 8110000 " +
266+
"but another id 8110002 from [actual_latest] is later for that base")
267+
}
268+
269+
def "latest files cannot change base id"() {
270+
given:
271+
definedAndUsedTransportVersion("original", "8013000")
272+
definedAndUsedTransportVersion("patch", "8015000,8013001")
273+
latestTransportVersion("9.1", "patch", "8013001")
274+
when:
275+
def result = validateDefinitionsFails()
276+
then:
277+
assertDefinitionsFailure(result, "Latest transport version file " +
278+
"[myserver/src/main/resources/transport/latest/9.1.csv] modifies base id from 8012000 to 8013000")
279+
}
280+
281+
def "ids must be dense"() {
282+
given:
283+
definedAndUsedTransportVersion("original", "8013000")
284+
definedAndUsedTransportVersion("patch1", "8015000,8013002")
285+
latestTransportVersion("9.0", "patch1", "8013002")
286+
when:
287+
def result = validateDefinitionsFails()
288+
then:
289+
assertDefinitionsFailure(result, "Transport version base id 8013000 is missing patch ids between 8013000 and 8013002")
290+
}
291+
292+
def "primary id must not be patch version"() {
293+
given:
294+
definedAndUsedTransportVersion("patch", "8015001")
295+
when:
296+
def result = validateDefinitionsFails()
297+
then:
298+
assertDefinitionsFailure(result, "Transport version definition file " +
299+
"[myserver/src/main/resources/transport/defined/patch.csv] has patch version 8015001 as primary id")
300+
}
301+
}

0 commit comments

Comments
 (0)