# Copyright 2020 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/components.gni")
import("//build/config.gni")

group("tests") {
  testonly = true
  deps = [
    ":smart-door-functional-test",
    ":smart-door-server-unittest",
  ]
}

executable("bin") {
  output_name = "smart-door"
  sources = [ "src/smart_door_server.cc" ]
  deps = [
    ":lib",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

source_set("lib") {
  sources = [
    "src/smart_door_memory_client.cc",
    "src/smart_door_memory_client.h",
    "src/smart_door_server_app.cc",
    "src/smart_door_server_app.h",
  ]

  public_deps = [
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/lib/digest",
    "//src/lib/json_parser",
    "//src/security/codelab/services:codelab",
    "//zircon/system/ulib/fbl",
  ]
}

fuchsia_component("smart-door-component") {
  component_name = "smart-door"
  manifest = "meta/smart-door.cml"

  deps = [ ":bin" ]
}

fuchsia_package("smart-door") {
  deps = [
    ":smart-door-component",
    ":smart-door-config",
    "//build/validate:non_production_tag",
  ]
}

resource("smart-door-config") {
  outputs = [ "data/config.json" ]
  sources = [ "config/config.json" ]
}

resource("smart-door-config-for-unittest") {
  outputs = [ "data/config.json" ]
  sources = [ "config/test_config.json" ]
}

fuchsia_unittest_package("smart-door-server-unittest") {
  deps = [
    ":smart-door-config-for-unittest",
    ":smart-door-server-unittest-bin",
  ]
}

executable("smart-door-server-unittest-bin") {
  testonly = true
  output_name = "smart-door-server-unittest"

  sources = [ "tests/smart_door_server_unittest.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
  ]
}

fuchsia_component("smart-door-test-component") {
  testonly = true
  component_name = "smart-door-functional-test"
  manifest = "meta/smart-door-functional-test.cml"

  deps = [ ":smart-door-functional-test-bin" ]
}

fuchsia_test_package("smart-door-functional-test") {
  test_components = [ ":smart-door-test-component" ]
  deps = [
    ":smart-door-component",
    ":smart-door-config",
    "//src/security/codelab/smart_door_memory:smart-door-memory-component",
  ]
}

executable("smart-door-functional-test-bin") {
  testonly = true
  output_name = "smart-door-functional-test"

  sources = [ "tests/smart_door_functional_test.cc" ]

  deps = [
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//src/security/codelab/services:codelab",
  ]
}
