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

source_set("lib") {
  sources = [
    "echo_connection.cc",
    "echo_connection.h",
    "example_server_app.cc",
    "example_server_app.h",
  ]

  public_deps = [
    "//garnet/examples/fidl/services:echo",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/inspect_deprecated:component",
  ]
}

executable("bin") {
  output_name = "example_server"

  sources = [ "example_server.cc" ]

  deps = [
    ":lib",
    "//zircon/public/lib/async-default",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
  ]
}

executable("client") {
  output_name = "example_client"

  sources = [ "example_client.cc" ]

  deps = [
    "//garnet/examples/fidl/services:echo",
    "//src/lib/files",
    "//zircon/public/lib/fdio",
  ]
}

package("example_server") {
  deps = [
    ":bin",
    ":client",
  ]
  binaries = [
    {
      name = "example_server"
    },
    {
      name = "example_client"
      shell = true
    },
  ]

  meta = [
    {
      path = rebase_path("meta/example_server.cmx")
      dest = "example_server.cmx"
    },
  ]
}

executable("example_server_cpp_unittests") {
  output_name = "example_server_unittests"
  testonly = true

  sources = [ "echo_connection_unittest.cc" ]

  deps = [
    ":lib",
    "//garnet/public/lib/gtest",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/inspect_deprecated:reader",
    "//src/lib/inspect_deprecated/testing",
  ]
}

test_package("example_server_unittests") {
  deps = [ ":example_server_cpp_unittests" ]

  tests = [
    {
      name = "example_server_unittests"
      environments = basic_envs
    },
  ]
}
