# Copyright 2021 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/components.gni")
import("//build/config.gni")
import("//build/rust/rustc_library.gni")
import("//src/diagnostics/sampler/build/config_generator.gni")

# Integration test binary for lapis service.
rustc_test("test-bin") {
  testonly = true
  name = "accessor_truncation_integration_test"
  deps = [
    "//sdk/fidl/fuchsia.cobalt:fuchsia.cobalt-rustc",
    "//sdk/fidl/fuchsia.cobalt.test:fuchsia.cobalt.test-rustc",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//src/lib/diagnostics/reader/rust",
    "//src/lib/diagnostics/testing/rust",
    "//src/lib/fuchsia",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:futures",
  ]

  source_root = "src/lib.rs"
  sources = [ "src/lib.rs" ]
}

# Just another wrapper around the iquery test_component so
# one can have two instances of the component with
# different monikers.
fuchsia_component("alternate_test_component") {
  testonly = true
  manifest = "meta/alternate_test_component.cmx"
  deps = [ "//src/diagnostics/iquery/test/test_component:bin" ]
}

# Test component for accessor truncation..
fuchsia_component("accessor-truncation-integration-test") {
  testonly = true
  manifest = "meta/integration-test.cmx"
  deps = [
    ":alternate_test_component",
    ":test-bin",
    "//src/diagnostics/iquery/test/test_component",
  ]
}

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