# Copyright 2019 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_test.gni")
import("//src/sys/build/components.gni")

group("tests") {
  testonly = true
  deps = [
    ":netdump-integration-tests",
    "//src/connectivity/network/testing/netemul/runner:netemul-sandbox",
  ]
}

rustc_test("test_bin") {
  name = "netdump_integration_test"
  deps = [
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//src/connectivity/lib/net-declare",
    "//src/connectivity/lib/net-types",
    "//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",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/network/ethernet",
    "//src/lib/network/packet",
    "//src/lib/network/packet-formats",
    "//src/lib/storage/vfs/rust:vfs",
    "//src/lib/zerocopy",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:futures",
  ]

  sources = [
    "src/lib.rs",
    "src/pcapng.rs",
  ]
}

fuchsia_component("netdump_integration_test") {
  testonly = true
  manifest = "meta/netdump-integration-test.cmx"
  deps = [ ":test_bin" ]
}

fuchsia_test_package("netdump-integration-tests") {
  test_components = [ ":netdump_integration_test" ]
  deps = [
    "../:component",
    "//src/connectivity/network/testing/netemul/runner:netemul-sandbox-component",
  ]
}
