# 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/dart/test.gni")
import("//build/testing/environments.gni")

dart_test("blobfs_metrics_test") {
  sources = [
    "blobfs_metrics_test.dart",
    "util.dart",
  ]

  deps = [
    "//sdk/testing/sl4f/client",
    "//third_party/dart-pkg/pub/test",
  ]

  environments = [
    {
      dimensions = {
        device_type = "Astro"
      }
    },
  ]

  # Runs on "main" builders (try and ci) in QEMU environments, but only on x64,
  # as we don't currently support Dart on arm64 hosts.
  if (is_host && target_cpu == "x64") {
    environments += [ emu_env ]
  }
}

dart_test("inspect_metrics_test") {
  sources = [
    "inspect_metrics_test.dart",
    "util.dart",
  ]

  deps = [
    "//sdk/testing/sl4f/client",
    "//third_party/dart-pkg/pub/test",
  ]

  environments = [
    {
      dimensions = {
        device_type = "Astro"
      }
    },
  ]

  # Runs on "main" builders (try and ci) in QEMU environments, but only on x64,
  # as we don't currently support Dart on arm64 hosts.
  if (is_host && target_cpu == "x64") {
    environments += [ emu_env ]
  }
}

dart_test("archivist_reader_test") {
  sources = [
    "archivist_reader_test.dart",
    "util.dart",
  ]

  deps = [
    "//sdk/testing/sl4f/client",
    "//third_party/dart-pkg/pub/test",
  ]

  environments = [
    {
      dimensions = {
        device_type = "Astro"
      }
    },
  ]

  # Runs on "main" builders (try and ci) in QEMU environments, but only on x64,
  # as we don't currently support Dart on arm64 hosts.
  if (is_host && target_cpu == "x64") {
    environments += [ emu_env ]
  }
}

dart_test("inspect_metrics_emulator_test") {
  sources = [
    "cpu_metrics_test.dart",
    "util.dart",
  ]

  deps = [
    "//sdk/testing/sl4f/client",
    "//third_party/dart-pkg/pub/test",
  ]

  environments = [
    {
      dimensions = {
        device_type = "Astro"
      }
    },
  ]

  # Runs on "main" builders (try and ci) in QEMU environments, but only on x64,
  # as we don't currently support Dart on arm64 hosts.
  if (is_host && target_cpu == "x64") {
    environments += [ emu_env ]
  }
}

dart_test("archivist_metrics_test") {
  sources = [
    "archivist_metrics_test.dart",
    "util.dart",
  ]

  deps = [
    "//sdk/testing/sl4f/client",
    "//third_party/dart-pkg/pub/test",
  ]

  environments = [
    {
      dimensions = {
        device_type = "Astro"
      }
    },
  ]

  # Runs on "main" builders (try and ci) in QEMU environments, but only on x64,
  # as we don't currently support Dart on arm64 hosts.
  if (is_host && target_cpu == "x64") {
    environments += [ emu_env ]
  }
}

dart_test("log_stats_test") {
  sources = [
    "log_stats_test.dart",
    "util.dart",
  ]

  deps = [
    "//sdk/testing/sl4f/client",
    "//third_party/dart-pkg/pub/test",
  ]

  environments = [
    {
      dimensions = {
        device_type = "Astro"
      }
    },
  ]

  # Runs on "main" builders (try and ci) in QEMU environments, but only on x64,
  # as we don't currently support Dart on arm64 hosts.
  if (is_host && target_cpu == "x64") {
    environments += [ emu_env ]
  }
}

dart_test("legacy_metrics_test") {
  sources = [
    "legacy_metrics_test.dart",
    "util.dart",
  ]

  deps = [
    "//sdk/testing/sl4f/client",
    "//third_party/dart-pkg/pub/test",
  ]

  environments = [
    {
      dimensions = {
        device_type = "Astro"
      }
    },
  ]
}

group("test") {
  testonly = true

  deps = [
    ":archivist_metrics_test($host_toolchain)",

    # TODO(fxbug.dev/70684): re-enable when fixing flake.
    # ":archivist_reader_test($host_toolchain)",
    ":inspect_metrics_emulator_test($host_toolchain)",

    # TODO(fxbug.dev/71024): re-enable when fixing flake.
    #":inspect_metrics_test($host_toolchain)",
    ":legacy_metrics_test($host_toolchain)",
    ":log_stats_test($host_toolchain)",
  ]
}
