# Copyright 2023 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_library.gni")
import(
    "//src/lib/testing/expectation/fuchsia_test_with_expectations_package.gni")

rustc_library("netlink") {
  version = "0.0.1"
  edition = "2024"
  with_unit_tests = true

  deps = [
    "//sdk/fidl/fuchsia.net:fuchsia.net_rust",
    "//sdk/fidl/fuchsia.net.interfaces:fuchsia.net.interfaces_rust",
    "//sdk/fidl/fuchsia.net.interfaces.admin:fuchsia.net.interfaces.admin_rust",
    "//sdk/fidl/fuchsia.net.ndp:fuchsia.net.ndp_rust",
    "//sdk/fidl/fuchsia.net.resources:fuchsia.net.resources_rust",
    "//sdk/fidl/fuchsia.net.root:fuchsia.net.root_rust",
    "//sdk/fidl/fuchsia.net.routes:fuchsia.net.routes_rust",
    "//sdk/fidl/fuchsia.net.routes.admin:fuchsia.net.routes.admin_rust",
    "//src/connectivity/lib/net-types",
    "//src/connectivity/lib/packet-formats",
    "//src/connectivity/network/lib/oneshot-sync",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/network/fidl_fuchsia_net_ext",
    "//src/lib/network/fidl_fuchsia_net_interfaces_ext",
    "//src/lib/network/fidl_fuchsia_net_matchers_ext",
    "//src/lib/network/fidl_fuchsia_net_ndp_ext",
    "//src/lib/network/fidl_fuchsia_net_routes_ext",
    "//src/lib/network/packet",
    "//src/starnix/lib/linux_uapi",
    "//src/starnix/lib/third_party/rust_netlink/netlink_packet_core",
    "//src/starnix/lib/third_party/rust_netlink/netlink_packet_route",
    "//src/starnix/lib/third_party/rust_netlink/netlink_packet_utils",
    "//third_party/rust_crates:assert_matches",

    # TODO(https://github.com/rust-lang/rust/issues/91611): Replace this with
    # #![feature(async_fn_in_trait)] once it supports `Send` bounds.
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:bit-set",
    "//third_party/rust_crates:derivative",
    "//third_party/rust_crates:either",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:itertools",
    "//third_party/rust_crates:libc",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:thiserror",
  ]

  test_deps = [
    "//sdk/fidl/fuchsia.net:fuchsia.net_rust",
    "//sdk/fidl/fuchsia.net.routes:fuchsia.net.routes_rust",
    "//src/connectivity/lib/ip-test-macro",
    "//src/connectivity/lib/net-declare",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-async",
    "//src/lib/proptest-support",
    "//third_party/rust_crates:pretty_assertions",
    "//third_party/rust_crates:proptest",
    "//third_party/rust_crates:proptest-derive",
    "//third_party/rust_crates:test-case",
  ]

  sources = [
    "src/client.rs",
    "src/eventloop.rs",
    "src/interfaces.rs",
    "src/lib.rs",
    "src/logging.rs",
    "src/messaging.rs",
    "src/multicast_groups.rs",
    "src/nduseropt.rs",
    "src/netlink_packet.rs",
    "src/protocol_family.rs",
    "src/route_tables.rs",
    "src/routes.rs",
    "src/rules.rs",
    "src/rules/conversions.rs",
    "src/util.rs",
  ]

  configs -= [ "//build/config/rust/lints:allow_unused_results" ]
}

fuchsia_test_component("netlink-lib-test-component") {
  manifest = "meta/netlink-lib-test.cml"
  deps = [ ":netlink_test" ]
}

fuchsia_test_with_expectations_package("netlink-lib-test-no-err-logs") {
  test_components = [ ":netlink-lib-test-component" ]
  treatment_of_cases_with_error_logs = "SKIP_CASES_WITH_ERROR_LOGS"
  expectations = "expects/expectations.json5"
}

fuchsia_test_with_expectations_package("netlink-lib-test-with-err-logs") {
  test_components = [ ":netlink-lib-test-component" ]
  treatment_of_cases_with_error_logs = "RUN_ONLY_CASES_WITH_ERROR_LOGS"
  expectations = "expects/expectations.json5"
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

group("tests") {
  testonly = true
  deps = [
    ":netlink-lib-test-no-err-logs",
    ":netlink-lib-test-with-err-logs",
    "tests",
  ]
}
