#!/bin/bash
# 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.

### Test fx vdl

BT_FILE_DEPS=(
  "scripts/fx"
  "tools/devshell/lib/fx-cmd-locator.sh"
  "tools/devshell/lib/fx-optional-features.sh"
  "tools/devshell/lib/image_build_vars.sh"
  "tools/devshell/lib/platform.sh"
  "tools/devshell/lib/vars.sh"
  "tools/devshell/vdl"
)

BT_MOCKED_TOOLS=(
  # VDL
  "prebuilt/vdl/device_launcher"

  # Emulator
  "${PREBUILT_AEMU_DIR}/emulator"
)
declare fx

BT_SET_UP() {
  source "${BT_TEMP_DIR}/tools/devshell/lib/vars.sh"
  source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
  fx="$(btf::setup_fx)"
  btf::make_mock "${BT_TEMP_DIR}/out/default/image_paths.sh"
  btf::make_mock "${BT_TEMP_DIR}/${PREBUILT_VDL_DIR}/device_launcher"
  btf::make_hosttools_mock "zbi"
}

TEST_fx_vdl_default() {
  local out="${BT_TEMP_DIR}/output.log"
  BT_EXPECT ${fx} vdl >>${out} 2>&1
  btf::expect-mock-args "${PREBUILT_VDL_DIR}/device_launcher.mock_state" \
    "--action=start" _ANY_ _ANY_ _ANY_ _ANY_ \
    "--resize_fvm=2G" \
    "--gpu=swiftshader_indirect" \
    "--headless_mode=false" \
    "--tuntap=false" \
    _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ \
    "--ga=true" \
    _ANY_
}

TEST_fx_vdl_tuntap() {
  local out="${BT_TEMP_DIR}/output.log"
  BT_EXPECT ${fx} vdl -N  >>${out} 2>&1

  btf::expect-mock-args "${PREBUILT_VDL_DIR}/device_launcher.mock_state" \
  "--action=start" _ANY_ _ANY_ _ANY_ _ANY_ \
  "--resize_fvm=2G" \
  "--gpu=swiftshader_indirect" \
  "--headless_mode=false" \
  "--tuntap=true" \
  _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ \
  "--ga=true" \
  _ANY_
}

TEST_fx_vdl_headless_tuntap() {
  local out="${BT_TEMP_DIR}/output.log"
  BT_EXPECT ${fx} vdl -N --headless >>${out} 2>&1

  btf::expect-mock-args "${PREBUILT_VDL_DIR}/device_launcher.mock_state" \
  "--action=start" _ANY_ _ANY_ _ANY_ _ANY_ \
  "--resize_fvm=2G" \
  "--gpu=swiftshader_indirect" \
  "--headless_mode=true" \
  "--tuntap=true" \
  _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ \
  "--ga=true" \
  _ANY_
}

TEST_fx_vdl_tuntap_script() {
  local out="${BT_TEMP_DIR}/output.log"
  BT_EXPECT ${fx} vdl -N -u "./script" >>${out} 2>&1

  btf::expect-mock-args "${PREBUILT_VDL_DIR}/device_launcher.mock_state" \
  "--action=start" _ANY_ _ANY_ _ANY_ _ANY_ \
  "--resize_fvm=2G" \
  "--gpu=swiftshader_indirect" \
  "--headless_mode=false" \
  "--tuntap=true" \
  "--upscript=./script" \
  _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ _ANY_ \
  "--ga=true" \
  _ANY_
}

BT_RUN_TESTS "$@"

