#!/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/fx-mkzedboot.sh"
  "tools/devshell/lib/image_build_vars.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.vboot"
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.vboot"
}

BT_RUN_TESTS "$@"
