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

repositories {
    mavenCentral()
    maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots/'
    }
}

sourceSets {
    test {
        scala {
            srcDirs = ['src/']
        }
    }
}

tasks.withType(Test) {
    systemProperty 'testthreads', System.getProperty('testthreads', '1')
    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:swiftAction:distDocker',
    ':core:swift3Action:distDocker',
    ':sdk:docker:distDocker',
    ':tests:dat:blackbox:badaction:distDocker',
    ':tests:dat:blackbox:badproxy:distDocker'
])

dependencies {
    testCompile "org.scala-lang:scala-library:${gradle.scala.version}"
    testCompile 'org.apache.commons:commons-exec:1.1'
    testCompile 'org.apache.commons:commons-lang3:3.3.2'
    testCompile 'commons-logging:commons-logging:1.1.3'
    testCompile 'org.codehaus.groovy:groovy:2.4.3'
    testCompile 'org.codehaus.groovy:groovy-json:2.4.3'
    testCompile 'org.codehaus.groovy:groovy-xml:2.4.3'
    testCompile 'com.google.guava:guava:18.0'
    testCompile 'org.hamcrest:hamcrest-core:1.3'
    testCompile 'org.apache.httpcomponents:httpmime:4.3.6'
    testCompile 'junit:junit:4.11'
    testCompile 'com.jayway.restassured:rest-assured:2.4.1'
    testCompile 'org.scalatest:scalatest_2.11:2.2.4'
    testCompile 'org.seleniumhq.selenium:selenium-java:2.45.0'
    testCompile 'io.spray:spray-testkit_2.11:1.3.3'
    testCompile 'com.google.code.tempus-fugit:tempus-fugit:1.2-SNAPSHOT'
    testCompile 'com.google.code.gson:gson:2.3.1'

    testCompile project(':common:scala')
    testCompile project(':core:controller')
    testCompile 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
