# Copyright 2021 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/components.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/rust/rustc_test.gni")

rustc_binary("bin") {
  testonly = true
  with_unit_tests = true
  name = "netemul_sandbox"
  edition = "2021"
  deps = [
    "//sdk/fidl/fuchsia.component.test:fuchsia.component.test_rust",
    "//sdk/fidl/fuchsia.data:fuchsia.data_rust",
    "//sdk/fidl/fuchsia.io:fuchsia.io_rust",
    "//sdk/fidl/fuchsia.logger:fuchsia.logger_rust",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2_rust",
    "//sdk/fidl/fuchsia.tracing.provider:fuchsia.tracing.provider_rust",
    "//src/connectivity/network/testing/netemul/fidl:fuchsia.netemul_rust",
    "//src/connectivity/network/testing/netemul/network-context/fidl:network_rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-component-test",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/storage/lib/vfs/rust:vfs",
    "//src/sys/lib/cm_rust",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:thiserror",
    "//third_party/rust_crates:tracing",
  ]
  test_deps = [
    "//sdk/fidl/fuchsia.component:fuchsia.component_rust",
    "//sdk/fidl/fuchsia.device:fuchsia.device_rust",
    "//sdk/fidl/fuchsia.hardware.network:fuchsia.hardware.network_rust",
    "//src/connectivity/network/testing/netemul/test-support:fidl_rust",
    "//src/lib/diagnostics/data/rust",
    "//src/lib/diagnostics/hierarchy/rust",
    "//src/lib/diagnostics/reader/rust",
    "//src/lib/diagnostics/selectors",
    "//src/lib/diagnostics/testing/diagnostics-assertions/rust:diagnostics-assertions",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-fs",
    "//src/lib/testing/fixture",
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:test-case",
  ]
  sources = [ "src/main.rs" ]
  configs -= [ "//build/config/rust/lints:allow_unused_results" ]
}

fuchsia_component("netemul-sandbox") {
  testonly = true
  manifest = "meta/netemul-sandbox.cml"
  deps = [
    ":bin",
    "//src/connectivity/network/testing/netemul/network-context",
    "//src/connectivity/network/tun/network-tun:component",
  ]
}

group("tests") {
  testonly = true
  deps = [ ":netemul-tests" ]
}

fuchsia_test_component("netemul-sandbox-tests") {
  manifest = "meta/netemul-sandbox-tests.cml"
  deps = [
    ":bin_test",
    "//src/connectivity/network/testing/netemul/network-context",
    "//src/connectivity/network/testing/netemul/test-support:counter",
    "//src/connectivity/network/testing/netemul/test-support:counter-without-program",
    "//src/connectivity/network/testing/netemul/test-support:devfs-subdir-user",
    "//src/connectivity/network/tun/network-tun:component",
  ]
}

fuchsia_test_package("netemul-tests") {
  test_components = [ ":netemul-sandbox-tests" ]
  test_specs = {
    # TODO(https://fxbug.dev/42162845): run tests in parallel when this doesn't
    # cause embedded archivist to crash.
    parallel = 1
  }
}
