apply plugin: 'application'

description = "gRPC: Integration Testing"
startScripts.enabled = false

// Add dependency on the protobuf plugin
buildscript {
    repositories {
        maven { // The google mirror is less flaky than mavenCentral()
            url "https://maven-central.storage-download.googleapis.com/repos/central/data/" }
    }
    dependencies { classpath libraries.protobuf_plugin }
}

dependencies {
    compile project(':grpc-alts'),
            project(':grpc-auth'),
            project(':grpc-core'),
            project(':grpc-netty'),
            project(':grpc-okhttp'),
            project(':grpc-protobuf'),
            project(':grpc-stub'),
            project(':grpc-testing'),
            libraries.junit,
            libraries.mockito,
            libraries.oauth_client
    compile (libraries.truth) {
        // Disable because it uses Java 8 bytecode, which breaks gae-java7
        exclude group: 'com.google.auto.value', module: 'auto-value-annotations'
        // Disable because it uses Java 8 bytecode, which breaks gae-java7
        exclude group: 'org.checkerframework', module: 'checker-qual'
    }
    compileOnly libraries.javax_annotation
    runtime libraries.opencensus_impl,
            libraries.netty_tcnative
    testCompile project(':grpc-context').sourceSets.test.output
}

configureProtoCompilation()

compileJava {
    // This isn't a library; it can use beta APIs
    it.options.compilerArgs += ["-Xep:BetaApi:OFF"]
}

test {
    // For the automated tests, use Jetty ALPN.
    jvmArgs "-javaagent:" + configurations.alpnagent.asPath
}

// For the generated scripts, use Netty tcnative (i.e. OpenSSL).
// Note that OkHttp currently only supports ALPN, so OpenSSL version >= 1.0.2 is required.

task test_client(type: CreateStartScripts) {
    mainClassName = "io.grpc.testing.integration.TestServiceClient"
    applicationName = "test-client"
    defaultJvmOpts = [
        "-javaagent:JAVAAGENT_APP_HOME" + configurations.alpnagent.singleFile.name
    ]
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + configurations.runtime
    dependencies { runtime configurations.alpnagent }
    doLast {
        unixScript.text = unixScript.text.replace('JAVAAGENT_APP_HOME', '\$APP_HOME/lib/')
        windowsScript.text = windowsScript.text.replace('JAVAAGENT_APP_HOME', '%APP_HOME%\\lib\\')
    }
}

task test_server(type: CreateStartScripts) {
    mainClassName = "io.grpc.testing.integration.TestServiceServer"
    applicationName = "test-server"
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + configurations.runtime
}

task reconnect_test_client(type: CreateStartScripts) {
    mainClassName = "io.grpc.testing.integration.ReconnectTestClient"
    applicationName = "reconnect-test-client"
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + configurations.runtime
}

task stresstest_client(type: CreateStartScripts) {
    mainClassName = "io.grpc.testing.integration.StressTestClient"
    applicationName = "stresstest-client"
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + configurations.runtime
    defaultJvmOpts = [
        "-verbose:gc",
        "-XX:+PrintFlagsFinal"
    ]
}

task http2_client(type: CreateStartScripts) {
    mainClassName = "io.grpc.testing.integration.Http2Client"
    applicationName = "http2-client"
    outputDir = new File(project.buildDir, 'tmp')
    classpath = jar.outputs.files + configurations.runtime
}

applicationDistribution.into("bin") {
    from(test_client)
    from(test_server)
    from(reconnect_test_client)
    from(stresstest_client)
    from(http2_client)
    fileMode = 0755
}
