# Copyright 2020 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/config/build_api_module.gni")
import("//build/testing/golden_files.gni")
import("//sdk/ctf/build/ctf.gni")

# Generates a manifest of CTF release artifacts to upload to remote storage.
build_api_module("ctf_artifacts") {
  testonly = true
  data_keys = [ "ctf_artifacts" ]
  walk_keys = [ "ctf_barrier" ]
  deps = [ ":ctf" ]
}

group("ctf") {
  testonly = true
  deps = [
    ":check_test_templates",
    ":golden_files",
    ":host_test_manifest",
    ":package_archive_manifest",
    ":tests",
  ]
}

group("tests") {
  testonly = true
  deps = [
    "build/scripts:tests",
    "tests",
    "tests:e2e_tests",
  ]
}

generated_file("package_archive_manifest") {
  testonly = true
  outputs = [ "$root_out_dir/cts/package_archives.json" ]
  output_conversion = "json"
  data_keys = [ "package_archives" ]
  walk_keys = [ "ctf_barrier" ]
  deps = [ "tests" ]
  metadata = {
    ctf_artifacts = rebase_path(outputs, root_build_dir)
  }
}

generated_file("host_test_manifest") {
  testonly = true
  outputs = [ "$root_out_dir/cts/host_test_manifest.json" ]
  output_conversion = "json"
  data_keys = [ "host_test_manifest" ]
  deps = [ "tests/examples/host_tool:tests($host_toolchain)" ]

  metadata = {
    ctf_artifacts = [ "cts/host_test_manifest.json" ]
  }
}

generate_ctf_tests("check_test_templates") {
  api_level = "_in_development"
  manifest = "//sdk/ctf/goldens/package_archives.json"
  use_prebuilts_from_current_build = true
  deps = [ ":package_archive_manifest" ]
}

golden_files("golden_files") {
  testonly = true
  deps = [ ":package_archive_manifest($target_toolchain)" ]

  comparisons = []
  foreach(dep, deps) {
    _outputs = []
    _outputs = get_target_outputs(dep)
    _candidate = _outputs[0]
    comparisons += [
      {
        golden = "//sdk/ctf/goldens/" + get_path_info(_candidate, "file")
        candidate = _candidate
      },
    ]
  }
}

# Tests that we want to run in an FYI builder.
# We do not want failures from these tests to break the tree.
group("fyi") {
  testonly = true
  deps = []
}
