192 lines
6.1 KiB
Groovy
192 lines
6.1 KiB
Groovy
/*
|
|
* 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.vagrant.VagrantCommandTask
|
|
import org.elasticsearch.gradle.vagrant.BatsOverVagrantTask
|
|
import org.elasticsearch.gradle.FileContentsTask
|
|
import org.gradle.api.InvalidUserDataException
|
|
|
|
String testScripts = '*.bats'
|
|
String testCommand = "cd \$TESTROOT && sudo bats --tap \$BATS/$testScripts"
|
|
String smokeTestCommand = 'echo I work'
|
|
List<String> representativeBoxes = ['ubuntu-1404', 'centos-7']
|
|
List<String> boxes = representativeBoxes + ['ubuntu-1204', 'ubuntu-1504',
|
|
'debian-8', 'centos-6', 'oel-7', 'fedora-22', 'opensuse-13', 'sles-12']
|
|
|
|
/* The version of elasticsearch that we upgrade *from* as part of testing
|
|
* upgrades. */
|
|
String upgradeFromVersion = '2.0.0'
|
|
|
|
configurations {
|
|
test
|
|
}
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
}
|
|
|
|
dependencies {
|
|
test project(path: ':distribution:tar', configuration: 'archives')
|
|
test project(path: ':distribution:rpm', configuration: 'archives')
|
|
test project(path: ':distribution:deb', configuration: 'archives')
|
|
|
|
// Collect all the plugins
|
|
for (Project subproj : project.rootProject.subprojects) {
|
|
if (subproj.path.startsWith(':plugins:')) {
|
|
test project("${subproj.path}")
|
|
}
|
|
}
|
|
|
|
// The version of elasticsearch that we upgrade *from*
|
|
test "org.elasticsearch.distribution.deb:elasticsearch:$upgradeFromVersion@deb"
|
|
test "org.elasticsearch.distribution.rpm:elasticsearch:$upgradeFromVersion@rpm"
|
|
}
|
|
|
|
task checkPackages {
|
|
group 'Verification'
|
|
description 'Check the packages against a representative sample of the ' +
|
|
'linux distributions we have in our Vagrantfile'
|
|
}
|
|
|
|
task checkPackagesAllDistros {
|
|
group 'Verification'
|
|
description 'Check the packages against all the linux distributions we ' +
|
|
'have in our Vagrantfile'
|
|
}
|
|
|
|
task clean(type: Delete) {
|
|
group 'Build'
|
|
delete buildDir
|
|
}
|
|
|
|
File testRoot = new File("$buildDir/testroot")
|
|
task createTestRoot {
|
|
outputs.dir testRoot
|
|
doLast {
|
|
testRoot.mkdirs()
|
|
}
|
|
}
|
|
|
|
task createVersionFile(type: FileContentsTask) {
|
|
dependsOn createTestRoot
|
|
file "${testRoot}/version"
|
|
contents = version
|
|
}
|
|
|
|
task createUpgradeFromFile(type: FileContentsTask) {
|
|
dependsOn createTestRoot
|
|
file "${testRoot}/upgrade_from_version"
|
|
contents = upgradeFromVersion
|
|
}
|
|
|
|
task prepareTestRoot(type: Copy) {
|
|
description 'Dump bats test dependencies into the $TESTROOT'
|
|
into testRoot
|
|
from configurations.test
|
|
|
|
dependsOn createVersionFile, createUpgradeFromFile
|
|
}
|
|
|
|
task checkVagrantVersion(type: Exec) {
|
|
group 'Package Verification'
|
|
description 'Check that the version of vagrant is ok'
|
|
commandLine 'vagrant', '--version'
|
|
standardOutput = new ByteArrayOutputStream()
|
|
doLast {
|
|
String version = standardOutput.toString().trim()
|
|
if ((version ==~ /Vagrant 1\.[789]\..+/) == false) {
|
|
throw new InvalidUserDataException(
|
|
"Illegal version of vagrant [${version}]. Need [Vagrant 1.7+]")
|
|
}
|
|
}
|
|
}
|
|
|
|
task vagrantSmokeTest {
|
|
group 'Vagrant'
|
|
description 'Smoke test some representative distros from the Vagrantfile'
|
|
}
|
|
|
|
task vagrantSmokeTestAllDistros {
|
|
group 'Vagrant'
|
|
description 'Smoke test all distros from the Vagrantfile'
|
|
}
|
|
|
|
// Each box gets it own set of tasks
|
|
boxes.each { box ->
|
|
String boxTask = taskifyBoxName box
|
|
task "vagrantUp${boxTask}"(type: VagrantCommandTask) {
|
|
group 'Vagrant'
|
|
description "Startup a vagrant VM running ${box}"
|
|
boxName box
|
|
/* Its important that we try to reprovision the box even if it already
|
|
exists. That way updates to the vagrant configuration take automatically.
|
|
That isn't to say that the updates will always be compatible. Its ok to
|
|
just destroy the boxes if they get busted but that is a manual step
|
|
because its slow-ish. */
|
|
/* We lock the provider to virtualbox because the Vagrantfile specifies
|
|
lots of boxes that only work properly in virtualbox. Virtualbox is
|
|
vagrant's default but its possible to change that default and folks do.
|
|
But the boxes that we use are unlikely to work properly with other
|
|
virtualization providers. Thus the lock. */
|
|
commandLine 'up', box, '--provision', '--provider', 'virtualbox'
|
|
/* It'd be possible to check if the box is already up here and output
|
|
SKIPPED but that would require running vagrant status which is slow! */
|
|
dependsOn checkVagrantVersion
|
|
}
|
|
task "vagrantHalt${boxTask}"(type: VagrantCommandTask) {
|
|
group 'Vagrant'
|
|
description "Shutdown the vagrant VM running $box"
|
|
boxName box
|
|
commandLine 'halt', box
|
|
}
|
|
|
|
task "smokeTest${boxTask}"(type: Exec) {
|
|
group 'Vagrant'
|
|
description "Smoke test the ${box} VM"
|
|
dependsOn "vagrantUp${boxTask}"
|
|
finalizedBy "vagrantHalt${boxTask}"
|
|
commandLine 'vagrant', 'ssh', box, '--command',
|
|
"set -o pipefail && ${smokeTestCommand} | sed -ue \'s/^/ ${box}: /'"
|
|
vagrantSmokeTestAllDistros.dependsOn name
|
|
if (representativeBoxes.contains(box)) {
|
|
vagrantSmokeTest.dependsOn name
|
|
}
|
|
}
|
|
|
|
task "check${boxTask}"(type: BatsOverVagrantTask) {
|
|
group 'Package Verification'
|
|
description "Run packaging tests against ${box}"
|
|
dependsOn "vagrantUp${boxTask}"
|
|
finalizedBy "vagrantHalt${boxTask}"
|
|
boxName box
|
|
command testCommand
|
|
dependsOn prepareTestRoot
|
|
checkPackagesAllDistros.dependsOn name
|
|
if (representativeBoxes.contains(box)) {
|
|
checkPackages.dependsOn name
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Twists the box name into a sensible task name
|
|
String taskifyBoxName(box) {
|
|
box.capitalize().replace('-', '')
|
|
}
|