#!/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 [[ "$@" == "--expect-one --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 [[ "$@" == "--expect-one --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 [[ "$@" == "--expect-one --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 "$@"
