# Copyright 2018 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/package.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")
import("//src/virtualization/buildtools/linux_paths.gni")
import("//src/virtualization/buildtools/romfs_image.gni")

# Packages required to run the guest integration tests.
guest_packages = [
  "//src/virtualization/bin",
  "//src/virtualization/packages",
]

# TODO(fxbug.dev/50820): Fix on ASan and switch back to [ nuc_env ].
guest_environments = nuc_env_fails_on_asan + [
                       sherlock_env,
                       vim3_env,
                     ]

linux_tests_label = "//src/virtualization/packages/debian_guest:tests"
linux_tests_resources = [
  {
    path = get_label_info(linux_tests_label, "target_out_dir") +
           "/debian/tests.img"
    dest = "linux_tests.img"
  },
]

group("tests") {
  testonly = true
  deps = [
    ":guest_unit_tests",
    ":hypervisor_tests_pkg",
    ":virtualization_block_tests_pkg",
    ":virtualization_core_tests_pkg",
    ":virtualization_net_tests_pkg",
    ":virtualization_vsock_tests_pkg",
  ]

  # TODO(fxbug.dev/12616): These tests currently do not work on arm64.
  if (current_cpu == "x64") {
    deps += [
      # TODO(fxbug.dev/64348): These tests needs to be reworked so that they
      # interact correctly with Scenic.
      # ":virtualization_gpu_tests_pkg",
      # ":virtualization_input_tests_pkg",
    ]
  }

  # Ensure guest packages are available in the manifest.
  data_deps = guest_packages
}

source_set("logger") {
  visibility = [ ":*" ]
  sources = [
    "logger.cc",
    "logger.h",
  ]
  configs += [
    # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
    "//build/config:Wno-conversion",
  ]
}

source_set("guest_console") {
  visibility = [
    "//src/connectivity/network/testing/netemul/*",
    "//src/virtualization/*",
  ]
  sources = [
    "guest_console.cc",
    "guest_console.h",
    "socket.cc",
    "socket.h",
  ]
  deps = [
    "//sdk/fidl/fuchsia.virtualization",
    "//src/lib/fxl",
  ]
  public_deps = [
    ":logger",
    "//zircon/public/lib/zx",
  ]
}

