| # 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 one or more test manifest JSON files in the same |
| # CIPD package as their prebuilt FAR tests. We use these manifests for determining |
| # which test packages to enable and how each test package is run. |
| # |
| # The test manifest 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 |
| # |
| # log_settings (optional) |
| # The properties of logs produced by the specific test. Overwrites the manifest's |
| # log_settings for a particular test. |
| # See //build/testing/test_spec.gni for more details. |
| # Type: JSON |
| # |
| # 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 a "component_name" and either |
| # a "package" or "archive_name" to disable. |
| # |
| # manifest_name (optional, default: test_manifest.json): |
| # [string] Name of the test manifest file. |
| # |
| # log_settings (optional) |
| # The properties of logs produced by the tests defined in the manifest. |
| # See //build/testing/test_spec.gni for more details. |
| # Type: JSON |
| # |
| template("prebuilt_test_manifest") { |
| assert(defined(invoker.archive_dir), "archive_dir must be defined.") |
| |
| manifest_name = "test_manifest.json" |
| if (defined(invoker.manifest_name)) { |
| manifest_name = invoker.manifest_name |
| } |
| manifest_path = "${invoker.archive_dir}/${manifest_name}" |
| 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 (component_name == disabled_test.component_name) { |
| if (defined(disabled_test.archive_name) && |
| archive_name == disabled_test.archive_name) { |
| test_disabled = true |
| } else if (test_package == disabled_test.package) { |
| 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, |
| [ |
| "deps", |
| "environments", |
| ]) |
| if (defined(test.log_settings)) { |
| log_settings = test.log_settings |
| not_needed(invoker, [ "log_settings" ]) |
| } else if (defined(invoker.log_settings)) { |
| log_settings = invoker.log_settings |
| } |
| } |
| test_targets += [ ":${test_package}" ] |
| } |
| } |
| |
| group(target_name) { |
| testonly = true |
| forward_variables_from(invoker, [ "visibility" ]) |
| public_deps = test_targets |
| } |
| } |