# Copyright 2019 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.

##########################################
# Though under //zircon, this build file #
# is meant to be used in the Fuchsia GN  #
# build.                                 #
# See fxbug.dev/36139.                   #
##########################################

assert(!defined(zx) || zx != "/",
       "This file can only be used in the Fuchsia GN build.")

import("//build/test.gni")
import("//src/lib/isolated_devmgr/isolated_devmgr.gni")
import("//src/sys/build/components.gni")

test("fs-management") {
  configs += [
    "//build/unification/config:zircon-migrated",
    "//build/config:all_source",
  ]
  sources = [
    "admin_test.cc",
    "fs_management_test.cc",
  ]
  deps = [
    "//sdk/fidl/fuchsia.io:fuchsia.io_c",
    "//sdk/lib/fdio",
    "//src/storage/fvm",
    "//zircon/public/lib/async",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/sync",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/digest",
    "//zircon/system/ulib/fdio-caller",
    "//zircon/system/ulib/fs",
    "//zircon/system/ulib/fs-management",
    "//zircon/system/ulib/fs-test-utils",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/gpt",
    "//zircon/system/ulib/memfs",
    "//zircon/system/ulib/memfs:memfs-cpp",
    "//zircon/system/ulib/perftest",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/trace-engine",
  ]
  data_deps = [
    "//src/storage/bin/minfs",
    "//src/storage/blobfs",
  ]
}

isolated_devmgr_component("fs-management-devmgr") {
  args = [
    "--svc_name=fuchsia.test.IsolatedDevmgr",
    "--load_driver=/boot/driver/ramdisk.so",
    "--search_driver=/boot/driver",
    "--search_driver=/boot/driver/test",
    "--wait_for=misc/ramctl",
  ]

  deps = [
    "//src/devices/block/drivers/core",
    "//src/devices/block/drivers/fvm",
    "//src/devices/block/drivers/ramdisk",
    "//src/devices/misc/drivers/test",
    "//src/devices/tests/sysdev",
  ]
}

fuchsia_component("fs-management-test") {
  testonly = true
  manifest = "meta/fs-management-test.cmx"
  deps = [
    ":fs-management",
    ":fs-management-devmgr",
  ]
}

fuchsia_test_package("fs-management-test-package") {
  test_components = [ ":fs-management-test" ]
}

group("tests") {
  testonly = true
  deps = [ ":fs-management-test-package" ]
}
