build.gradle 6.3 KB

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