# 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")

rustc_test("stressor-bin") {
  name = "blobfs_stressor"
  edition = "2021"
  source_root = "main.rs"
  testonly = true

  deps = [
    "//sdk/fidl/fuchsia.device:fuchsia.device_rust",
    "//sdk/fidl/fuchsia.io:fuchsia.io_rust",
    "//src/lib/diagnostics/log/rust",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/storage/lib/fs_management/rust:fs_management",
    "//src/storage/stress-tests/utils",
    "//src/sys/lib/stress-test",
    "//src/sys/pkg/lib/fuchsia-merkle",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:tracing",
  ]

  sources = [
    "blob_actor.rs",
    "deletion_actor.rs",
    "environment.rs",
    "instance_actor.rs",
    "main.rs",
    "read_actor.rs",
  ]
}
