# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/image/image.gni")

group("vm_tests") {
  testonly = true

  deps = [
    ":primary_only_test",
    ":primary_with_secondaries_test",
  ]
}

# Primary VMs host the test framework.
source_set("hftest_vm") {
  testonly = true

  sources = [
    "hftest.c",
    "hftest.h",
  ]

  deps = [
    "//src:common",
    "//src:dlog",
    "//src:fdt",
    "//src:memiter",
    "//src/arch/${arch}:entry",
    "//src/arch/${arch}/vm:hf_call",
    "//src/arch/${arch}/vm:shutdown",
    "//src/arch/${arch}/vm:vm_entry",
  ]
}

# Secondary VMs can be used as part of a test in the primary.
source_set("secondary_vm") {
  testonly = true

  deps = [
    "//src:common",
    "//src:dlog",
    "//src/arch/${arch}:entry",
    "//src/arch/${arch}/vm:hf_call",
    "//src/arch/${arch}/vm:shutdown",
    "//src/arch/${arch}/vm:vm_entry",
  ]
}

# Tests with no secondary VMs.
vm_kernel("primary_only_test_vm") {
  testonly = true

  sources = [
    "primary_only.c",
  ]

  deps = [
    ":hftest_vm",
  ]
}

initrd("primary_only_test") {
  testonly = true

  primary_vm = ":primary_only_test_vm"
}

# Tests with secondary VMs.
vm_kernel("primary_with_secondaries_test_vm") {
  testonly = true

  sources = [
    "primary_with_secondaries.c",
  ]

  deps = [
    ":hftest_vm",
  ]
}

initrd("primary_with_secondaries_test") {
  testonly = true

  primary_vm = ":primary_with_secondaries_test_vm"
  secondary_vms = [
    [
      "1048576",
      "1",
      "relay_a",
      "//test/vm/secondaries:relay_a",
    ],
    [
      "1048576",
      "1",
      "relay_b",
      "//test/vm/secondaries:relay_b",
    ],
    [
      "1048576",
      "1",
      "echo",
      "//test/vm/secondaries:echo",
    ],
  ]
}
