# 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/config.gni")
import("//build/rust/rustc_binary.gni")
import("//src/sys/build/components.gni")

rustc_binary("bin") {
  name = "network_manager"
  edition = "2018"
  with_unit_tests = true

  deps = [
    "core:lib",
    "//garnet/lib/rust/io_util",
    "//sdk/fidl/fuchsia.hardware.ethernet:fuchsia.hardware.ethernet-rustc",
    "//sdk/fidl/fuchsia.net:fuchsia.net-rustc",
    "//sdk/fidl/fuchsia.net.name:fuchsia.net.name-rustc",
    "//sdk/fidl/fuchsia.net.stack:fuchsia.net.stack-rustc",
    "//sdk/fidl/fuchsia.netstack:fuchsia.netstack-rustc",
    "//sdk/fidl/fuchsia.overnet:fuchsia.overnet-rustc",
    "//sdk/fidl/fuchsia.router.config:fuchsia.router.config-rustc",
    "//src/connectivity/network/lib/dns_server_watcher",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/network/fidl_fuchsia_hardware_ethernet_ext",
    "//src/lib/storage/fuchsia-vfs-watcher",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:thiserror",
  ]

  sources = [
    "src/eventloop.rs",
    "src/fidl_worker.rs",
    "src/main.rs",
    "src/oir_worker.rs",
    "src/overnet_worker.rs",
  ]
}

resource("device-schema") {
  sources = [ "data/device_schema.json" ]
  outputs = [ "data/device_schema.json" ]
}

fuchsia_component("component") {
  component_name = "network-manager"
  manifest = "meta/network-manager.cmx"
  deps = [
    ":bin",
    ":device-schema",
  ]
}

fuchsia_component("component-netemul") {
  testonly = true
  component_name = "network-manager-netemul"
  manifest = "meta/network-manager-netemul.cmx"
  deps = [
    ":bin",
    ":device-schema",
  ]
}

fuchsia_package("network-manager") {
  deps = [ ":component" ]
}

config_data("config-default") {
  for_pkg = "network-manager"
  sources = [ "config/default.json" ]
  outputs = [ "factory_config.json" ]
}

config_data("config-no-ssh-over-wlan") {
  for_pkg = "network-manager"
  sources = [ "config/no_ssh_over_wlan.json" ]
  outputs = [ "factory_config.json" ]
}

config_data("config-toulouse") {
  for_pkg = "network-manager"
  sources = [ "config/toulouse.json" ]
  outputs = [ "factory_config.json" ]
}

fuchsia_component("bin-test") {
  component_name = "network-manager-bin-test"
  testonly = true
  manifest = "meta/network-manager-bin-test.cmx"
  deps = [ ":bin_test" ]
}

resource("valid-factory-configs") {
  testonly = true
  sources = [
    "config/no_ssh_over_wlan.json",
    "config/toulouse.json",
    "testdata/valid_empty.json",
    "testdata/valid_factory_config.json",
  ]
  outputs = [ "data/valid_factory_configs/{{source_file_part}}" ]
}

resource("default-valid-factory-configs") {
  testonly = true
  sources = [ "config/default.json" ]
  outputs = [ "data/valid_factory_configs/config.json" ]
}

resource("invalid-factory-configs") {
  testonly = true
  sources = [ "testdata/invalid_empty.json" ]
  outputs = [ "data/invalid_factory_configs/{{source_file_part}}" ]
}

fuchsia_component("core-lib-test") {
  component_name = "network-manager-core-lib-test"
  testonly = true
  manifest = "meta/network-manager-core-lib-test.cmx"
  deps = [
    ":default-valid-factory-configs",
    ":device-schema",
    ":invalid-factory-configs",
    ":valid-factory-configs",
    "core:lib_test",
  ]
}

fuchsia_component("core-interface-lib-test") {
  component_name = "network-manager-core-interface-lib-test"
  testonly = true
  manifest = "meta/network-manager-core-interface-lib-test.cmx"
  deps = [ "core/interface:lib_test" ]
}

fuchsia_test_package("network-manager-tests") {
  test_components = [
    ":bin-test",
    ":core-lib-test",
    ":core-interface-lib-test",
  ]
}

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