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

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

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

fuchsia_component("fxfs-crash") {
  testonly = true
  manifest = "fxfs/meta/crash.cml"
  deps = [
    "genericfs:stressor-bin",
    "//src/storage/fxfs:fxfs_component",
    "//src/storage/fxfs-crypt",
  ]
}

fuchsia_component("fxfs-no-crash") {
  testonly = true
  manifest = "fxfs/meta/no-crash.cml"
  deps = [
    "genericfs:stressor-bin",
    "//src/storage/fxfs:fxfs_component",
    "//src/storage/fxfs-crypt",
  ]
}

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

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

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

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

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

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

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

fuchsia_component("fxfs-short") {
  testonly = true
  manifest = "fxfs/meta/short.cml"
  deps = [
    "genericfs:stressor-bin",
    "//src/storage/fxfs:fxfs_component",
    "//src/storage/fxfs-crypt",
  ]
}

# 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",
    ":fxfs-crash",
    ":fxfs-no-crash",
  ]
  deps = [
    "//src/storage/bin/blobfs",
    "//src/storage/bin/minfs",
    "//src/storage/fxfs",
    "//src/storage/testing:storage_driver_test_realm",
  ]
  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",
    ":fxfs-short",
  ]
  deps = [
    "//src/storage/bin/blobfs",
    "//src/storage/bin/minfs",
    "//src/storage/fxfs",
    "//src/storage/testing:storage_driver_test_realm",
  ]
  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/sys/component_manager:component-manager",
  ]
}
