#!/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 the helper functions defined in //tools/devshell/lib/fvm.sh

BT_FILE_DEPS=(
  "tools/devshell/lib/fvm.sh"
  "tools/devshell/lib/fx-cmd-locator.sh"
  "tools/devshell/lib/fx-optional-features.sh"
  "tools/devshell/lib/generate-ssh-config.sh"
  "tools/devshell/lib/platform.sh"
  "tools/devshell/lib/vars.sh"
  "tools/devshell/lib/is_invoked_by_agent.sh"
  "tools/devshell/lib/agents.txt"
)

BT_SET_UP() {
  source "${BT_TEMP_DIR}/tools/devshell/lib/fvm.sh"
  source "${BT_TEMP_DIR}/tools/devshell/lib/vars.sh"
  source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"

  FUCHSIA_BUILD_DIR="${BT_TEMP_DIR}/out/default"
  mkdir -p "${FUCHSIA_BUILD_DIR}"

  fvm_raw_rel="fvm.blk"
  fvm_sparse_rel="fvm.sparse.blk"
  fvm_fastboot_rel="fvm.fastboot.blk"
  touch "${FUCHSIA_BUILD_DIR}/${fvm_raw_rel}"
  touch "${FUCHSIA_BUILD_DIR}/${fvm_sparse_rel}"
  touch "${FUCHSIA_BUILD_DIR}/${fvm_fastboot_rel}"
}

TEST_fx-fvm-find-raw-source() {
  # If all FVM files are present, we should use raw by default.
  btf::make_mock "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts"
  cat > "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts.mock_side_effects" << "EOF"
if [[ "$@" == "--name storage-full --type blk --allow-empty images" ]] ; then
  echo "fvm.blk"
elif [[ "$@" == "--name storage-sparse --type blk --allow-empty images" ]] ; then
  echo "fvm.sparse.blk"
elif [[ "$@" == "--name fvm.fastboot --type blk --allow-empty images" ]] ; then
  echo "fvm.fastboot.blk"
fi
EOF
  BT_ASSERT_EQ "$(fx-fvm-find-raw-source)" "${fvm_raw_rel}"
}

TEST_fx-fvm-find-raw-source_no_raw_path() {
  # If the raw FVM path is missing, fall back to sparse FVM.
  btf::make_mock "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts"
  cat > "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts.mock_side_effects" << "EOF"
if [[ "$@" == "--name storage-full --type blk --allow-empty images" ]] ; then
  echo ""
elif [[ "$@" == "--name storage-sparse --type blk --allow-empty images" ]] ; then
  echo "fvm.sparse.blk"
elif [[ "$@" == "--name fvm.fastboot --type blk --allow-empty images" ]] ; then
  echo "fvm.fastboot.blk"
fi
EOF

  BT_ASSERT_EQ "$(fx-fvm-find-raw-source)" "${fvm_sparse_rel}"
}

TEST_fx-fvm-find-raw-source_no_raw_or_sparse_path() {
  # If the raw and sparse FVM paths are missing, fall back to fastboot FVM.
  btf::make_mock "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts"
  cat > "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts.mock_side_effects" << "EOF"
if [[ "$@" == "--name storage-full --type blk --allow-empty images" ]] ; then
  echo ""
elif [[ "$@" == "--name storage-sparse --type blk --allow-empty images" ]] ; then
  echo ""
elif [[ "$@" == "--name fvm.fastboot --type blk --allow-empty images" ]] ; then
  echo "fvm.fastboot.blk"
fi
EOF

  BT_ASSERT_EQ "$(fx-fvm-find-raw-source)" "${fvm_fastboot_rel}"
}

TEST_fx-fvm-find-raw-source_no_paths() {
  # If all FVM paths are missing, output should be empty.
  btf::make_mock "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts"
  cat > "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts.mock_side_effects" << "EOF"
if [[ "$@" == "--name storage-full --type blk --allow-empty images" ]] ; then
  echo ""
elif [[ "$@" == "--name storage-sparse --type blk --allow-empty images" ]] ; then
  echo ""
elif [[ "$@" == "--name fvm.fastboot --type blk --allow-empty images" ]] ; then
  echo ""
fi
EOF

  BT_ASSERT_EQ "$(fx-fvm-find-raw-source)" ""
}

TEST_fx-fvm-find-raw-source_no_raw_file() {
  # If the raw FVM file is missing, fall back to sparse FVM.
  btf::make_mock "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts"
  cat > "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts.mock_side_effects" << "EOF"
if [[ "$@" == "--name storage-full --type blk --allow-empty images" ]] ; then
  echo "fvm.blk"
elif [[ "$@" == "--name storage-sparse --type blk --allow-empty images" ]] ; then
  echo "fvm.sparse.blk"
elif [[ "$@" == "--name fvm.fastboot --type blk --allow-empty images" ]] ; then
  echo "fvm.fastboot.blk"
fi
EOF
  rm -f "${FUCHSIA_BUILD_DIR}/${fvm_raw_rel}"
  BT_ASSERT_EQ "$(fx-fvm-find-raw-source)" "${fvm_sparse_rel}"
}

TEST_fx-fvm-find-raw-source_no_raw_or_sparse_files() {
  # If the raw and sparse FVM files are missing, fall back to fastboot FVM.
  btf::make_mock "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts"
  cat > "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts.mock_side_effects" << "EOF"
if [[ "$@" == "--name storage-full --type blk --allow-empty images" ]] ; then
  echo "fvm.blk"
elif [[ "$@" == "--name storage-sparse --type blk --allow-empty images" ]] ; then
  echo "fvm.sparse.blk"
elif [[ "$@" == "--name fvm.fastboot --type blk --allow-empty images" ]] ; then
  echo "fvm.fastboot.blk"
fi
EOF
  rm -f "${FUCHSIA_BUILD_DIR}/${fvm_raw_rel}"
  rm -f "${FUCHSIA_BUILD_DIR}/${fvm_sparse_rel}"
  BT_ASSERT_EQ "$(fx-fvm-find-raw-source)" "${fvm_fastboot_rel}"
}

TEST_fx-fvm-find-raw-source_no_files() {
  # If all FVM files are missing, output should be empty.
  btf::make_mock "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts"
  cat > "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts.mock_side_effects" << "EOF"
if [[ "$@" == "--name storage-full --type blk --allow-empty images" ]] ; then
  echo "fvm.blk"
elif [[ "$@" == "--name storage-sparse --type blk --allow-empty images" ]] ; then
  echo "fvm.sparse.blk"
elif [[ "$@" == "--name fvm.fastboot --type blk --allow-empty images" ]] ; then
  echo "fvm.fastboot.blk"
fi
EOF
  rm -f "${FUCHSIA_BUILD_DIR}/${fvm_raw_rel}"
  rm -f "${FUCHSIA_BUILD_DIR}/${fvm_sparse_rel}"
  rm -f "${FUCHSIA_BUILD_DIR}/${fvm_fastboot_rel}"
  BT_ASSERT_EQ "$(fx-fvm-find-raw-source)" ""
}

BT_RUN_TESTS "$@"
