# Copyright 2018 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/testing/environments.gni")

group("tests") {
  testonly = true
  deps = [
    ":archivist-integration-tests",
    "accessor_truncation:test-spec",
    "archive_path:test-spec",
    "feedback_reader:test-spec",
    "logs-basic-integration",
    "logs-budget",
    "logs-connector",
    "logs-from-crash",
    "logs-lifecycle",
    "logs-redaction",
    "logs-sorting",
    "logs-stop",
    "logs-unattributed-sinks",
    "logs/cpp:test-spec",
    "logs/cpp:test-spec-structured",
    "unified_reader:test-spec",
    "v2:tests",
  ]
}

# only depend on this via the above `tests` group so that fx test sees the tests
fuchsia_package("archivist-integration-tests") {
  testonly = true
  deps = [
    "accessor_truncation:accessor-truncation-integration-test",
    "archive_path",
    "feedback_reader",
    "logs/cpp",
    "logs/cpp:cpp-structured",
    "unified_reader",
  ]
}
