# Copyright 2018 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/fuzzing/fuzzer.gni")
import("//build/package.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

source_set("pkg_url") {
  sources = [
    "fuchsia_pkg_url.cc",
    "fuchsia_pkg_url.h",
    "url_resolver.cc",
    "url_resolver.h",
  ]

  public_deps = [
    "//src/lib/fxl",
  ]
}

executable("tests") {
  testonly = true

  output_name = "pkg_url_unittests"

  sources = [
    "fuchsia_pkg_url_unittest.cc",
    "url_resolver_unittest.cc",
  ]

  deps = [
    ":pkg_url",
    "//src/lib/fxl/test:gtest_main",
  ]
}

test_package("pkg_url_unittests") {
  deps = [
    ":tests",
  ]
  tests = [
    {
      name = "pkg_url_unittests"
      environments = basic_envs
    },
  ]
}

fuzz_package("pkg_url_fuzzers") {
  targets = [
    ":fuchsia_pkg_url_fuzzer",
    ":url_resolver_fuzzer",
  ]
  sanitizers = [ "asan", "ubsan" ]
}

fuzz_target("fuchsia_pkg_url_fuzzer") {
  sources = [ "fuchsia_pkg_url_fuzztest.cc" ]
  deps = [ ":pkg_url" ]
}

fuzz_target("url_resolver_fuzzer") {
  sources = [ "url_resolver_fuzztest.cc" ]
  deps = [ ":pkg_url" ]
}
