# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/rust/rustc_library.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

executable("netstack_integration_test") {
  testonly = true

  sources = [
    "netstack_filter_test.cc",
    "netstack_no_network_test.cc",
  ]

  deps = [
    "//garnet/lib/inet",
    "//sdk/fidl/fuchsia.net.filter",
    "//sdk/fidl/fuchsia.netstack",
    "//sdk/lib/sys/cpp/testing:integration",
    "//src/connectivity/network/testing/netemul/lib/network:ethertap",
    "//third_party/googletest:gtest_main",
    "//zircon/public/lib/zx",
  ]
}

rustc_library("netstack_fidl_integration") {
  testonly = true
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-component",
    "//garnet/public/rust/fuchsia-zircon",
    "//sdk/fidl/fuchsia.netstack:fuchsia.netstack-rustc",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//src/connectivity/network/testing/netemul/lib/fidl:environment-rustc",
    "//src/connectivity/network/testing/netemul/lib/fidl:network-rustc",
    "//src/connectivity/network/testing/netemul/lib/fidl:sandbox-rustc",
    "//third_party/rust_crates:failure",
    "//third_party/rust_crates:futures-preview",
    "//zircon/public/fidl/fuchsia-hardware-ethernet:fuchsia-hardware-ethernet-rustc",
    "//zircon/public/fidl/fuchsia-net:fuchsia-net-rustc",
    "//zircon/public/fidl/fuchsia-net-stack:fuchsia-net-stack-rustc",
  ]
}

test("netstack_bsdsocket_c_api_test") {
  if (is_linux || is_fuchsia) {
    sources = [
      "bsdsocket_test.cc",
      "util.cc",
      "util.h",
    ]
  }

  deps = [
    "//third_party/googletest:gtest_main",
  ]
}

test("netstack_fuchsia_c_api_test") {
  sources = [
    "fdio_test.cc",
    "ioctl_test.cc",
    "util.cc",
    "util.h",
  ]

  deps = [
    "//garnet/public/lib/netstack/c",
    "//third_party/googletest:gtest_main",
    "//zircon/public/fidl/fuchsia-net:fuchsia-net_c",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/sync",
  ]
}

test_package("netstack_integration_tests") {
  deps = [
    ":netstack_fidl_integration",
    ":netstack_integration_test",
  ]

  tests = [
    {
      name = "netstack_integration_test"
      environments = [ qemu_env ]
    },
    {
      name = "netstack_fidl_integration_lib_test"
      environments = [ qemu_env ]
    },
  ]
}

test_package("netstack_c_api_tests") {
  deps = [
    ":netstack_bsdsocket_c_api_test",
    ":netstack_fuchsia_c_api_test",
  ]

  tests = [
    {
      name = "netstack_bsdsocket_c_api_test"
      environments = [ qemu_env ]
    },
    {
      name = "netstack_fuchsia_c_api_test"
      environments = [ qemu_env ]
    },
  ]
}
