# 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")

# Full list of io1 conformance tests should be included here. Add deps to the
# test packages for additional filesystem conformance tests and test harnesses.
group("tests") {
  testonly = true
  deps = [
    # Disabled for now until io.test.fidl changes.
    #":fdio_test",
    "//src/storage/conformance/conformance_harness/minfs:minfs-io1-conformance-test",
    "//src/storage/conformance/conformance_harness/rustvfs:rustvfs-io1-conformance-test",
    "//src/storage/conformance/conformance_harness/ulibfs:ulibfs-io1-conformance-test",
    "//src/sys/component_manager:component-manager",
  ]
}

rustc_library("io_conformance") {
  name = "io_conformance"
  edition = "2018"
  deps = [
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.io.test:fuchsia.io.test-rustc",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/sys/component_manager/testing: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",
  ]

  sources = [
    "src/directory_request_logger.rs",
    "src/io1_request_logger_factory.rs",
    "src/lib.rs",
  ]
}

rustc_test("io1_conformance_test") {
  name = "io1_conformance_test"
  edition = "2018"
  source_root = "io1_tests.rs"
  deps = [
    ":io_conformance",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.io.test:fuchsia.io.test-rustc",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/sys/component_manager/testing: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",
  ]

  sources = [ "io1_tests.rs" ]
}

# test("io_conformance_fdio") {
#   sources = [ "fdio.cc" ]
#   deps = [
#     "//sdk/fidl/fuchsia.io.test",
#     "//sdk/lib/sys/cpp",
#     "//third_party/googletest:gtest",
#     "//zircon/system/ulib/async-loop:async-loop-cpp",
#     "//zircon/system/ulib/async-loop:async-loop-default",
#     "//zircon/public/lib/fbl",
#     "//sdk/lib/fdio",
#     "//sdk/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(fxbug.dev/44968): Re-enable these tests once we fix race conditions involving starting
#       # and connecting components.
#       disabled = true
#     },
#   ]
# }
