apply plugin: 'scala'
apply plugin: 'eclipse'
compileTestScala.options.encoding = 'UTF-8'

repositories {
    mavenCentral()
}

tasks.withType(Test) {
    testLogging {
        events "passed", "skipped", "failed"
        showStandardStreams = true
        exceptionFormat = 'full'
    }
    outputs.upToDateWhen { false } // force tests to run every time
}

task testLean(type: Test) {
    exclude '**/*Swift*'
    exclude '**/*Python*'
    exclude '**/*ThrottleTests*'
    exclude '**/MaxActionDurationTests*'
}

// Add all images needed for local testing here
test.dependsOn([
    ':core:nodejsAction:distDocker',
    ':core:nodejs6Action:distDocker',
    ':core:actionProxy:distDocker',
    ':core:pythonAction:distDocker',
    ':core:javaAction:distDocker',
    ':core:swift3Action:distDocker',
    ':sdk:docker:distDocker',
    ':tests:dat:blackbox:badaction:distDocker',
    ':tests:dat:blackbox:badproxy:distDocker'
])

dependencies {
    compile "org.scala-lang:scala-library:${gradle.scala.version}"
    compile 'org.apache.commons:commons-lang3:3.3.2'
    compile 'org.apache.httpcomponents:httpclient:4.5.2:tests'
    compile 'org.apache.httpcomponents:httpmime:4.3.6'
    compile 'junit:junit:4.11'
    compile 'com.jayway.restassured:rest-assured:2.6.0'
    compile 'org.scalatest:scalatest_2.11:3.0.1'
    compile 'io.spray:spray-testkit_2.11:1.3.3'
    compile 'com.google.code.gson:gson:2.3.1'

    compile project(':common:scala')
    compile project(':core:controller')
    compile project(':core:invoker')
}

tasks.withType(ScalaCompile) {
    scalaCompileOptions.additionalParameters = gradle.scala.compileFlags
}

def keystorePath = new File(buildDir, 'classes/test/keystore')
task deleteKeystore(type: Delete) {
    delete keystorePath
}
task createKeystore(dependsOn: deleteKeystore) {
    doLast {
        Properties props = new Properties()
        props.load(new FileInputStream(file('../whisk.properties')))
        def cmd = ['keytool', '-import', '-alias', 'Whisk', '-noprompt', '-trustcacerts', '-file', file(props['whisk.ssl.cert']), '-keystore', keystorePath, '-storepass', 'openwhisk']
        cmd.execute().waitForProcessOutput(System.out, System.err)
    }
}
compileTestScala.finalizedBy createKeystore
