| # 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("//build/packages/prebuilt_test_package.gni") | 
 |  | 
 | # Defines prebuilt package tests based on the contents in a prebuilt test manifest. | 
 | # | 
 | # Vendors are required to upload a "test_manifest.json" file in the same CIPD | 
 | # package as their prebuilt FAR tests. We use this manifest for determining | 
 | # which test packages to enable and how each test package is run. | 
 | # | 
 | # test_manifest.json should contain a JSON list of objects. Each object's schema is: | 
 | # | 
 | #   package (required) | 
 | #     The name of the Fuchsia package | 
 | #     Type: string | 
 | # | 
 | #   component_name (required) | 
 | #     The name of the test component. | 
 | #     Type: string | 
 | # | 
 | #   archive_name (optional) | 
 | #     The name of the archive file containing the Fuchsia package, relative to | 
 | #     $archive_dir, below. | 
 | #     Type: string | 
 | #     Default: $package | 
 | # | 
 | # Parameters | 
 | # | 
 | #   archive_dir (required) | 
 | #     [string] Path to directory containing prebuilt archives and test_manifest.json | 
 | # | 
 | #   environments (optional, default: [ { dimensions = { device_type = "QEMU" } } ]) | 
 | #     [list of scopes] Device environments in which the test should run. | 
 | # | 
 | #     Environment scope is defined in //build/testing/test_spec.gni | 
 | # | 
 | #   disabled_tests (optional) | 
 | #     [list of scopes] List of scopes containing "package" and "component_name" | 
 | #     entries to disable. | 
 | # | 
 | template("prebuilt_test_manifest") { | 
 |   assert(defined(invoker.archive_dir), "archive_dir must be defined.") | 
 |  | 
 |   manifest_path = "${invoker.archive_dir}/test_manifest.json" | 
 |   manifest = read_file(manifest_path, "json") | 
 |   test_targets = [] | 
 |   foreach(test, manifest) { | 
 |     test_package = test.package | 
 |     component_name = test.component_name | 
 |     archive_name = test_package | 
 |     if (defined(test.archive_name)) { | 
 |       archive_name = test.archive_name | 
 |     } | 
 |     test_disabled = false | 
 |     if (defined(invoker.disabled_tests)) { | 
 |       foreach(disabled_test, invoker.disabled_tests) { | 
 |         if (test_package == disabled_test.package && | 
 |             component_name == disabled_test.component_name) { | 
 |           test_disabled = true | 
 |         } | 
 |       } | 
 |     } | 
 |     if (!test_disabled) { | 
 |       prebuilt_test_package(test_package) { | 
 |         archive = "${invoker.archive_dir}/${archive_name}.far" | 
 |         component_name = component_name | 
 |         forward_variables_from(invoker, | 
 |                                [ | 
 |                                  "environments", | 
 |                                  "log_settings", | 
 |                                ]) | 
 |       } | 
 |       test_targets += [ ":${test_package}" ] | 
 |     } | 
 |   } | 
 |  | 
 |   group(target_name) { | 
 |     testonly = true | 
 |     forward_variables_from(invoker, [ "visibility" ]) | 
 |     public_deps = test_targets | 
 |   } | 
 | } |