/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF 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
 * <p/>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p/>
 * 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.
 */
subprojects {
  /**
   *  Utility function for tests to use to confirm EVN Variables.
   */
  ext.checkEnv = { env_vars ->
    env_vars.each() {
      def value = System.getenv("${it}")
      if (value == null || value == "null")
        throw new GradleException("undeclared env variable: ${it}")
    }
  }

  ext.groovyVersion = '1.8.0'
  ext.hadoopVersion = '2.6.0'
  // itest needs be greater than or equal to = 1.0.0
  ext.itestVersion = '1.0.0' // Might need to be able to read an input for alternate version?
  ext.BIGTOP_HOME   = rootDir

  dependencies {
    compile group: 'org.apache.bigtop.itest', name: 'itest-common', version: itestVersion, transitive: 'true'
    //needed to avoid groovy not on classpath error.
    testCompile group: 'org.codehaus.groovy', name: 'groovy', version: groovyVersion
    testRuntime project(':bigtop-tests:smoke-tests:logger-test-config')
  }

  test.doFirst {
    // TestHadoopExamples and other tests rely on BIGTOP_HOME environment
    // variable to find some resources. Let's set it up, using ext.BIGTOP_HOME
    environment ("BIGTOP_HOME", BIGTOP_HOME)
  }

  test << {
    println("Now testing...");
    //todo, add back in 'basic' after BIGTOP-1392 .
    testLogging {
      events "passed", "skipped", "failed"
    }
  }

  // Let's make sure all system Properties are passed into the forked test JVM
  tasks.withType(Test) {
    systemProperties = System.getProperties()
  }
  test.dependsOn compileGroovy
  compileGroovy.dependsOn clean
}
