|
|
@@ -0,0 +1,198 @@
|
|
|
+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
|
|
|
+// we skip these tests on Windows so we do no need to worry about compatibility here
|
|
|
+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 {
|
|
|
+ url "http://download.jboss.org"
|
|
|
+ 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 {
|
|
|
+ onlyIf { !Os.isFamily(Os.FAMILY_WINDOWS) }
|
|
|
+ dependsOn 'integTestCluster#wait', deploy
|
|
|
+ doLast {
|
|
|
+ final File elasticsearchProperties =
|
|
|
+ file("${wildflyInstall}/standalone/configuration/elasticsearch.properties")
|
|
|
+ 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
|
|
|
+ // we skip these tests on Windows so we do no need to worry about compatibility here
|
|
|
+ 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(' ')
|
|
|
+}
|
|
|
+
|
|
|
+if (!Os.isFamily(Os.FAMILY_WINDOWS)) {
|
|
|
+ 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
|