# Copyright 2020 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("//build/rust/rustc_test.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

group("tests") {
  testonly = true
  deps = [
    # Disabled for now until io.test.fidl changes.
    #":fdio_test",
    ":io_fidl_conformance_tests",
    "//src/sys/component_manager",
  ]
}

rustc_library("io_conformance") {
  name = "io_conformance"
  edition = "2018"
  deps = [
    "//sdk/fidl/fuchsia.io.test:fuchsia.io.test-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/sys/component_manager/tests:test_utils_lib",
    "//src/sys/component_manager/tests/fidl:components-rustc",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//zircon/system/fidl/fuchsia-io:fuchsia-io-rustc",
  ]
}

rustc_test("io1_conformance_test") {
  name = "io1_conformance_test"
  edition = "2018"
  source_root = "io1_tests.rs"
  deps = [
    ":io_conformance",
    "//sdk/fidl/fuchsia.io.test:fuchsia.io.test-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/sys/component_manager/tests:test_utils_lib",
    "//src/sys/component_manager/tests/fidl:components-rustc",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//zircon/system/fidl/fuchsia-io:fuchsia-io-rustc",
  ]
}

test_package("io_fidl_conformance_tests") {
  deps = [
    ":io1_conformance_test",
    "conformance_harness/ulibfs:bin",
  ]

  meta = [
    {
      path = rebase_path(
              "conformance_harness/ulibfs/meta/io_conformance_harness_ulibfs.cml")
      dest = "io_conformance_harness_ulibfs.cm"
    },
  ]
  binaries = [
    {
      name = "io_conformance_harness_ulibfs"
    },
  ]

  tests = [
    {
      name = "io1_conformance_test"
    },
  ]
}

# test("io_conformance_fdio") {
#   sources = [ "fdio.cc" ]
#   deps = [
#     "//sdk/fidl/fuchsia.io.test",
#     "//sdk/lib/sys/cpp",
#     "//third_party/googletest:gtest",
#     "//zircon/public/lib/async-loop-cpp",
#     "//zircon/public/lib/async-loop-default",
#     "//zircon/public/lib/fbl",
#     "//zircon/public/lib/fdio",
#     "//zircon/system/fidl/fuchsia-io",
#   ]
# }

# test_package("fdio_test") {
#   package_name = "io_conformance_fdio_test"
#   deps = [ ":io_conformance_fdio" ]
#   tests = [
#     {
#       name = "io_conformance_fdio"
#       environments = basic_envs

#       # TODO(fxb/44968): Re-enable these tests once we fix race conditions involving starting
#       # and connecting components.
#       disabled = true
#     },
#   ]
# }
