| # 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/components.gni") |
| import("//build/cpp/cpp_fuzzer.gni") |
| import("//build/fuzz.gni") |
| import("//build/test.gni") |
| import("//build/testing/host_test_data.gni") |
| |
| group("tests") { |
| testonly = true |
| deps = [ |
| ":zbitl-fuzzers", |
| ":zbitl-tests", |
| ":zbitl-unittests($host_toolchain)", |
| ] |
| } |
| |
| # Test data ZBIs created by data/gen.py. |
| test_data_zbis = [ |
| "data/empty.zbi", |
| "data/one-item.zbi", |
| "data/compressed-item.zbi", |
| "data/bad-crc-item.zbi", |
| "data/multiple-small-items.zbi", |
| "data/second-item-on-page-boundary.zbi", |
| "data/bootfs.zbi", |
| ] |
| |
| if (is_host) { |
| host_test_data("host-test-data") { |
| sources = test_data_zbis |
| outputs = [ "$root_out_dir/test_data/zbitl/{{source_file_part}}" ] |
| } |
| } |
| |
| # We define a translation unit per (src, dest) storage type pair, which |
| # parametrize the tests for the copy APIs. The number of test cases is subject |
| # to combinatorial explosion and in putting all such cases in a single TU we |
| # see a significant build bottleneck arise, as well as stack overflow for |
| # certain instrumentation and optimization levels (due to the global |
| # constructors defined by the zxtest framework). |
| # |
| # For each storage type, we expect <type>TestTraits to coincide with the name |
| # of its associated test traits type. |
| src_storage_types = [ |
| "String", |
| "ByteSpan", |
| "FblByteArray", |
| "Efi", |
| "Fd", |
| "Stdio", |
| ] |
| if (is_fuchsia) { |
| src_storage_types += [ |
| "Vmo", |
| "UnownedVmo", |
| "MapOwnedVmo", |
| "MapUnownedVmo", |
| ] |
| } |
| |
| # Subtract the non-extensible types. |
| dest_storage_types = src_storage_types - [ |
| "String", |
| "ByteSpan", |
| ] |
| copy_test_deps = [] |
| foreach(src, src_storage_types) { |
| foreach(dest, dest_storage_types) { |
| source_set_name = "copy_tests.${src}-to-${dest}" |
| source_set(source_set_name) { |
| testonly = true |
| sources = [ "copy-tests.cc" ] |
| deps = [ |
| "//src/lib/zbitl", |
| "//src/zircon/lib/zircon", |
| "//third_party/googletest:gtest", |
| "//zircon/kernel/lib/efi/testing", |
| ] |
| defines = [ |
| "SRC_STORAGE_TYPE=${src}", |
| "DEST_STORAGE_TYPE=${dest}", |
| ] |
| } |
| copy_test_deps += [ ":${source_set_name}" ] |
| } |
| } |
| |
| test("zbitl-unittests") { |
| sources = [ |
| "array-tests.cc", |
| "checking-tests.cc", |
| "cpu-topology-tests.cc", |
| "debugdata-tests.cc", |
| "efi-tests.cc", |
| "fd-tests.cc", |
| "json-tests.cc", |
| "mem-config-test.cc", |
| "span-tests.cc", |
| "stdio-tests.cc", |
| "tests.cc", |
| ] |
| deps = [ |
| "//sdk/lib/stdcompat", |
| "//src/lib/files", |
| "//src/lib/fxl", |
| "//src/lib/fxl/test:gtest_main", |
| "//src/lib/zbitl", |
| "//third_party/googletest:gmock", |
| "//third_party/googletest:gtest", |
| "//third_party/rapidjson", |
| "//zircon/kernel/lib/efi/testing", |
| ] |
| deps += copy_test_deps |
| |
| if (is_fuchsia) { |
| sources += [ "vmo-tests.cc" ] |
| } else if (is_host) { |
| deps += [ ":host-test-data" ] |
| } |
| } |
| |
| resource("zbitl-test-resources") { |
| sources = test_data_zbis + [ "data/large.zst" ] |
| outputs = [ "data/{{source_file_part}}" ] |
| } |
| |
| fuchsia_unittest_package("zbitl-tests") { |
| deps = [ |
| ":zbitl-test-resources", |
| ":zbitl-unittests", |
| ] |
| manifest = "meta/zbitl-unittests.cml" |
| } |
| |
| fuchsia_fuzzer_component("append-fuzzer-component") { |
| manifest = "meta/append-fuzzer.cml" |
| deps = [ ":append-fuzzer" ] |
| } |
| |
| fuchsia_fuzzer_component("bootfs-iteration-fuzzer-component") { |
| manifest = "meta/bootfs-iteration-fuzzer.cml" |
| deps = [ ":bootfs-iteration-fuzzer" ] |
| } |
| |
| fuchsia_fuzzer_component("copy-fuzzer-component") { |
| manifest = "meta/copy-fuzzer.cml" |
| deps = [ ":copy-fuzzer" ] |
| } |
| |
| fuchsia_fuzzer_component("view-iteration-fuzzer-component") { |
| manifest = "meta/view-iteration-fuzzer.cml" |
| deps = [ ":view-iteration-fuzzer" ] |
| } |
| |
| if (is_fuchsia) { |
| fuchsia_fuzzer_package("zbitl-fuzzers") { |
| cpp_fuzzer_components = [ |
| ":append-fuzzer-component", |
| ":bootfs-iteration-fuzzer-component", |
| ":copy-fuzzer-component", |
| ":view-iteration-fuzzer-component", |
| ] |
| } |
| } else { |
| group("zbitl-fuzzers") { |
| testonly = true |
| deps = [ |
| ":append-fuzzer", |
| ":bootfs-iteration-fuzzer", |
| ":copy-fuzzer", |
| ":view-iteration-fuzzer", |
| ] |
| } |
| } |
| cpp_fuzzer("append-fuzzer") { |
| sources = [ "append-fuzzer.cc" ] |
| deps = [ ".." ] |
| } |
| |
| cpp_fuzzer("copy-fuzzer") { |
| sources = [ "copy-fuzzer.cc" ] |
| deps = [ |
| "..", |
| "//zircon/system/ulib/fbl", |
| ] |
| if (is_fuchsia) { |
| deps += [ "//zircon/system/ulib/zx" ] |
| } |
| } |
| |
| # Why does passing configs not work when cpp_fuzzer is used? GN produces an |
| # undefined identifier error, but cpp_fuzzer is a direct delegate to fuzzer. |
| fuchsia_library_fuzzer("bootfs-iteration-fuzzer") { |
| sources = [ "bootfs-iteration-fuzzer.cc" ] |
| deps = [ ".." ] |
| } |
| |
| cpp_fuzzer("view-iteration-fuzzer") { |
| sources = [ "view-iteration-fuzzer.cc" ] |
| deps = [ ".." ] |
| } |