source_set("fake_netstack") {
  visibility = [
    "//src/connectivity/network/testing/netemul/*",
    "//src/virtualization/*",
  ]
  sources = [
    "fake_netstack.cc",
    "fake_netstack.h",
  ]
  deps = [
    "//sdk/fidl/fuchsia.netstack",
    "//src/lib/inet",
    "//zircon/system/ulib/async:async-cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  public_deps = [
    "//sdk/fidl/fuchsia.netstack",
    "//sdk/lib/fit-promise",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

source_set("fake_scenic") {
  visibility = [ ":*" ]
  testonly = true
  sources = [
    "fake_scenic.cc",
    "fake_scenic.h",
  ]

  deps = [
    "//garnet/public/lib/fostr/fidl/fuchsia.ui.gfx",
    "//garnet/public/lib/fostr/fidl/fuchsia.ui.scenic",
    "//src/lib/fxl",
  ]
  public_deps = [ "//sdk/fidl/fuchsia.ui.scenic" ]
}

executable("unit_tests") {
  testonly = true
  output_name = "guest_unit_tests"
  sources = [ "guest_console_test.cc" ]
  deps = [
    ":guest_console",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]
}

source_set("test_main") {
  testonly = true
  visibility = [ ":*" ]
  sources = [ "test_main.cc" ]
  deps = [
    ":logger",
    "//src/lib/fxl/test:test_settings",
    "//third_party/googletest:gtest",
  ]
}

source_set("lib") {
  visibility = [ ":*" ]
  testonly = true
  sources = [
    "enclosed_guest.cc",
    "enclosed_guest.h",
    "guest_test.h",
    "periodic_logger.cc",
    "periodic_logger.h",
  ]

  deps = [
    ":guest_console",
    "//sdk/fidl/fuchsia.kernel",
    "//sdk/fidl/fuchsia.sysinfo",
    "//sdk/lib/fit-promise",
  ]
  public_deps = [
    ":fake_netstack",
    ":fake_scenic",
    "//sdk/lib/sys/cpp/testing:integration",
    "//src/virtualization/lib/grpc",
    "//src/virtualization/lib/vsh:client",
    "//src/virtualization/packages/biscotti_guest/third_party/protos:vm_cc_proto",
    "//zircon/public/lib/async-cpp",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

unittest_package("guest_unit_tests") {
  deps = [ ":unit_tests" ]

  tests = [
    {
      name = "guest_unit_tests"
    },
  ]
}

executable("virtualization_core_tests") {
  visibility = [ ":*" ]
  testonly = true

  sources = [ "core_tests.cc" ]

  deps = [
    ":guest_console",
    ":lib",
    ":test_main",
    "//third_party/googletest:gmock",
  ]
}

test_package("virtualization_core_tests_pkg") {
  package_name = "virtualization-core-tests"

  deps = [
    ":virtualization_core_tests",
    linux_tests_label,
  ]
  data_deps = guest_packages
  resources = linux_tests_resources

  tests = [
    {
      name = "virtualization_core_tests"
      environments = guest_environments
    },
  ]
}

executable("virtualization_block_tests") {
  visibility = [ ":*" ]
  testonly = true

  sources = [ "virtio_block_tests.cc" ]

  deps = [
    ":guest_console",
    ":lib",
    ":test_main",
    "//src/virtualization/bin/vmm/device:qcow_test_data",
    "//third_party/googletest:gmock",
  ]
}

test_package("virtualization_block_tests_pkg") {
  package_name = "virtualization-block-tests"

  deps = [
    ":virtualization_block_tests",
    linux_tests_label,
  ]
  data_deps = guest_packages
  resources = linux_tests_resources

  tests = [
    {
      name = "virtualization_block_tests"
      environments = guest_environments
    },
  ]
}

executable("virtualization_gpu_tests") {
  visibility = [ ":*" ]
  testonly = true

  sources = [ "virtio_gpu_tests.cc" ]

  deps = [
    ":guest_console",
    ":lib",
    ":test_main",
    "//third_party/googletest:gmock",
  ]
}

test_package("virtualization_gpu_tests_pkg") {
  package_name = "virtualization-gpu-tests"

  deps = [
    ":virtualization_gpu_tests",
    linux_tests_label,
  ]
  data_deps = guest_packages
  resources = linux_tests_resources

  tests = [
    {
      name = "virtualization_gpu_tests"
      environments = guest_environments
    },
  ]
}

executable("virtualization_input_tests") {
  visibility = [ ":*" ]
  testonly = true

  sources = [ "virtio_input_tests.cc" ]

  deps = [
    ":guest_console",
    ":lib",
    ":test_main",
  ]
}

test_package("virtualization_input_tests_pkg") {
  package_name = "virtualization-input-tests"

  deps = [
    ":virtualization_input_tests",
    linux_tests_label,
  ]
  data_deps = guest_packages
  resources = linux_tests_resources

  tests = [
    {
      name = "virtualization_input_tests"
      environments = guest_environments
    },
  ]
}

executable("virtualization_net_tests") {
  visibility = [ ":*" ]
  testonly = true

  sources = [ "virtio_net_tests.cc" ]

  deps = [
    ":guest_console",
    ":lib",
    ":test_main",
    "//src/lib/inet",
    "//third_party/googletest:gmock",
  ]
}

test_package("virtualization_net_tests_pkg") {
  package_name = "virtualization-net-tests"

  deps = [
    ":virtualization_net_tests",
    linux_tests_label,
  ]
  data_deps = guest_packages
  resources = linux_tests_resources

  tests = [
    {
      name = "virtualization_net_tests"
      environments = guest_environments
    },
  ]
}

executable("virtualization_vsock_tests") {
  visibility = [ ":*" ]
  testonly = true

  sources = [ "virtio_vsock_tests.cc" ]

  deps = [
    ":guest_console",
    ":lib",
    ":test_main",
    "//third_party/googletest:gmock",
  ]
}

test_package("virtualization_vsock_tests_pkg") {
  package_name = "virtualization-vsock-tests"

  deps = [
    ":virtualization_vsock_tests",
    linux_tests_label,
  ]
  data_deps = guest_packages
  resources = linux_tests_resources

  tests = [
    {
      name = "virtualization_vsock_tests"
      environments = guest_environments
    },
  ]
}

package("virtualization_test_utils_pkg") {
  package_name = "virtualization-test-utils"

  deps = [
    "virtio_block_test_util",
    "virtio_net_test_util",
    "virtio_rng_test_util",
    "virtio_vsock_test_util",
  ]

  meta = [
    {
      path =
          rebase_path("virtio_block_test_util/meta/virtio_block_test_util.cmx")
      dest = "virtio_block_test_util.cmx"
    },
    {
      path = rebase_path("virtio_rng_test_util/meta/virtio_rng_test_util.cmx")
      dest = "virtio_rng_test_util.cmx"
    },
    {
      path = rebase_path("virtio_net_test_util/meta/virtio_net_test_util.cmx")
      dest = "virtio_net_test_util.cmx"
    },
    {
      path =
          rebase_path("virtio_vsock_test_util/meta/virtio_vsock_test_util.cmx")
      dest = "virtio_vsock_test_util.cmx"
    },
  ]

  binaries = [
    {
      name = "virtio_block_test_util"
    },
    {
      name = "virtio_net_test_util"
    },
    {
      name = "virtio_rng_test_util"
    },
    {
      name = "virtio_vsock_test_util"
    },
  ]
}

executable("hypervisor_tests") {
  sources = [
    "hypervisor_tests.cc",
    "hypervisor_tests_${target_cpu}.S",
    "hypervisor_tests_constants.h",
  ]

  deps = [
    "//sdk/fidl/fuchsia.kernel",
    "//sdk/fidl/fuchsia.sysinfo",
    "//sdk/lib/fdio",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

test_package("hypervisor_tests_pkg") {
  package_name = "hypervisor-tests-pkg"

  deps = [ ":hypervisor_tests" ]

  tests = [
    {
      name = "hypervisor_tests"
      environments = [
        astro_env,
        emu_env,
        nelson_env,
        nuc_env,
        sherlock_env,
        vim3_env,
      ]
    },
  ]
}

icd_filename = "libvulkan_intel.so"
icd_manifest = "${target_gen_dir}/magma.json"

action("icd_manifest") {
  visibility = [ ":*" ]
  script = "//src/graphics/lib/magma/scripts/gen_icd_manifest.sh"
  args = [
    "${icd_filename}",
    rebase_path(icd_manifest, root_build_dir),
  ]
  outputs = [ icd_manifest ]
}

romfs_image("extras") {
  testonly = true

  deps = [
    ":icd_manifest",
    "//src/graphics/lib/magma/tests/integration:virtmagma_abi_conformance_tests(${linux_exe_toolchain})",
    "//src/graphics/lib/magma/tests_linux/unit_tests:virtmagma_unit_tests_linux(${linux_exe_toolchain})",
    "//src/graphics/lib/magma/tests_linux/unit_tests:virtmagma_vulkan_unit_tests(${linux_exe_toolchain})",
    "//src/lib/vulkan:vulkan_headers_and_loader(${linux_lib_toolchain})",
  ]

  inputs = [
    "${icd_manifest}",
    "${linux_lib_path}/libvulkan.so",  # Vulkan Loader
    "${linux_exe_path}/virtmagma_unit_tests_linux",
    "${linux_exe_path}/virtmagma_vulkan_unit_tests",
    "${linux_exe_path}/virtmagma_abi_conformance_tests",
  ]

  if (current_cpu == "x64") {
    deps += [ "//third_party/mesa/src/intel/vulkan:vulkan_intel(${linux_lib_toolchain})" ]

    inputs += [ "${linux_lib_path}/${icd_filename}" ]
  }

  output = "$target_out_dir/linux/extras.img"
}

# This should be merged into |guest_integration_tests| once the termina guest is stable in CQ.
executable("termina_integration_tests_bin") {
  visibility = [ ":*" ]
  output_name = "termina_integration_tests"
  testonly = true

  sources = [
    "virtio_magma_tests.cc",
    "virtio_wl_tests.cc",
  ]

  deps = [
    ":lib",
    ":test_main",
    "//third_party/googletest:gtest",
  ]
}

group("termina") {
  testonly = true
  deps = guest_packages
  deps += [ ":termina_integration_tests" ]
}

test_package("termina_integration_tests") {
  deps = [
    ":extras",
    ":termina_integration_tests_bin",
    linux_tests_label,
  ]

  resources = [
    {
      path = get_label_info(linux_tests_label, "target_out_dir") +
             "/debian/tests.img"
      dest = "linux_tests.img"
    },
    {
      path = "$target_out_dir/linux/extras.img"
      dest = "extras.img"
    },
  ]

  tests = [
    {
      name = "termina_integration_tests"
      environments = [ nuc_env ]
    },
  ]
}
