# 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("//src/sys/build/components.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",
    ":io_conformance_util_tests",
    "//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_util") {
  name = "io_conformance_util"
  with_unit_tests = true
  edition = "2018"
  testonly = true
  deps = [
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.io.test:fuchsia.io.test-rustc",
    "//sdk/fidl/fuchsia.sys2:fuchsia.sys2-rustc",
    "//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 = [
    "src/directory_request_logger.rs",
    "src/flags.rs",
    "src/io1_request_logger_factory.rs",
    "src/lib.rs",
    "src/test_harness.rs",
  ]
}

fuchsia_unittest_package("io_conformance_util_tests") {
  deps = [ ":io_conformance_util_test" ]
}

rustc_test("io1_conformance_test") {
  name = "io1_conformance_test"
  edition = "2018"
  source_root = "io1_tests.rs"
  deps = [
    ":io_conformance_util",
    "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
    "//sdk/fidl/fuchsia.io.test:fuchsia.io.test-rustc",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem-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
#     },
#   ]
# }
