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

###############################################################################
# AGGREGATE LIBRARIES

source_set("lib") {
}

source_set("tests") {
  testonly = true
  deps = [
    ":datagram_stream_test",
    ":linearizer_test",
    ":receive_mode_test",
  ]
}

###############################################################################

# datagram_stream
source_set("datagram_stream") {
  sources = [
    "datagram_stream.cc",
    "datagram_stream.h",
  ]
  public_deps = [
    ":linearizer",
    ":receive_mode",
    "//sdk/fidl/fuchsia.overnet.protocol",
    "//src/connectivity/overnet/lib/environment:timer",
    "//src/connectivity/overnet/lib/environment:trace",
    "//src/connectivity/overnet/lib/labels:seq_num",
    "//src/connectivity/overnet/lib/stats:stream",
    "//src/connectivity/overnet/lib/packet_protocol",
    "//src/connectivity/overnet/lib/routing:router",
    "//src/connectivity/overnet/lib/vocabulary:internal_list",
    "//src/connectivity/overnet/lib/vocabulary:slice",
  ]
}

source_set("datagram_stream_test") {
  testonly = true
  sources = [
    "datagram_stream_test.cc",
  ]
  deps = [
    ":datagram_stream",
    "//sdk/fidl/fuchsia.overnet.protocol",
    "//src/connectivity/overnet/lib/environment:trace_cout",
    "//src/connectivity/overnet/lib/testing:flags",
    "//src/connectivity/overnet/lib/testing:test_timer",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

# linearizer
source_set("linearizer") {
  sources = [
    "linearizer.cc",
    "linearizer.h",
  ]
  deps = [
    "//src/connectivity/overnet/lib/environment:trace",
    "//src/connectivity/overnet/lib/stats:stream",
    "//src/connectivity/overnet/lib/vocabulary:callback",
    "//src/connectivity/overnet/lib/vocabulary:optional",
    "//src/connectivity/overnet/lib/vocabulary:slice",
    "//src/connectivity/overnet/lib/vocabulary:status",
  ]
}

source_set("linearizer_fuzzer_lib") {
  testonly = true
  sources = [
    "linearizer_fuzzer.cc",
    "linearizer_fuzzer.h",
  ]
  deps = [
    ":linearizer",
    "//src/connectivity/overnet/lib/environment:trace_cout",
    "//src/connectivity/overnet/lib/testing:test_timer",
    "//src/connectivity/overnet/lib/vocabulary:optional",
  ]
}

source_set("linearizer_test") {
  testonly = true
  sources = [
    "linearizer_test.cc",
  ]
  deps = [
    ":linearizer",
    ":linearizer_fuzzer_lib",
    "//src/connectivity/overnet/lib/testing:flags",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

fuzzer("linearizer_fuzzer") {
  sources = [
    "linearizer_fuzzer_main.cc",
  ]
  deps = [
    ":linearizer_fuzzer_lib",
  ]
}

# receive_mode
source_set("receive_mode") {
  sources = [
    "receive_mode.cc",
    "receive_mode.h",
  ]
  public_deps = [
    "//sdk/fidl/fuchsia.overnet.protocol",
  ]
  deps = [
    "//src/connectivity/overnet/lib/vocabulary:callback",
    "//src/connectivity/overnet/lib/vocabulary:optional",
    "//src/connectivity/overnet/lib/vocabulary:status",
  ]
}

source_set("receive_mode_fuzzer_helpers") {
  testonly = true
  sources = [
    "receive_mode_fuzzer_helpers.h",
  ]
  public_deps = [
    "//sdk/fidl/fuchsia.overnet.protocol",
  ]
  deps = [
    ":receive_mode",
  ]
}

source_set("receive_mode_test") {
  testonly = true
  sources = [
    "receive_mode_test.cc",
  ]
  deps = [
    ":receive_mode",
    ":receive_mode_fuzzer_helpers",
    "//third_party/googletest:gtest",
  ]
}

fuzzer("receive_mode_fuzzer") {
  sources = [
    "receive_mode_fuzzer.cc",
  ]
  deps = [
    ":receive_mode_fuzzer_helpers",
    "//src/connectivity/overnet/lib/protocol:varint",
  ]
}
