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 '**/*Java*'
    exclude '**/*ThrottleTests*'
    exclude '**/MaxActionDurationTests*'
    exclude '**/*ApiGwTests*'
}

// Add all images needed for local testing here
test.dependsOn([
    ':core:nodejs6Action:distDocker',
    ':core:actionProxy:distDocker',
    ':core:pythonAction:distDocker',
    ':core:python2Action: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.typesafe.akka:akka-testkit_2.11:2.4.16'
    compile 'com.google.code.gson:gson:2.3.1'
    compile 'org.scalamock:scalamock-scalatest-support_2.11:3.4.2'

    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
