2017-04-21 12:51:14 -04:00
|
|
|
import org.elasticsearch.gradle.LoggedExec
|
|
|
|
import org.elasticsearch.gradle.VersionProperties
|
|
|
|
import org.apache.tools.ant.taskdefs.condition.Os
|
|
|
|
|
|
|
|
import java.nio.charset.StandardCharsets
|
|
|
|
import java.nio.file.Files
|
|
|
|
import java.util.stream.Stream
|
|
|
|
|
|
|
|
/*
|
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
|
|
|
apply plugin: 'war'
|
|
|
|
apply plugin: 'elasticsearch.build'
|
|
|
|
apply plugin: 'elasticsearch.rest-test'
|
|
|
|
|
|
|
|
final String wildflyVersion = '10.0.0.Final'
|
|
|
|
final String wildflyDir = "${buildDir}/wildfly"
|
|
|
|
final String wildflyInstall = "${buildDir}/wildfly/wildfly-${wildflyVersion}"
|
|
|
|
// TODO: use ephemeral ports
|
|
|
|
final int portOffset = 30000
|
|
|
|
final int managementPort = 9990 + portOffset
|
2017-04-22 10:41:57 -04:00
|
|
|
// we skip these tests on Windows so we do not need to worry about compatibility here
|
2017-04-21 12:51:14 -04:00
|
|
|
final String stopWildflyCommand = "${wildflyInstall}/bin/jboss-cli.sh --controller=localhost:${managementPort} --connect command=:shutdown"
|
|
|
|
|
|
|
|
repositories {
|
|
|
|
mavenCentral()
|
|
|
|
// the Wildfly distribution is not available via a repository, so we fake an Ivy repository on top of the download site
|
|
|
|
ivy {
|
2017-04-21 16:46:35 -04:00
|
|
|
url "http://download.elastic.co"
|
2017-04-21 12:51:14 -04:00
|
|
|
layout 'pattern', {
|
|
|
|
artifact 'wildfly/[revision]/[module]-[revision].[ext]'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
configurations {
|
|
|
|
wildfly
|
|
|
|
}
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
providedCompile 'javax.enterprise:cdi-api:1.2'
|
|
|
|
providedCompile 'org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:1.0.0.Final'
|
|
|
|
providedCompile 'org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.0_spec:1.0.0.Final'
|
|
|
|
compile ('org.jboss.resteasy:resteasy-jackson2-provider:3.0.19.Final') {
|
|
|
|
exclude module: 'jackson-annotations'
|
|
|
|
exclude module: 'jackson-core'
|
|
|
|
exclude module: 'jackson-databind'
|
|
|
|
exclude module: 'jackson-jaxrs-json-provider'
|
|
|
|
}
|
|
|
|
compile "com.fasterxml.jackson.core:jackson-annotations:${versions.jackson}"
|
|
|
|
compile "com.fasterxml.jackson.core:jackson-core:${versions.jackson}"
|
|
|
|
compile "com.fasterxml.jackson.core:jackson-databind:${versions.jackson}"
|
|
|
|
compile "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:${versions.jackson}"
|
|
|
|
compile "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:${versions.jackson}"
|
|
|
|
compile "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:${versions.jackson}"
|
|
|
|
compile "org.apache.logging.log4j:log4j-api:${versions.log4j}"
|
|
|
|
compile "org.apache.logging.log4j:log4j-core:${versions.log4j}"
|
|
|
|
compile project(path: ':client:transport', configuration: 'runtime')
|
|
|
|
wildfly "org.jboss:wildfly:${wildflyVersion}@zip"
|
|
|
|
testCompile "org.elasticsearch.test:framework:${VersionProperties.elasticsearch}"
|
|
|
|
}
|
|
|
|
|
|
|
|
task unzipWildfly(type: Sync) {
|
|
|
|
into wildflyDir
|
|
|
|
from { zipTree(configurations.wildfly.singleFile) }
|
|
|
|
}
|
|
|
|
|
|
|
|
task deploy(type: Copy) {
|
|
|
|
dependsOn unzipWildfly, war
|
|
|
|
from war
|
|
|
|
into "${wildflyInstall}/standalone/deployments"
|
|
|
|
}
|
|
|
|
|
|
|
|
task writeElasticsearchProperties {
|
2017-04-22 10:41:57 -04:00
|
|
|
onlyIf { !Os.isFamily(Os.FAMILY_WINDOWS) && project.rootProject.ext.javaVersion == JavaVersion.VERSION_1_8 }
|
2017-04-21 12:51:14 -04:00
|
|
|
dependsOn 'integTestCluster#wait', deploy
|
|
|
|
doLast {
|
2017-04-22 10:41:57 -04:00
|
|
|
final File elasticsearchProperties = file("${wildflyInstall}/standalone/configuration/elasticsearch.properties")
|
2017-04-21 12:51:14 -04:00
|
|
|
elasticsearchProperties.write(
|
|
|
|
[
|
|
|
|
"transport.uri=${-> integTest.getNodes().get(0).transportUri()}",
|
|
|
|
"cluster.name=${-> integTest.getNodes().get(0).clusterName}"
|
|
|
|
].join("\n"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// the default configuration ships with IPv6 disabled but our cluster could be bound to IPv6 if the host supports it
|
|
|
|
task enableIPv6 {
|
|
|
|
dependsOn unzipWildfly
|
|
|
|
doLast {
|
|
|
|
final File standaloneConf = file("${wildflyInstall}/bin/standalone.conf")
|
|
|
|
final List<String> lines =
|
|
|
|
Files.readAllLines(standaloneConf.toPath())
|
|
|
|
.collect { line -> line.replace("-Djava.net.preferIPv4Stack=true", "-Djava.net.preferIPv4Stack=false") }
|
|
|
|
standaloneConf.write(lines.join("\n"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
task startWildfly {
|
|
|
|
dependsOn enableIPv6, writeElasticsearchProperties
|
|
|
|
doFirst {
|
|
|
|
// we skip these tests on Windows so we do no need to worry about compatibility here
|
|
|
|
final File script = new File(project.buildDir, "wildfly/wildfly.killer.sh")
|
|
|
|
script.setText(
|
|
|
|
["function shutdown {",
|
|
|
|
" ${stopWildflyCommand}",
|
|
|
|
"}",
|
|
|
|
"trap shutdown EXIT",
|
|
|
|
// will wait indefinitely for input, but we never pass input, and the pipe is only closed when the build dies
|
|
|
|
"read line"].join('\n'), 'UTF-8')
|
|
|
|
final ProcessBuilder pb = new ProcessBuilder("bash", script.absolutePath)
|
|
|
|
pb.start()
|
|
|
|
}
|
|
|
|
doLast {
|
|
|
|
// we skip these tests on Windows so we do no need to worry about compatibility here
|
|
|
|
final ProcessBuilder pb =
|
|
|
|
new ProcessBuilder("${wildflyInstall}/bin/standalone.sh", "-Djboss.socket.binding.port-offset=${portOffset}")
|
|
|
|
final Process process = pb.start()
|
|
|
|
new BufferedReader(new InputStreamReader(process.getInputStream())).withReader { br ->
|
|
|
|
String line
|
|
|
|
while ((line = br.readLine()) != null) {
|
|
|
|
if (line.matches(".*WildFly Full \\d+\\.\\d+\\.\\d+\\.Final \\(WildFly Core \\d+\\.\\d+\\.\\d+\\.Final\\) started.*")) {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
task configureTransportClient(type: LoggedExec) {
|
|
|
|
dependsOn startWildfly
|
2017-04-22 10:41:57 -04:00
|
|
|
// we skip these tests on Windows so we do not need to worry about compatibility here
|
2017-04-21 12:51:14 -04:00
|
|
|
commandLine "${wildflyInstall}/bin/jboss-cli.sh",
|
|
|
|
"--controller=localhost:${managementPort}",
|
|
|
|
"--connect",
|
|
|
|
"--command=/system-property=elasticsearch.properties:add(value=\${jboss.server.config.dir}/elasticsearch.properties)"
|
|
|
|
}
|
|
|
|
|
|
|
|
task stopWildfly(type: LoggedExec) {
|
|
|
|
commandLine stopWildflyCommand.split(' ')
|
|
|
|
}
|
|
|
|
|
2017-04-22 10:41:57 -04:00
|
|
|
if (!Os.isFamily(Os.FAMILY_WINDOWS) && project.rootProject.ext.javaVersion == JavaVersion.VERSION_1_8) {
|
2017-04-21 12:51:14 -04:00
|
|
|
integTestRunner.dependsOn(configureTransportClient)
|
|
|
|
final TaskExecutionAdapter logDumpListener = new TaskExecutionAdapter() {
|
|
|
|
@Override
|
|
|
|
void afterExecute(final Task task, final TaskState state) {
|
|
|
|
if (state.failure != null) {
|
|
|
|
final File logFile = new File(wildflyInstall, "standalone/log/server.log")
|
|
|
|
println("\nWildfly server log (from ${logFile}):")
|
|
|
|
println('-----------------------------------------')
|
|
|
|
final Stream<String> stream = Files.lines(logFile.toPath(), StandardCharsets.UTF_8)
|
|
|
|
try {
|
|
|
|
for (String line : stream) {
|
|
|
|
println(line)
|
|
|
|
}
|
|
|
|
} finally {
|
|
|
|
stream.close()
|
|
|
|
}
|
|
|
|
println('=========================================')
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
integTestRunner.doFirst {
|
|
|
|
project.gradle.addListener(logDumpListener)
|
|
|
|
}
|
|
|
|
integTestRunner.doLast {
|
|
|
|
project.gradle.removeListener(logDumpListener)
|
|
|
|
}
|
|
|
|
integTestRunner.finalizedBy(stopWildfly)
|
|
|
|
} else {
|
|
|
|
integTest.enabled = false
|
|
|
|
}
|
|
|
|
|
|
|
|
check.dependsOn(integTest)
|
|
|
|
|
|
|
|
test.enabled = false
|
|
|
|
|
|
|
|
dependencyLicenses.enabled = false
|
|
|
|
|
|
|
|
thirdPartyAudit.enabled = false
|