https://github.com/elastic/elasticsearch
Raw File
Tip revision: 57e20f3c86c8af747761149eb7eefbf7caea4b9a authored by Jason Tedor on 22 September 2017, 15:57:06 UTC
Upgrade to Log4j 2.9.1
Tip revision: 57e20f3
build.gradle
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 not 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) && project.rootProject.ext.javaVersion == JavaVersion.VERSION_1_8 }
    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 not 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) && project.rootProject.ext.javaVersion == JavaVersion.VERSION_1_8) {
    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
back to top