/*
 * Licensed to Elasticsearch under one or more contributor
 * license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Elasticsearch licenses this file to you under
 * the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import org.elasticsearch.gradle.test.RestIntegTestTask
import org.elasticsearch.gradle.Version

apply plugin: 'elasticsearch.standalone-test'

// This is a top level task which we will add dependencies to below.
// It is a single task that can be used to backcompat tests against all versions.
task bwcTest {
  description = 'Runs backwards compatibility tests.'
  group = 'verification'
}

for (Version version : bwcVersions.wireCompatible) {
  String baseName = "v${version}"

  Task mixedClusterTest = tasks.create(name: "${baseName}#mixedClusterTest", type: RestIntegTestTask) {
    mustRunAfter(precommit)
    includePackaged = true
  }

  /* This project runs the core REST tests against a 4 node cluster where two of
     the nodes has a different minor.  */
  Object extension = extensions.findByName("${baseName}#mixedClusterTestCluster")
  configure(extension) {
    numNodes = 4
    numBwcNodes = 2
    bwcVersion = version
  }

  Task versionBwcTest = tasks.create(name: "${baseName}#bwcTest") {
    dependsOn = [mixedClusterTest]
  }

  if (project.bwc_tests_enabled) {
    bwcTest.dependsOn(versionBwcTest)
  }

  tasks.getByName("${baseName}#mixedClusterTestRunner").configure {
    /* To support taking index snapshots, we have to set path.repo setting */
    systemProperty 'tests.path.repo', new File(buildDir, "cluster/shared/repo")
  }
}

test.enabled = false // no unit tests for rolling upgrades, only the rest integration test

// basic integ tests includes testing bwc against the most recent version
task bwcTestSnapshots {
  if (project.bwc_tests_enabled) {
    for (final def version : bwcVersions.unreleasedWireCompatible) {
      dependsOn "v${version}#bwcTest"
    }
  }
}

check.dependsOn(bwcTestSnapshots)