# 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/rust/rustc_test.gni")
import("//src/sys/build/components.gni")

rustc_test("bin") {
  name = "unified_reader_test"
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics-rustc",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//src/lib/cstr",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:difference",
    "//third_party/rust_crates:difference",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:glob",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:regex",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:tempfile",
  ]

  sources = [ "src/lib.rs" ]

  inputs = [
    "configs/archivist_config.json",
    "configs/all_golden.json",
    "configs/single_value_client_selector.json",
  ]
}

fuchsia_component("unified_reader") {
  testonly = true
  manifest = "meta/unified_reader_test.cmx"
  deps = [
    ":bin",
    ":unified_reader_test_archivist",
    "//src/diagnostics/iquery/test/test_component",
  ]
}

fuchsia_component("unified_reader_test_archivist") {
  testonly = true
  manifest = "meta/unified_reader_test_archivist.cmx"
  deps = [ "//src/diagnostics/archivist:bin" ]
}

fuchsia_test("test-spec") {
  package = "//src/diagnostics/archivist/tests:archivist-integration-tests"
  component = ":unified_reader"
}
