build.gradle 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. import org.elasticsearch.gradle.Version
  2. import org.elasticsearch.gradle.test.NodeInfo
  3. import org.elasticsearch.gradle.test.RestIntegTestTask
  4. import java.nio.charset.StandardCharsets
  5. apply plugin: 'elasticsearch.standalone-test'
  6. dependencies {
  7. // "org.elasticsearch.plugin:x-pack-core:${version}" doesn't work with idea because the testArtifacts are also here
  8. testCompile project(path: xpackModule('core'), configuration: 'default')
  9. testCompile project(path: xpackModule('core'), configuration: 'testArtifacts') // to be moved in a later commit
  10. }
  11. // This is a top level task which we will add dependencies to below.
  12. // It is a single task that can be used to backcompat tests against all versions.
  13. task bwcTest {
  14. description = 'Runs backwards compatibility tests.'
  15. group = 'verification'
  16. }
  17. String outputDir = "${buildDir}/generated-resources/${project.name}"
  18. for (Version version : bwcVersions.wireCompatible) {
  19. String baseName = "v${version}"
  20. Task oldClusterTest = tasks.create(name: "${baseName}#oldClusterTest", type: RestIntegTestTask) {
  21. mustRunAfter(precommit)
  22. }
  23. configure(extensions.findByName("${baseName}#oldClusterTestCluster")) {
  24. if (version.before('6.3.0')) {
  25. String depVersion = version;
  26. if (project.bwcVersions.unreleased.contains(version)) {
  27. depVersion += "-SNAPSHOT"
  28. }
  29. mavenPlugin 'x-pack', "org.elasticsearch.plugin:x-pack:${depVersion}"
  30. }
  31. bwcVersion = version
  32. numBwcNodes = 3
  33. numNodes = 3
  34. minimumMasterNodes = { 3 }
  35. clusterName = 'rolling-upgrade-basic'
  36. setting 'xpack.security.enabled', 'false'
  37. setting 'xpack.monitoring.enabled', 'false'
  38. setting 'xpack.ml.enabled', 'false'
  39. setting 'xpack.watcher.enabled', 'false'
  40. setting 'xpack.license.self_generated.type', 'basic'
  41. }
  42. Task oldClusterTestRunner = tasks.getByName("${baseName}#oldClusterTestRunner")
  43. oldClusterTestRunner.configure {
  44. systemProperty 'tests.rest.suite', 'old_cluster'
  45. }
  46. Closure configureUpgradeCluster = {String name, Task lastRunner, int stopNode, Closure unicastSeed ->
  47. configure(extensions.findByName("${baseName}#${name}")) {
  48. dependsOn lastRunner, "${baseName}#oldClusterTestCluster#node${stopNode}.stop"
  49. clusterName = 'rolling-upgrade-basic'
  50. unicastTransportUri = { seedNode, node, ant -> unicastSeed() }
  51. minimumMasterNodes = { 3 }
  52. /* Override the data directory so the new node always gets the node we
  53. * just stopped's data directory. */
  54. dataDir = { nodeNumber -> oldClusterTest.nodes[stopNode].dataDir }
  55. setting 'repositories.url.allowed_urls', 'http://snapshot.test*'
  56. setting 'xpack.security.enabled', 'false'
  57. setting 'xpack.monitoring.enabled', 'false'
  58. setting 'xpack.ml.enabled', 'false'
  59. setting 'xpack.watcher.enabled', 'false'
  60. setting 'xpack.license.self_generated.type', 'basic'
  61. setting 'node.name', "upgraded-node-${stopNode}"
  62. }
  63. }
  64. Task oneThirdUpgradedTest = tasks.create(name: "${baseName}#oneThirdUpgradedTest", type: RestIntegTestTask)
  65. configureUpgradeCluster("oneThirdUpgradedTestCluster", oldClusterTestRunner, 0,
  66. // Use all running nodes as seed nodes so there is no race between pinging and the tests
  67. { oldClusterTest.nodes.get(1).transportUri() + ',' + oldClusterTest.nodes.get(2).transportUri() })
  68. Task oneThirdUpgradedTestRunner = tasks.getByName("${baseName}#oneThirdUpgradedTestRunner")
  69. oneThirdUpgradedTestRunner.configure {
  70. systemProperty 'tests.rest.suite', 'mixed_cluster'
  71. systemProperty 'tests.first_round', 'true'
  72. finalizedBy "${baseName}#oldClusterTestCluster#node1.stop"
  73. }
  74. Task twoThirdsUpgradedTest = tasks.create(name: "${baseName}#twoThirdsUpgradedTest", type: RestIntegTestTask)
  75. configureUpgradeCluster("twoThirdsUpgradedTestCluster", oneThirdUpgradedTestRunner, 1,
  76. // Use all running nodes as seed nodes so there is no race between pinging and the tests
  77. { oldClusterTest.nodes.get(2).transportUri() + ',' + oneThirdUpgradedTest.nodes.get(0).transportUri() })
  78. Task twoThirdsUpgradedTestRunner = tasks.getByName("${baseName}#twoThirdsUpgradedTestRunner")
  79. twoThirdsUpgradedTestRunner.configure {
  80. systemProperty 'tests.rest.suite', 'mixed_cluster'
  81. systemProperty 'tests.first_round', 'false'
  82. finalizedBy "${baseName}#oldClusterTestCluster#node2.stop"
  83. }
  84. Task upgradedClusterTest = tasks.create(name: "${baseName}#upgradedClusterTest", type: RestIntegTestTask)
  85. configureUpgradeCluster("upgradedClusterTestCluster", twoThirdsUpgradedTestRunner, 2,
  86. // Use all running nodes as seed nodes so there is no race between pinging and the tests
  87. { oneThirdUpgradedTest.nodes.get(0).transportUri() + ',' + twoThirdsUpgradedTest.nodes.get(0).transportUri() })
  88. Task upgradedClusterTestRunner = tasks.getByName("${baseName}#upgradedClusterTestRunner")
  89. upgradedClusterTestRunner.configure {
  90. systemProperty 'tests.rest.suite', 'upgraded_cluster'
  91. /*
  92. * Force stopping all the upgraded nodes after the test runner
  93. * so they are alive during the test.
  94. */
  95. finalizedBy "${baseName}#oneThirdUpgradedTestCluster#stop"
  96. finalizedBy "${baseName}#twoThirdsUpgradedTestCluster#stop"
  97. }
  98. Task versionBwcTest = tasks.create(name: "${baseName}#bwcTest") {
  99. dependsOn = [upgradedClusterTest]
  100. }
  101. if (project.bwc_tests_enabled) {
  102. bwcTest.dependsOn(versionBwcTest)
  103. }
  104. }
  105. test.enabled = false // no unit tests for rolling upgrades, only the rest integration test
  106. // basic integ tests includes testing bwc against the most recent version
  107. task integTest {
  108. if (project.bwc_tests_enabled) {
  109. for (final def version : bwcVersions.unreleasedWireCompatible) {
  110. dependsOn "v${version}#bwcTest"
  111. }
  112. }
  113. }
  114. check.dependsOn(integTest)
  115. compileTestJava.options.compilerArgs << "-Xlint:-cast,-deprecation,-rawtypes,-try,-unchecked"
  116. // copy x-pack plugin info so it is on the classpath and security manager has the right permissions
  117. task copyXPackRestSpec(type: Copy) {
  118. dependsOn(project.configurations.restSpec, 'processTestResources')
  119. from project(xpackProject('plugin').path).sourceSets.test.resources
  120. include 'rest-api-spec/api/**'
  121. into project.sourceSets.test.output.resourcesDir
  122. }
  123. task copyXPackPluginProps(type: Copy) {
  124. dependsOn(copyXPackRestSpec)
  125. from project(xpackModule('core')).file('src/main/plugin-metadata')
  126. from project(xpackModule('core')).tasks.pluginProperties
  127. into outputDir
  128. }
  129. project.sourceSets.test.output.dir(outputDir, builtBy: copyXPackPluginProps)
  130. repositories {
  131. maven {
  132. url "https://artifacts.elastic.co/maven"
  133. }
  134. maven {
  135. url "https://snapshots.elastic.co/maven"
  136. }
  137. }