#!/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 "mkzedboot" script.

BT_FILE_DEPS=(
  "scripts/fx"
  "tools/devshell/mkzedboot"
  "tools/devshell/lib/fx-cmd-locator.sh"
  "tools/devshell/lib/fx-optional-features.sh"
  "tools/devshell/lib/generate-ssh-config.sh"
  "tools/devshell/lib/fx-mkzedboot.sh"
  "tools/devshell/lib/vars.sh"
  "tools/devshell/lib/platform.sh"
)

BT_MOCKED_TOOLS=(
   # FX tools.
  "tools/devshell/list-usb-disks"
  "tools/devshell/build"

  # Host tools.
  "prebuilt/tools/cgpt/linux-x64/cgpt"

  # System utilites
  "bin/dd"
  "bin/diskutil"
  "bin/eject"
  "bin/sudo"
)

BT_MKDIR_DEPS=(
  ".jiri_root"
  "boards"
  "dev"
  "out/default"
  "products"
)

BT_SET_UP() {
  # Set up the testing framework.
  source "${BT_TEMP_DIR}/tools/devshell/tests/lib/fuchsia-mock.sh"
  fx="$(btf::setup_fx)"

  # Set up a dummy "platform.sh"
  cat > "${BT_TEMP_DIR}/tools/devshell/lib/platform.sh" <<EOF
  readonly PREBUILT_CGPT_DIR="${BT_TEMP_DIR}/prebuilt/tools/cgpt/linux-x64"
EOF

  # Set up list-build-artifacts mock
  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 [[ "$@" == "--allow-empty --type blk mkzedboot" ]] ; then
  echo "zedboot.esp.blk"
fi
EOF

  # Set up a fake USB device; just a plain 128MiB file.
  USB_DRIVE="${BT_TEMP_DIR}/dev/sda"
  dd if=/dev/zero of="${USB_DRIVE}" bs=1024 seek=$((128*1024-1)) count=1 >/dev/null 2>/dev/null
  echo ${USB_DRIVE} > ${BT_TEMP_DIR}/tools/devshell/list-usb-disks.mock_stdout

  # Set up mocked replacements for system utils.
  export PATH="${BT_TEMP_DIR}/bin:${PATH}"
}

# Ensure that help is displayed if not argument is given.
TEST_fx-mkzedboot-no-args() {
  local out="${BT_TEMP_DIR}/_fx_mkzedboot_output"
  BT_EXPECT_FAIL ${fx} mkzedboot >"$out" 2>&1
  BT_EXPECT_FILE_CONTAINS_SUBSTRING "$out" 'Device argument required'
}

# Ensure that invalid USB disks are detected.
TEST_fx-mkzedboot-invalid-arg() {
  local out="${BT_TEMP_DIR}/_fx_mkzedboot_output"
  BT_EXPECT_FAIL ${fx} mkzedboot /xxx/invalid >"$out" 2>&1
  BT_EXPECT_FILE_CONTAINS_SUBSTRING "$out" 'does not look like a USB device'
}

# "force" should allow us to write to something that doesn't look like a USB device.
TEST_fx-mkzedboot-force-write() {
  # Modify "list-usb-disks" to not return anything as a USB disk.
  echo > ${BT_TEMP_DIR}/tools/devshell/list-usb-disks.mock_stdout

  local out="${BT_TEMP_DIR}/_fx_mkzedboot_output"
  # Force write to the USB drive.
  BT_EXPECT ${fx} mkzedboot -f ${USB_DRIVE} >"$out" 2>&1

  # Ensure we wrote to the file.
  source "${BT_TEMP_DIR}/bin/dd.mock_state"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "of=${USB_DRIVE}"
}

# Write an EFI USB disk
TEST_fx-mkzedboot-efi() {
  # Set up "list-build-artifacts" mock for x64 EFI builds.
  cat > "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts.mock_side_effects" << "EOF"
if [[ "$@" == "--allow-empty --type blk mkzedboot" ]] ; then
  echo "zedboot.esp.blk"
fi
EOF

  local out="${BT_TEMP_DIR}/_fx_mkzedboot_output"
  # Write to /dev/sda
  BT_ASSERT ${fx} mkzedboot ${USB_DRIVE} >"$out" 2>&1

  # Ensure we created the GPT.
  source "${BT_TEMP_DIR}/prebuilt/tools/cgpt/linux-x64/cgpt.mock_state.1"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "cgpt create ${USB_DRIVE}"

  # Ensure we marked the device as bootable.
  source "${BT_TEMP_DIR}/prebuilt/tools/cgpt/linux-x64/cgpt.mock_state.2"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "cgpt boot -p ${USB_DRIVE}"

  # Ensure we added an ESP partition.
  source "${BT_TEMP_DIR}/prebuilt/tools/cgpt/linux-x64/cgpt.mock_state.3"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "cgpt add"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" " -t efi "
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" " -l esp "

  # We should have copied the ESP version of Zedboot.
  source "${BT_TEMP_DIR}/bin/dd.mock_state"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "out/default/zedboot.esp.blk"
}

# Write a Chromeboot vboot USB disk
TEST_fx-mkzedboot-vboot() {
  # Set up "list-build-artifacts" mock for chromebook builds.
  cat > "${BT_TEMP_DIR}/tools/devshell/list-build-artifacts.mock_side_effects" << "EOF"
if [[ "$@" == "--allow-empty --type zbi.signed mkzedboot" ]] ; then
  echo "zedboot.zbi.signed"
fi
EOF
  local out="${BT_TEMP_DIR}/_fx_mkzedboot_output"
  # Write to /dev/sda
  BT_ASSERT ${fx} mkzedboot ${USB_DRIVE} >"$out" 2>&1

  # Ensure we created the GPT.
  source "${BT_TEMP_DIR}/prebuilt/tools/cgpt/linux-x64/cgpt.mock_state.1"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "cgpt create ${USB_DRIVE}"

  # Ensure we marked the device as bootable.
  source "${BT_TEMP_DIR}/prebuilt/tools/cgpt/linux-x64/cgpt.mock_state.2"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "cgpt boot -p ${USB_DRIVE}"

  # Ensure we set up VBOOT partitions:
  #   1. reserved
  #   2. vboot image
  source "${BT_TEMP_DIR}/prebuilt/tools/cgpt/linux-x64/cgpt.mock_state.3"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "cgpt add"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" " -t reserved "
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" " -l reserved "
  source "${BT_TEMP_DIR}/prebuilt/tools/cgpt/linux-x64/cgpt.mock_state.4"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "cgpt add"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" " -t kernel "
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" " -l zedboot "

  # Ensure we set the kernel partition to bootable.
  source "${BT_TEMP_DIR}/prebuilt/tools/cgpt/linux-x64/cgpt.mock_state.5"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "cgpt add -i 2"  # Modify partition
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" " -P 2 "  # Priority 2

  # We should have copied the Signed ZBI version of Zedboot.
  source "${BT_TEMP_DIR}/bin/dd.mock_state"
  BT_EXPECT_STRING_CONTAINS_SUBSTRING "${BT_MOCK_ARGS[*]}" "out/default/zedboot.zbi.signed"
}

BT_RUN_TESTS "$@"
