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

fuchsia_component("minfs-crash") {
  testonly = true
  manifest = "minfs/meta/crash.cmx"
  deps = [ "minfs:stressor-bin" ]
}

fuchsia_component("minfs-no-crash") {
  testonly = true
  manifest = "minfs/meta/no-crash.cmx"
  deps = [ "minfs:stressor-bin" ]
}

fuchsia_component("blobfs-crash") {
  testonly = true
  manifest = "blobfs/meta/crash.cmx"
  deps = [ "blobfs:stressor-bin" ]
}

fuchsia_component("blobfs-no-crash") {
  testonly = true
  manifest = "blobfs/meta/no-crash.cmx"
  deps = [ "blobfs:stressor-bin" ]
}

fuchsia_component("fvm-no-crash") {
  testonly = true
  manifest = "fvm/meta/no-crash.cmx"
  deps = [ "fvm:stressor-bin" ]
}

# TODO(70180): Re-enable this test after fixing state bug
#fuchsia_component("fvm-crash") {
#  testonly = true
#  manifest = "fvm/meta/crash.cmx"
#  deps = [ "fvm:stressor-bin" ]
#}

fuchsia_component("blobfs-short") {
  testonly = true
  manifest = "blobfs/meta/short.cmx"
  deps = [ "blobfs:stressor-bin" ]
}

fuchsia_component("fvm-short") {
  testonly = true
  manifest = "fvm/meta/short.cmx"
  deps = [ "fvm:stressor-bin" ]
}

fuchsia_component("minfs-short") {
  testonly = true
  manifest = "minfs/meta/short.cmx"
  deps = [ "minfs:stressor-bin" ]
}

# This test package is designed to run on `core.qemu-x64-stress`.
# These bots have a time limit of 23 hours. There are 6 tests
# in this package, each running for exactly 22 hours.
fuchsia_test_package("storage-stress-tests") {
  test_components = [
    # ":fvm-crash",
    ":fvm-no-crash",
    ":blobfs-crash",
    ":blobfs-no-crash",
    ":minfs-crash",
    ":minfs-no-crash",
  ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
    environments = [
      {
        dimensions = {
          device_type = "QEMU"
        }
        tags = [ "stress-tests" ]
      },
    ]
  }
}

# This test package is designed to run a small number of operations on CQ bots.
# This ensures that these tests cannot break due to CL changes.
fuchsia_test_package("storage-stress-tests-short") {
  test_components = [
    ":fvm-short",
    ":blobfs-short",
    ":minfs-short",
  ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
    environments = [
      {
        dimensions = {
          device_type = "QEMU"
        }
      },
    ]
  }
}

group("stress-tests") {
  testonly = true
  deps = [
    ":storage-stress-tests",
    ":storage-stress-tests-short",
    "//src/lib/isolated_devmgr/v2_component:isolated-devmgr",
    "//src/sys/component_manager:component-manager",
  ]
}
