# 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/rust/rustc_test.gni")
import("//build/test/test_package.gni")

rustc_test("driver") {
  name = "update_integration_test"
  edition = "2018"

  deps = [
    "//sdk/fidl/fuchsia.paver:fuchsia.paver-rustc",
    "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
    "//sdk/fidl/fuchsia.update:fuchsia.update-rustc",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/sys/pkg/fidl/fuchsia.update.installer:fuchsia.update.installer-rustc",
    "//src/sys/pkg/lib/fidl-fuchsia-update-ext",
    "//src/sys/pkg/lib/fidl-fuchsia-update-installer-ext",
    "//src/sys/pkg/testing/mock-installer",
    "//src/sys/pkg/testing/mock-paver",
    "//src/sys/pkg/testing/mock-reboot",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:matches",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:pretty_assertions",
  ]

  sources = [ "src/lib.rs" ]
}

test_package("update-integration-tests") {
  deps = [
    ":driver",
    "//src/sys/pkg/bin/multi-universal-tool",
  ]

  binaries = [
    {
      name = "update"
      source = "multi_universal_tool"
    },
  ]

  meta = [
    {
      path = rebase_path("//src/sys/pkg/bin/update/meta/update.cmx")
      dest = "update.cmx"
    },
  ]

  tests = [
    {
      name = "update_integration_test"
      dest = "update-integration-test"
    },
  ]
}

group("tests") {
  testonly = true
  public_deps = [ ":update-integration-tests" ]
}
