# 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" ]
}

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",
  ]
}
