# 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/test/test_package.gni")

source_set("network_wrapper") {
  sources = [
    "cancellable.cc",
    "cancellable.h",
    "cancellable_helper.cc",
    "cancellable_helper.h",
    "network_wrapper.h",
    "network_wrapper_impl.cc",
    "network_wrapper_impl.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.net.oldhttp",
    "//src/lib/backoff",
    "//src/lib/callback",
    "//src/lib/fxl",
    "//zircon/public/lib/fit",
  ]
}

source_set("fake") {
  testonly = true

  sources = [
    "fake_network_wrapper.cc",
    "fake_network_wrapper.h",
  ]

  public_deps = [
    ":network_wrapper",
    "//zircon/public/lib/async-default",
  ]

  deps = [
    "//sdk/lib/fidl/cpp",
    "//src/lib/fsl",
  ]
}

executable("network_wrapper_unittests") {
  testonly = true

  sources = [
    "cancellable_helper_unittest.cc",
    "cancellable_unittest.cc",
    "network_wrapper_impl_unittest.cc",
  ]

  deps = [
    ":network_wrapper",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.netstack",
    "//src/lib/backoff/testing",
    "//src/lib/fsl",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]
}

unittest_package("network_wrapper_tests") {
  deps = [ ":network_wrapper_unittests" ]

  tests = [
    {
      name = "network_wrapper_unittests"
      environments = basic_envs
    },
  ]
}

group("tests") {
  testonly = true

  deps = [ ":network_wrapper_tests" ]
}
