# 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/package.gni")
import("//src/lib/isolated_devmgr/devmgr_manifest.gni")

group("runner") {
  testonly = true
  deps = [
    ":bin",
    ":netemul_sandbox",
    ":sandbox_unittest",
    ":src",
    "helpers",
    "model",
    "runner",
    "test",
  ]
}

source_set("src") {
  testonly = true
  sources = [
    "format.cc",
    "format.h",
    "log_listener.cc",
    "log_listener.h",
    "log_listener_log_sink.cc",
    "log_listener_log_sink.h",
    "log_listener_ostream.cc",
    "log_listener_ostream.h",
    "managed_environment.cc",
    "managed_environment.h",
    "managed_launcher.cc",
    "managed_launcher.h",
    "managed_logger.cc",
    "managed_logger.h",
    "sandbox.cc",
    "sandbox.h",
    "sandbox_env.cc",
    "sandbox_env.h",
    "sandbox_service.cc",
    "sandbox_service.h",
    "virtual_data.cc",
    "virtual_data.h",
    "virtual_devices.cc",
    "virtual_devices.h",
  ]

  deps = [
    "model",
    "//garnet/lib/cmx:cmx",
    "//garnet/lib/process",
    "//garnet/public/lib/async_promise",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/json",
    "//garnet/public/lib/syslog/cpp",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:enclosing_environment",
    "//src/connectivity/network/testing/netemul/lib/fidl:devmgr",
    "//src/connectivity/network/testing/netemul/lib/fidl:environment",
    "//src/connectivity/network/testing/netemul/lib/fidl:network",
    "//src/connectivity/network/testing/netemul/lib/fidl:sandbox",
    "//src/connectivity/network/testing/netemul/lib/fidl:sync",
    "//src/connectivity/network/testing/netemul/lib/network:netdump",
    "//src/connectivity/network/testing/netemul/lib/sync:sync_service",
    "//src/lib/fxl",
    "//third_party/rapidjson",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/memfs-cpp",
    "//zircon/public/lib/zx",
  ]

  public_deps = [
    "//sdk/lib/sys/cpp",
    "//src/connectivity/network/testing/netemul/lib/network:network_service",
    "//zircon/public/fidl/fuchsia-io",
    "//zircon/public/fidl/fuchsia-logger:fuchsia-logger",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fs",
  ]
}

executable("bin") {
  testonly = true
  output_name = "netemul_sandbox"
  sources = [
    "main.cc",
  ]

  deps = [
    ":src",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//third_party/rapidjson",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/memfs-cpp",
  ]
}

executable("sandbox_unittest") {
  testonly = true
  sources = [
    "log_listener_ostream_unittest.cc",
    "log_listener_test_helpers.cc",
    "log_listener_test_helpers.h",
    "logger_unittest.cc",
    "managed_logger_unittest.cc",
    "sandbox_unittest.cc",
  ]

  deps = [
    ":src",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/gtest",
    "//garnet/public/lib/json",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp/testing:integration",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/pkg_url",
    "//third_party/rapidjson",
    "//third_party/rapidjson",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fdio",
    "//zircon/public/lib/memfs-cpp",
  ]
}

package("netemul_sandbox") {
  testonly = true

  deps = [
    ":bin",
    "helpers",
  ]

  binaries = [
    {
      name = "netemul_sandbox"
    },
    {
      name = "netstack_cfg"
    },
    {
      name = "mock_device_settings"
    },
    {
      name = "guest_netstack_intermediary"
    },
  ]

  meta = [
    {
      path = rebase_path("meta/netemul_sandbox.cmx")
      dest = "netemul_sandbox.cmx"
    },
    {
      path = rebase_path("helpers/meta/helper_netstack_cfg.cmx")
      dest = "helper_netstack_cfg.cmx"
    },
    {
      path = rebase_path("helpers/meta/mock_device_settings.cmx")
      dest = "mock_device_settings.cmx"
    },
    {
      path = rebase_path("helpers/meta/helper_netstack_intermediary.cmx")
      dest = "helper_netstack_intermediary.cmx"
    },
  ]
}

devmgr_manifest("devmgr_manifest") {
}

package("netemul_devmgr") {
  deprecated_shell = "//build"

  testonly = true

  deps = [
    ":devmgr_manifest",
    "//src/lib/isolated_devmgr",
  ]

  extra = [ "$target_gen_dir/devmgr.manifest" ]

  binaries = [
    {
      name = "isolated_devmgr"
    },
  ]

  meta = [
    {
      path = rebase_path("meta/netemul_devmgr.cmx")
      dest = "netemul_devmgr.cmx"
    },
  ]
}
