# Copyright 2021 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/test.gni")
import("//src/storage/testing/driver_test_realm.gni")

executable("f2fs") {
  sources = [ "main.cc" ]
  deps = [
    "//sdk/fidl/fuchsia.io:fuchsia.io_cpp",
    "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_cpp",
    "//sdk/lib/syslog/cpp",
    "//src/storage/f2fs",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
  ]
}

fuchsia_component("f2fs-component") {
  manifest = "meta/f2fs.cml"
  component_name = "f2fs"
  deps = [ ":f2fs" ]
}

fuchsia_package("package") {
  package_name = "f2fs"
  deps = [ ":f2fs-component" ]
}

test("f2fs_component_test") {
  sources = [ "f2fs_test.cc" ]
  deps = [
    "//sdk/fidl/fuchsia.component:fuchsia.component_cpp",
    "//sdk/fidl/fuchsia.fs:fuchsia.fs_cpp",
    "//sdk/fidl/fuchsia.hardware.block:fuchsia.hardware.block_cpp",
    "//sdk/fidl/fuchsia.io:fuchsia.io_cpp",
    "//sdk/lib/component/incoming/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//src/storage/fidl/fuchsia.fs.startup:fuchsia.fs.startup_cpp",
    "//src/storage/testing:storage_driver_test_support",
    "//zircon/system/ulib/async-loop",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

fuchsia_component("f2fs-component-test-component") {
  testonly = true
  manifest = "meta/f2fs_component_test.cml"
  deps = [
    ":f2fs_component_test",
    "//src/storage/testing:storage_driver_test_realm",
  ]
}

fuchsia_test_package("f2fs-component-tests") {
  test_components = [ ":f2fs-component-test-component" ]
  deps = [ ":f2fs-component" ]
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
}

group("tests") {
  testonly = true
  deps = [ ":f2fs-component-tests" ]
}
