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

import("$zx/public/gn/config/standard.gni")
import("$zx/public/gn/toolchain/environment_redirect.gni")
import("$zx/public/gn/zbi.gni")

if (current_cpu != "") {
  group("utest") {
    testonly = true

    # For unittests, the recommended naming scheme is:
    #   path/to/code/test
    # or
    #   path/to/code:test
    #
    # Where "test" is a group containing all unittest labels.
    deps = [
      ":host",  # TODO(mcgrathr): reach this differently?
      "$zx/system/core/bootsvc:tests",
      "$zx/system/core/devmgr/devcoordinator:devcoordinator-test",
      "$zx/system/core/devmgr/devhost:devhost-test",
      "$zx/system/core/devmgr/fshost:block-watcher-test",
      "$zx/system/core/devmgr/fshost:fshost-test",
      "$zx/system/core/svchost:crashsvc-test",
      "$zx/system/core/virtcon:virtual-console-test",
      "$zx/system/dev/backlight/sg-micro:sgm37603a-test",
      "$zx/system/dev/block/ahci:ahci-unittest",
      "$zx/system/dev/block/ftl/test",
      "$zx/system/dev/block/fvm/test",
      "$zx/system/dev/block/mtk-sdmmc:mtk-sdmmc-test",
      "$zx/system/dev/block/usb-mass-storage:tests",
      "$zx/system/dev/bluetooth/bt-hci-mediatek:bt-hci-mediatek-test",
      "$zx/system/dev/board/mt8167s_ref:mt8167s_ref-test",
      "$zx/system/dev/bus/pci:pci_tests",
      "$zx/system/dev/bus/virtio:virtio-test",
      "$zx/system/dev/camera/arm-isp/test:arm-isp",
      "$zx/system/dev/clk/amlogic-clk:amlogic-clk-test",
      "$zx/system/dev/clk/msm8x53-clk:msm8x53-clk-test",
      "$zx/system/dev/display/mt8167s-display:tests",
      "$zx/system/dev/gpio/as370-gpio:as370-gpio-test",
      "$zx/system/dev/gpio/mt-8167:mtk-gpio",
      "$zx/system/dev/gpio/qcom-gpio:qcom-gpio-test",
      "$zx/system/dev/i2c/mt8167-i2c:mt8167-i2c-test",
      "$zx/system/dev/input/bma253:bma253-test",
      "$zx/system/dev/lib/scsi:scsilib-disk-test",
      "$zx/system/dev/lib/usb:usb-wrapper-test",
      "$zx/system/dev/light-sensor/lite-on:ltr-578als-test",
      "$zx/system/dev/nand/broker/test",
      "$zx/system/dev/nand/nand/test",
      "$zx/system/dev/nand/nandpart:nandpart-test",
      "$zx/system/dev/nand/ram-nand:ram-nand-test",
      "$zx/system/dev/nand/skip-block:skip-block-test",
      "$zx/system/dev/power/msm8x53-power:msm8x53-power-test",
      "$zx/system/dev/power/mtk-power:mtk-power-test",
      "$zx/system/dev/sysmem/sysmem:sysmem-unittest",
      "$zx/system/dev/test",
      "$zx/system/dev/thermal/mtk-thermal:mtk-thermal-test",
      "$zx/system/dev/usb/mt-musb-host:mt-hci-endpoint-test",
      "$zx/system/dev/usb/mt-musb-host:mt-hci-transaction-test",
      "$zx/system/uapp/disk-pave:install-disk-image-test",
      "$zx/system/uapp/nand-util:nand-util-test",
      "$zx/system/ulib/async-loop/test",
      "$zx/system/ulib/async-testutils/test",
      "$zx/system/ulib/async/test",
      "$zx/system/ulib/bitmap/test",
      "$zx/system/ulib/blobfs/test",
      "$zx/system/ulib/bootfs:bootfs-test",
      "$zx/system/ulib/c:tests",
      "$zx/system/ulib/cobalt-client/test",
      "$zx/system/ulib/crypto/test",
      "$zx/system/ulib/ddk:ddk-unittest",
      "$zx/system/ulib/digest/test",
      "$zx/system/ulib/disk-inspector/test",
      "$zx/system/ulib/driver-integration-test/test",
      "$zx/system/ulib/elf-search/test",
      "$zx/system/ulib/fbl/test",
      "$zx/system/ulib/fs/metrics/test:metrics",
      "$zx/system/ulib/fs/test",
      "$zx/system/ulib/fvm/test",
      "$zx/system/ulib/fzl/test",
      "$zx/system/ulib/gpt/test",
      "$zx/system/ulib/hid-parser/test",
      "$zx/system/ulib/hwreg/test",
      "$zx/system/ulib/id_allocator/test",
      "$zx/system/ulib/kvstore:kvstore-test",
      "$zx/system/ulib/launchpad/test",
      "$zx/system/ulib/lazy_init:lazy_init-test",
      "$zx/system/ulib/libzbi/test",
      "$zx/system/ulib/minfs/allocator/test",
      "$zx/system/ulib/minfs/test",
      "$zx/system/ulib/mipi-dsi:mipidsi",
      "$zx/system/ulib/mock-function/test",
      "$zx/system/ulib/paver:paver-test",
      "$zx/system/ulib/pretty:pretty-test",
      "$zx/system/ulib/region-alloc/test",
      "$zx/system/ulib/simplehid/test",
      "$zx/system/ulib/storage-metrics/test",
      "$zx/system/ulib/syslog/test",
      "$zx/system/ulib/tftp:tftp-test",
      "$zx/system/ulib/trace-reader:tests",
      "$zx/system/ulib/trace-vthread:tests",
      "$zx/system/ulib/utf_conversion/test",
      "$zx/system/ulib/zbi-bootfs/test",
      "$zx/system/ulib/zx/test",
      "$zx/system/ulib/zxio/test",
      "$zx/system/ulib/zxtest/test",
      "abigen",
      "backtrace-request",
      "biotime",
      "blobfs",
      "blobfs-bench",
      "channel-fatal",
      "chromeos-disk-setup",
      "cleanup",
      "compiler",
      "core",
      "cprng",
      "ctor",
      "debugger",
      "devfs",
      "device-enumeration",
      "dlfcn",
      "dlopen-indirect-deps",
      "driver-test",
      "dump1",
      "entropy",
      "errno",
      "ethernet",
      "events",
      "evil",
      "exception",
      "exit",
      "fdio",
      "ffl",
      "fidl",
      "fidl-coding-tables",
      "fidl-llcpp-interop",
      "fidl-simple",
      "fidl-utils",
      "fit",
      "fpu",
      "fs",
      "fs-bench",
      "fs-management",
      "fs-recovery",
      "fs-test-utils",
      "futex-ownership",
      "fvm",
      "fvm:fvm-integration",
      "getentropy",
      "goldfish",
      "handle-alias",
      "hid",
      "hypervisor",
      "inspect-vmo",
      "int-types",
      "kcounter",
      "kernel-unittests",
      "log",
      "logger",
      "memfs",
      "miscsvc",
      "msd",
      "namespace",
      "noop-fuzzer",
      "perftest",
      "platform-bus",
      "policy",
      "posixio",
      "processor",
      "profile",
      "property",
      "pty",
      "qsort",
      "race-tests",
      "ramdisk",
      "register-state",
      "rtc-lib",
      "runtests-utils",
      "sanitizer",
      "spawn",
      "status",
      "stdio",
      "sysconf",
      "sysinfo",
      "sysmem",
      "task-utils",
      "thread-initial-state",
      "thread-state",
      "time",
      "timers",
      "trace",
      "usb",
      "usb-virtual-bus",
      "util",
      "vdso",
      "vdso-base",
      "vdso-variant",
      "virtio",
      "virtual_camera",
      "vmo",
      "zxcrypt",

      # disabled for now:
      #"bad-kernel-access",

      # TODO(fuzztest): "edid"
    ]
    if (current_cpu == "x64") {
      deps += [ "x86-umip" ]
    }
  }

  # This plus a kernel in deps makes a tiny zbi() that just runs core-tests.
  zbi_input("core-tests") {
    testonly = true
    type = "cmdline"
    args = [
      "--entry=userboot=bin/core-tests",
      "--entry=userboot.shutdown",
    ]
    deps = [
      "$zx/system/utest/core:core-tests",
    ]
  }

  group("host-tests") {
    testonly = true
    deps = [
      "$zx/system/ulib/fbl/test",
      "$zx/system/ulib/fvm/test",
      "$zx/system/ulib/libzbi/test",
      "$zx/system/ulib/trace-reader:tests",
      "$zx/system/ulib/zxtest/test",
      "cmdline",
      "ffl",
      "fidl-compiler",
      "fit",
      "fs-host",
      "fvm-host",
      "runtests-utils",
      "util",
    ]
    if (current_os == "linux") {
      deps += [
        "$zx/system/dev/usb/usb-peripheral-test",
        "$zx/system/ulib/ftl-mtd/test",
        "ftl-mtd",
        "mtd",
      ]
    }
  }
}

# Build the host tests for each host.
foreach(host, standard_build_hosts) {
  environment_redirect("host-tests-${host.os}-${host.cpu}") {
    testonly = true
    environment_label = "$zx/public/gn/toolchain:host"
    cpu = host.cpu
    os = host.os
    direct = true
    deps = [
      ":host-tests",
    ]
  }
}

group("host-tests-all-platforms") {
  testonly = true
  deps = []
  foreach(host, standard_build_hosts) {
    deps += [ ":host-tests-${host.os}-${host.cpu}" ]
  }
}

group("host") {
  testonly = true
  deps = [
    ":host-tests-${host_os}-${host_cpu}",
  ]
}
