# Copyright 2021 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/test.gni")

group("tests") {
  testonly = true
  deps = [
    ":default-tests",
    ":error-tests",
  ]
}

source_set("libfuzzer") {
  visibility = [ ":*" ]
  testonly = true
  sources = [
    "process.cc",
    "process.h",
    "runner.cc",
    "runner.h",
  ]
  public_deps = [
    "//sdk/lib/fdio",
    "//sdk/lib/fit",
    "//src/sys/fuzzing/common",
    "//src/sys/fuzzing/fidl:fuchsia.fuzzer",
    "//third_party/re2",
  ]
  deps = [
    "//sdk/lib/syslog/cpp",
    "//src/lib/files",
    "//src/lib/fsl",
    "//third_party/boringssl",
  ]
}

test("unittests_bin") {
  output_name = "component_fuzzing_libfuzzer_unittests"
  visibility = [ ":*" ]
  testonly = true
  sources = [ "runner-unittest.cc" ]
  deps = [
    ":libfuzzer",
    "testing:test.fuzzer",
    "//sdk/lib/sys/cpp",
    "//src/lib/files",
    "//src/lib/fxl/test:gtest_main",
    "//src/sys/fuzzing/common:runner-unittests",
    "//src/sys/fuzzing/common/testing",
    "//third_party/googletest:gtest",
  ]
}

test("error_unittests_bin") {
  output_name = "component_fuzzing_libfuzzer_error_unittests"
  visibility = [ ":*" ]
  testonly = true
  sources = [ "process-unittest.cc" ]
  deps = [
    ":libfuzzer",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//src/sys/fuzzing/common/testing",
    "//third_party/googletest:gtest",
  ]
}

fuchsia_component("test-realm") {
  visibility = [ ":*" ]
  testonly = true
  manifest = "meta/test-realm.cml"
  deps = [
    ":test-relay",
    ":unittests",
  ]
}

fuchsia_component("test-relay") {
  visibility = [ ":*" ]
  testonly = true
  manifest = "meta/test-relay.cml"
  deps = [ "testing:relay" ]
}

fuchsia_component("unittests") {
  visibility = [ ":*" ]
  testonly = true
  manifest = "meta/unittests.cml"
  deps = [
    ":unittests_bin",
    "testing:fuzzer",
  ]
}

fuchsia_component("error-unittests") {
  visibility = [ ":*" ]
  testonly = true
  manifest = "meta/error-unittests.cml"
  deps = [
    ":error_unittests_bin",
    "testing:echo",
  ]
}

fuchsia_test_package("default-tests") {
  package_name = "component-fuzzing-libfuzzer-tests"
  test_components = [ ":test-realm" ]
}

fuchsia_test_package("error-tests") {
  package_name = "component-fuzzing-libfuzzer-error-tests"

  # Some tests involve handling intentional crashes.
  test_specs = {
    log_settings = {
      max_severity = "ERROR"
    }
  }
  test_components = [ ":error-unittests" ]
}
