# 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/test.gni")
import("//src/sys/build/fuchsia_unittest_package.gni")

fuchsia_unittest_package("fdio-unittest-package") {
  manifest = "meta/fdio_test.cmx"
  deps = [
    ":accept-child",
    ":chroot-child",
    ":fdio-gtest",
    ":fdio-test",
    ":hello-world",
    ":null-namespace-child",
  ]
}

group("tests") {
  testonly = true
  deps = [
    # We build the chroot-child binary for host to make it easier to experiment with host
    # behavior of chroot. Unfortunately, we cannot test host chroot behavior automatically
    # because calling chroot requires root (or other) privileges that we lack in our host
    # test environment.
    ":chroot-child($host_toolchain)",
    ":fdio-unittest-package",
    "constructors:tests",
    "getaddrinfo:tests",
  ]
  if (host_os == "linux") {
    deps += [ ":fdio-test($host_toolchain)" ]
  }
}

test("fdio-test") {
  configs += [ "//build/config:all_source" ]

  # FDIO tests that can run on host as well as target.
  sources = [
    "fdio_eventfd.cc",
    "fdio_poll.cc",
    "fdio_select.cc",
    "fdio_timerfd.cc",
  ]
  deps = [
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zxtest",
  ]
  if (is_fuchsia) {
    sources += [
      "fdio_atexit.cc",
      "fdio_chroot.cc",
      "fdio_directory.cc",
      "fdio_fd.cc",
      "fdio_fdio.cc",
      "fdio_get_vmo.cc",
      "fdio_handle_fd.cc",
      "fdio_inotify.cc",
      "fdio_io.cc",
      "fdio_memfd.cc",
      "fdio_null_namespace.cc",
      "fdio_open_max.cc",
      "fdio_path_canonicalize.cc",
      "fdio_pty.cc",
      "fdio_root.cc",
      "fdio_socket.cc",
      "fdio_socket_cleanup.cc",
      "fdio_startup.cc",
      "fdio_stubs.cc",
      "fdio_unsafe.cc",
      "fdio_watcher.cc",
      "memfd.h",
    ]
    deps += [
      "//sdk/fidl/fuchsia.hardware.pty:fuchsia.hardware.pty_llcpp",
      "//sdk/fidl/fuchsia.io:fuchsia.io_llcpp",
      "//sdk/fidl/fuchsia.posix.socket:fuchsia.posix.socket_llcpp",
      "//sdk/fidl/fuchsia.process:fuchsia.process_llcpp",
      "//sdk/lib/fdio",
      "//sdk/lib/stdcompat",
      "//zircon/public/lib/sync",
      "//zircon/public/lib/zx",
      "//zircon/system/ulib/async:async-cpp",
      "//zircon/system/ulib/async-loop:async-loop-cpp",
      "//zircon/system/ulib/async-loop:async-loop-default",
      "//zircon/system/ulib/fidl-async",
      "//zircon/system/ulib/fidl-async:fidl-async-cpp",
      "//zircon/system/ulib/test-utils",
      "//zircon/system/ulib/zxio",
    ]
  }
}

test("fdio-gtest") {
  configs += [ "//build/config:all_source" ]

  sources = [ "fdio_socketpair.cc" ]

  deps = [
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/predicates",
    "//zircon/public/lib/fbl",
  ]
}

executable("accept-child") {
  visibility = [ ":*" ]

  testonly = true
  sources = [ "fdio_atexit_test_accept_child.cc" ]
  deps = [
    "//sdk/lib/fdio",
    "//src/zircon/lib/zircon",
  ]
}

executable("chroot-child") {
  visibility = [ ":*" ]

  testonly = true
  sources = [ "fdio_chroot_child.cc" ]

  if (is_fuchsia) {
    deps = [ "//sdk/lib/fdio" ]
  }
}

# Used by tests in fdio_startup.cc.
executable("hello-world") {
  visibility = [ ":*" ]

  testonly = true
  sources = [ "hello.cc" ]
  deps = [ "//sdk/lib/fdio" ]
}

executable("null-namespace-child") {
  visibility = [ ":*" ]

  testonly = true
  sources = [ "fdio_null_namespace_child.cc" ]
  deps = [
    "//sdk/lib/fdio",
    "//src/zircon/lib/zircon",
  ]
}
