# Copyright 2019 The Chromium 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_overrides/build.gni")

source_set("unittests") {
  testonly = true
  sources = [ "device_auth_test.cc" ]

  deps = [
    "../../platform:test",
    "../../testing/util",
    "../../third_party/googletest:gmock",
    "../../third_party/googletest:gtest",
    "../common:channel",
    "../common:test_helpers",
    "../common/channel/proto:channel_proto",
    "../receiver:channel",
    "../receiver:test_helpers",
    "../sender:channel",
  ]

  if (!build_with_chromium) {
    deps += [ "../protocol:unittests" ]
  }
}

if (is_posix && !build_with_chromium) {
  source_set("e2e_tests") {
    testonly = true
    sources = [ "cast_socket_e2e_test.cc" ]

    deps = [
      "../../platform",
      "../../testing/util",
      "../../third_party/abseil",
      "../../third_party/boringssl",
      "../../third_party/googletest:gmock",
      "../../third_party/googletest:gtest",
      "../../util",
      "../common:certificate",
      "../common:channel",
      "../common:test_helpers",
      "../receiver:channel",
      "../sender:channel",
    ]
  }

  executable("make_crl_tests") {
    testonly = true
    sources = [ "make_crl_tests.cc" ]

    deps = [
      "../../platform:test",
      "../../third_party/boringssl",
      "../../util",
      "../common:test_helpers",
      "../common/certificate/proto:certificate_proto",
    ]
  }
}
