# 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.

source_set("ethertap") {
  sources = [
    "ethernet_client.cc",
    "ethernet_client.h",
    "ethertap_client.cc",
    "ethertap_client.h",
  ]

  deps = [
    "//src/lib/fxl",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/fzl",
    "//zircon/public/lib/zx",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.hardware.ethernet",
    "//sdk/fidl/fuchsia.hardware.ethertap",
  ]
}

source_set("network_service") {
  testonly = true
  sources = [
    "endpoint.cc",
    "endpoint.h",
    "endpoint_manager.cc",
    "endpoint_manager.h",
    "fake_endpoint.cc",
    "fake_endpoint.h",
    "interceptors/interceptor.h",
    "interceptors/latency.h",
    "interceptors/packet_loss.h",
    "interceptors/reorder.h",
    "network.cc",
    "network.h",
    "network_context.cc",
    "network_manager.cc",
    "network_manager.h",
  ]

  deps = [
    ":ethertap",
    "//src/lib/fxl",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fdio",
  ]

  public_deps = [
    "//src/connectivity/network/testing/netemul/lib/fidl:network",
    "//src/connectivity/network/tun/fidl",
  ]
}

source_set("netdump") {
  sources = [
    "netdump.cc",
    "netdump.h",
    "netdump_types.h",
  ]
  deps = [ "//src/lib/fxl" ]
  public_deps =
      [ "//src/connectivity/network/testing/netemul/lib/fidl:network" ]
}

executable("network_test_bin") {
  testonly = true

  output_name = "network_test"

  sources = [
    "ethertap_client_unittest.cc",
    "interceptors/interceptors_unittest.cc",
    "netdump_parser.cc",
    "netdump_parser.h",
    "netdump_unittest.cc",
    "network_service_unittest.cc",
  ]

  deps = [
    ":ethertap",
    ":netdump",
    ":network_service",
    "//sdk/lib/sys/cpp/testing:integration",
    "//src/connectivity/lib/network-device/cpp",
    "//src/connectivity/network/testing/netemul/lib/fidl:devmgr",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/predicates",
    "//zircon/public/lib/fzl",
  ]

  public_deps = [ "//sdk/fidl/fuchsia.hardware.ethertap" ]
}
