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

group("integration_tests") {
  testonly = true
  deps = [
    ":chrealm_integrationtests",
    ":chrealm_test_get_message",
    ":get_message_client_bin",
    ":tests",
    "fidl",
  ]
}

executable("tests") {
  testonly = true

  output_name = "chrealm_integration_test"

  sources = [ "chrealm_integration_test.cc" ]

  deps = [
    "fidl/fuchsia.testing.chrealm",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp/testing:integration",
    "//src/lib/fxl/test:gtest_main",
    "//src/sys/appmgr:lib",
    "//zircon/public/lib/fs",
    "//zircon/public/lib/zx",
  ]

  # TODO(46548): Fix the leaks and remove this.
  deps += [ "//build/config/sanitizers:suppress-lsan.DO-NOT-USE-THIS" ]
}

executable("get_message_client_bin") {
  output_name = "get_message_client"

  sources = [ "get_message_client.cc" ]

  deps = [
    "fidl/fuchsia.testing.chrealm",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp/",
    "//src/lib/fsl",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/async-loop-default",
    "//zircon/public/lib/zx",
  ]
}

package("chrealm_test_get_message") {
  deps = [ ":get_message_client_bin" ]

  binary = "get_message_client"

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

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