# 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.gni")

source_set("overnet") {
  public_deps = [
    "datagram_stream:lib",
    "endpoint:lib",
    "environment:lib",
    "labels:lib",
    "links:lib",
    "packet_protocol:lib",
    "protocol:lib",
    "routing:lib",
    "vocabulary:lib",
  ]
}

test("overnet_unittests") {
  deps = [
    "datagram_stream:tests",
    "endpoint:tests",
    "environment:tests",
    "labels:tests",
    "links:tests",
    "packet_protocol:tests",
    "protocol:tests",
    "routing:tests",
    "testing:run_all_tests",
    "testing:tests",
    "vocabulary:tests",
  ]
}

package("overnet_tests") {
  testonly = true

  deps = [
    ":overnet_unittests",
  ]

  tests = [
    {
      name = "overnet_unittests"
    },
  ]
}

fuzz_package("overnet_fuzzers") {
  targets = [
    "datagram_stream:linearizer_fuzzer",
    "datagram_stream:receive_mode_fuzzer",
    "links:packet_nub_fuzzer",
    "packet_protocol:packet_protocol_fuzzer",
    "protocol:routable_message_fuzzer",
    "vocabulary:internal_list_fuzzer",
  ]
  sanitizers = [ "asan" ]
  fuzz_host = true
}

