# Copyright 2017 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/fidl/fidl.gni")
import("//peridot/build/executable_package.gni")

group("queue_persistence") {
  testonly = true
  deps = [
    ":defs",
    ":queue_persistence_test_agent",
    ":queue_persistence_test_module",
    ":queue_persistence_test_service",
  ]
}

source_set("defs") {
  testonly = true

  sources = [
    "defs.h",
  ]
}

executable_package("queue_persistence_test_module") {
  testonly = true

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

  sources = [
    "queue_persistence_test_module.cc",
  ]

  deps = [
    ":defs",
    ":queue_persistence_test_service",
    "//garnet/public/lib/callback",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/public/lib/message_queue/cpp",
    "//peridot/tests/common:defs",
    "//sdk/fidl/fuchsia.modular",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable_package("queue_persistence_test_agent") {
  testonly = true

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

  sources = [
    "queue_persistence_test_agent.cc",
  ]

  deps = [
    ":defs",
    ":queue_persistence_test_service",
    "//peridot/public/lib/app_driver/cpp:agent_driver",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/public/lib/message_queue/cpp",
    "//peridot/tests/common:defs",
    "//sdk/fidl/fuchsia.modular",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

fidl("queue_persistence_test_service") {
  name = "test.peridot.tests.queuepersistence"
  sources = [
    "queue_persistence_test_service.fidl",
  ]
}
