/* * 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
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * 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.
 */

plugins { id 'org.apache.beam.module' }
applyJavaNature(automaticModuleName: 'org.apache.beam.runners.fnexecution')

description = "Apache Beam :: Runners :: Java Fn Execution"

dependencies {
  compile library.java.vendored_guava_26_0_jre
  compile project(":runners:core-construction-java")
  provided project(":sdks:java:harness")
  compile project(path: ":model:pipeline", configuration: "shadow")
  compile project(path: ":model:fn-execution", configuration: "shadow")
  compile project(path: ":sdks:java:core", configuration: "shadow")
  compile project(":sdks:java:fn-execution")
  compile project(":runners:core-construction-java")
  compile project(path: ":vendor:sdks-java-extensions-protobuf", configuration: "shadow")
  compile library.java.vendored_grpc_1_21_0
  compile library.java.slf4j_api
  compile library.java.args4j
  testCompile project(":sdks:java:harness")
  testCompile project(":runners:core-construction-java")
  testCompile project(path: ":runners:core-java", configuration: "testRuntime")
  testCompile project(path: ":sdks:java:core", configuration: "shadowTest")
  testCompile library.java.junit
  testCompile library.java.hamcrest_core
  testCompile library.java.hamcrest_library
  testCompile library.java.mockito_core
  testRuntimeOnly library.java.slf4j_simple
}

test {
  useJUnit {
    // Exclude tests that need Docker.
    excludeCategories "org.apache.beam.runners.fnexecution.environment.testing.NeedsDocker"
  }
}

task testDocker(type: Test) {
  group = "Verification"
  description = "Runs Docker tests"
  useJUnit {
    includeCategories "org.apache.beam.runners.fnexecution.environment.testing.NeedsDocker"
  }
}
