1717 * under the License.
1818 */
1919
20- import org.elasticsearch.gradle.test.RestIntegTestTask
2120import org.elasticsearch.gradle.Version
21+ import org.elasticsearch.gradle.testclusters.RestTestRunnerTask
2222
23+ apply plugin : ' elasticsearch.testclusters'
2324apply plugin : ' elasticsearch.standalone-test'
2425
2526// This is a top level task which we will add dependencies to below.
@@ -29,117 +30,105 @@ task bwcTest {
2930 group = ' verification'
3031}
3132
32- for (Version version : bwcVersions. wireCompatible) {
33+ configurations {
34+ restSpec
35+ }
36+
37+ dependencies {
38+ restSpec project(' :rest-api-spec' )
39+ }
40+
41+ processTestResources {
42+ from ({ zipTree(configurations. restSpec. singleFile) }) {
43+ include ' rest-api-spec/api/**'
44+ }
45+ dependsOn configurations. restSpec
46+ }
47+
48+ for (Version bwcVersion : bwcVersions. wireCompatible) {
3349 /*
3450 * The goal here is to:
3551 * <ul>
3652 * <li>start three nodes on the old version
3753 * <li>run tests with systemProperty 'tests.rest.suite', 'old_cluster'
38- * <li>shut down one node
39- * <li>start a node with the new version
54+ * <li>upgrade one node
4055 * <li>run tests with systemProperty 'tests.rest.suite', 'mixed_cluster'
41- * <li>shut down one node on the old version
42- * <li>start a node with the new version
56+ * <li>upgrade one more node
4357 * <li>run tests with systemProperty 'tests.rest.suite', 'mixed_cluster' again
44- * <li>shut down the last node with the old version
45- * <li>start a node with the new version
58+ * <li>updgrade the last node
4659 * <li>run tests with systemProperty 'tests.rest.suite', 'upgraded_cluster'
47- * <li>shut down the entire cluster
4860 * </ul>
49- *
50- * Be careful: gradle dry run spits out tasks in the wrong order but,
51- * strangely, running the tasks works properly.
5261 */
53- String baseName = " v${ version } "
62+ String baseName = " v${ bwcVersion } "
5463
55- Task oldClusterTest = tasks. create(name : " ${ baseName} #oldClusterTest" , type : RestIntegTestTask ) {
56- mustRunAfter(precommit)
57- }
64+ testClusters {
65+ " ${ baseName} " {
66+ versions = [ bwcVersion. toString(), project. version ]
67+ numberOfNodes = 3
5868
59- configure(extensions. findByName(" ${ baseName} #oldClusterTestCluster" )) {
60- bwcVersion = version
61- numBwcNodes = 3
62- numNodes = 3
63- clusterName = ' rolling-upgrade'
64- setting ' repositories.url.allowed_urls' , ' http://snapshot.test*'
65- if (version. onOrAfter(' 5.3.0' )) {
69+ setting ' repositories.url.allowed_urls' , ' http://snapshot.test*'
70+ setting ' path.repo' , " ${ buildDir} /cluster/shared/repo/${ baseName} "
6671 setting ' http.content_type.required' , ' true'
72+ javaHome = project. file(project. ext. runtimeJavaHome)
6773 }
6874 }
6975
70- Task oldClusterTestRunner = tasks. getByName(" ${ baseName} #oldClusterTestRunner" )
71- oldClusterTestRunner. configure {
76+ tasks. register(" ${ baseName} #oldClusterTest" , RestTestRunnerTask ) {
77+ dependsOn processTestResources
78+ useCluster testClusters. " ${ baseName} "
79+ mustRunAfter(precommit)
80+ doFirst {
81+ project. delete(" ${ buildDir} /cluster/shared/repo/${ baseName} " )
82+ }
7283 systemProperty ' tests.rest.suite' , ' old_cluster'
73- systemProperty ' tests.upgrade_from_version' , version. toString(). replace(' -SNAPSHOT' , ' ' )
84+ nonInputProperties. systemProperty(' tests.rest.cluster' , " ${ -> testClusters."${baseName}".allHttpSocketURI.join(",") } " )
85+ nonInputProperties. systemProperty(' tests.clustername' , " ${ -> testClusters."${baseName}".getName() } " )
7486 }
7587
76- Closure configureUpgradeCluster = {String name , Task lastRunner , int stopNode , Closure getOtherUnicastHostAddresses ->
77- configure(extensions. findByName(" ${ baseName} #${ name} " )) {
78- dependsOn lastRunner, " ${ baseName} #oldClusterTestCluster#node${ stopNode} .stop"
79- clusterName = ' rolling-upgrade'
80- otherUnicastHostAddresses = { getOtherUnicastHostAddresses() }
81- autoSetInitialMasterNodes = false
82- /* Override the data directory so the new node always gets the node we
83- * just stopped's data directory. */
84- dataDir = { nodeNumber -> oldClusterTest. nodes[stopNode]. dataDir }
85- setting ' repositories.url.allowed_urls' , ' http://snapshot.test*'
86- setting ' node.name' , " upgraded-node-${ stopNode} "
88+ tasks. register(" ${ baseName} #oneThirdUpgradedTest" , RestTestRunnerTask ) {
89+ dependsOn " ${ baseName} #oldClusterTest"
90+ useCluster testClusters. " ${ baseName} "
91+ doFirst {
92+ testClusters. " ${ baseName} " . nextNodeToNextVersion()
8793 }
88- }
89-
90- Task oneThirdUpgradedTest = tasks. create(name : " ${ baseName} #oneThirdUpgradedTest" , type : RestIntegTestTask )
91-
92- configureUpgradeCluster(" oneThirdUpgradedTestCluster" , oldClusterTestRunner, 0 ,
93- // Use all running nodes as seed nodes so there is no race between pinging and the tests
94- { [oldClusterTest. nodes. get(1 ). transportUri(), oldClusterTest. nodes. get(2 ). transportUri()] })
95-
96- Task oneThirdUpgradedTestRunner = tasks. getByName(" ${ baseName} #oneThirdUpgradedTestRunner" )
97- oneThirdUpgradedTestRunner. configure {
9894 systemProperty ' tests.rest.suite' , ' mixed_cluster'
9995 systemProperty ' tests.upgrade_from_version' , version. toString()
10096 systemProperty ' tests.first_round' , ' true'
101- finalizedBy " ${ baseName} #oldClusterTestCluster#node1.stop"
97+ nonInputProperties. systemProperty(' tests.rest.cluster' , " ${ -> testClusters."${baseName}".allHttpSocketURI.join(",") } " )
98+ nonInputProperties. systemProperty(' tests.clustername' , " ${ -> testClusters."${baseName}".getName() } " )
10299 }
103100
104- Task twoThirdsUpgradedTest = tasks. create(name : " ${ baseName} #twoThirdsUpgradedTest" , type : RestIntegTestTask )
105-
106- configureUpgradeCluster(" twoThirdsUpgradedTestCluster" , oneThirdUpgradedTestRunner, 1 ,
107- // Use all running nodes as seed nodes so there is no race between pinging and the tests
108- { [oldClusterTest. nodes. get(2 ). transportUri(), oneThirdUpgradedTest. nodes. get(0 ). transportUri()] })
109-
110- Task twoThirdsUpgradedTestRunner = tasks. getByName(" ${ baseName} #twoThirdsUpgradedTestRunner" )
111- twoThirdsUpgradedTestRunner. configure {
101+ tasks. register(" ${ baseName} #twoThirdsUpgradedTest" , RestTestRunnerTask ) {
102+ dependsOn " ${ baseName} #oneThirdUpgradedTest"
103+ useCluster testClusters. " ${ baseName} "
104+ doFirst {
105+ testClusters. " ${ baseName} " . nextNodeToNextVersion()
106+ }
112107 systemProperty ' tests.rest.suite' , ' mixed_cluster'
113108 systemProperty ' tests.upgrade_from_version' , version. toString()
114109 systemProperty ' tests.first_round' , ' false'
115- finalizedBy " ${ baseName} #oldClusterTestCluster#node2.stop"
110+ nonInputProperties. systemProperty(' tests.rest.cluster' , " ${ -> testClusters."${baseName}".allHttpSocketURI.join(",") } " )
111+ nonInputProperties. systemProperty(' tests.clustername' , " ${ -> testClusters."${baseName}".getName() } " )
116112 }
117113
118- Task upgradedClusterTest = tasks. create(name : " ${ baseName} #upgradedClusterTest" , type : RestIntegTestTask )
119-
120- configureUpgradeCluster(" upgradedClusterTestCluster" , twoThirdsUpgradedTestRunner, 2 ,
121- // Use all running nodes as seed nodes so there is no race between pinging and the tests
122- { [oneThirdUpgradedTest. nodes. get(0 ). transportUri(), twoThirdsUpgradedTest. nodes. get(0 ). transportUri()] })
123-
124- Task upgradedClusterTestRunner = tasks. getByName(" ${ baseName} #upgradedClusterTestRunner" )
125- upgradedClusterTestRunner. configure {
114+ tasks. register(" ${ baseName} #upgradedClusterTest" , RestTestRunnerTask ) {
115+ dependsOn " ${ baseName} #twoThirdsUpgradedTest"
116+ doFirst {
117+ testClusters. " ${ baseName} " . nextNodeToNextVersion()
118+ }
119+ useCluster testClusters. " ${ baseName} "
126120 systemProperty ' tests.rest.suite' , ' upgraded_cluster'
127- systemProperty ' tests.upgrade_from_version' , version. toString()
128- /*
129- * Force stopping all the upgraded nodes after the test runner
130- * so they are alive during the test.
131- */
132- finalizedBy " ${ baseName} #oneThirdUpgradedTestCluster#stop"
133- finalizedBy " ${ baseName} #twoThirdsUpgradedTestCluster#stop"
134- }
135121
136- Task versionBwcTest = tasks. create(name : " ${ baseName} #bwcTest" ) {
137- enabled = project. bwc_tests_enabled
138- dependsOn = [upgradedClusterTest]
122+ nonInputProperties. systemProperty(' tests.rest.cluster' , " ${ -> testClusters."${baseName}".allHttpSocketURI.join(",") } " )
123+ nonInputProperties. systemProperty(' tests.clustername' , " ${ -> testClusters."${baseName}".getName() } " )
139124 }
140125
141126 if (project. bwc_tests_enabled) {
142- bwcTest. dependsOn(versionBwcTest)
127+ bwcTest. dependsOn(
128+ tasks. register(" ${ baseName} #bwcTest" ) {
129+ dependsOn tasks. named(" ${ baseName} #upgradedClusterTest" )
130+ }
131+ )
143132 }
144133}
145134
@@ -155,3 +144,5 @@ task bwcTestSnapshots {
155144}
156145
157146check. dependsOn(bwcTestSnapshots)
147+
148+ test. enabled = false
0 commit comments