# 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/testing/environments.gni")
import("//peridot/build/executable_package.gni")
import("//peridot/build/tests_package.gni")

executable("sessionctl_bin") {
  output_name = "sessionctl"
  sources = [
    "main.cc",
  ]

  deps = [
    ":lib",
    "//peridot/lib/rapidjson",
    "//peridot/public/lib/async/cpp:future",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.internal",
    "//src/lib/fxl",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fdio",
  ]
}

package("sessionctl") {
  deprecated_shell = "//build"

  deps = [
    ":sessionctl_bin",
  ]
  binaries = [
    {
      name = "sessionctl"
      shell = true
    },
  ]

  meta = [
    {
      path = "meta/sessionctl.cmx"
      dest = "sessionctl.cmx"
    },
  ]
}

source_set("lib") {
  sources = [
    "logger.cc",
    "logger.h",
    "session_ctl_app.cc",
    "session_ctl_app.h",
    "session_ctl_constants.h",
  ]

  deps = [
    "//peridot/lib/rapidjson",
    "//peridot/public/lib/async/cpp:future",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.internal",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable("sessionctl_unittest") {
  testonly = true

  sources = [
    "session_ctl_app_unittest.cc",
  ]

  deps = [
    ":lib",
    "//peridot/bin/sessionmgr/puppet_master:puppet_master_impl",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:test_story_command_executor",
    "//peridot/lib/testing:test_with_session_storage",
    "//sdk/fidl/fuchsia.modular",
    "//src/lib/fxl/test:gtest_main",
  ]
}

hermetic_tests_package("sessionctl_unittests") {
  deps = [
    ":sessionctl_unittest",
  ]
  environments = basic_envs
}
