#!/bin/bash
# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Chrome OS Disk Firmware Update Script test harness
# Use bash to be able to source the script to test with parameters and
# use array:
# !bash -x ./scripts/chromeos-disk-firmware-test.sh > /tmp/test 2>&1
#
# Works only in the chromium chroot.

export LC_ALL=C
DISK_TEMP_TEMPLACE=test_fw.XXXXXX
DISK_TEMP=$(mktemp -d --tmpdir "${DISK_TEMP_TEMPLACE}")


# source the script to test: The test script is in bash to
# allow paramters to be taken into account.
. scripts/chromeos-disk-firmware-update.sh \
  --tmp_dir "${DISK_TEMP}" \
  --fw_package_dir "tests/test_nvme_dir" \
  --nvme "tests/nvme" \
  --test

# Read the identify for files
declare -a nvme_model
declare -a nvme_fwrev
declare -a nvme_rc
declare -i id_idx

disk_nvme_id_info() {
  local rc=${nvme_id_rc[${id_idx}]}
  if [ ${rc} -eq 0 ]; then
    cat "tests/${nvme_id_files[${id_idx}]}.nvme"
  fi
  : $(( id_idx += 1))
  return ${rc}
}

prepare_test() {
  id_idx=0
  find "${DISK_TEMP}" -mindepth 1 -delete
}

run_test() {
  main > "${DISK_TEMP}/result"
}

check_test() {
  local test_id=$1
  local exp_result=$2_${test_id}
  local test_exp_rc=$3
  local test_rc=$4
  if [ ${test_exp_rc} -ne ${test_rc} ]; then
    echo "Expected ${test_exp_rc}, got ${test_rc}"
    exit 1
  fi
  diff "${DISK_TEMP}/result" "tests/${exp_result}"
  if [ $? -ne 0 ]; then
    echo "test_${test_id} failed"
    exit 1
  fi
}

# NVME tests:
get_device_type() {
  echo "NVME"
}

list_fixed_ata_disks() {
  echo
}

list_fixed_mmc_disks() {
  echo
}

list_fixed_nvme_disks() {
  echo "nvme0"
}

disk_nvme_current_slot() {
  echo "    1"
}

# Upgrade with reset.
prepare_test
nvme_id_files=(
  'INTEL_SSDPEKKW256G7-PSF101C'
  ''
  ''
  'INTEL_SSDPEKKW256G7-PSF109C'
  'INTEL_SSDPEKKW256G7-PSF109C'
)
nvme_id_rc=(0 10 10 0 0)

disk_nmve_reset() {
  echo "mock reset for $1"
}

run_test
check_test 1 nvme_upgraded 0 $?
echo NVME PASS 1

prepare_test
nvme_id_files=(
  'INTEL_SSDPEKKW256G7-PSF109C'
)
nvme_id_rc=(0)

run_test
check_test 2 nvme_good 0 $?
echo NVME PASS 2

# set firmware upgrade to fail
disk_nmve_reset() {
  return 1
}

prepare_test
nvme_id_files=(
  'INTEL_SSDPEKKW256G7-PSF101C'
)
nvme_id_rc=(0)
run_test
check_test 3 nvme_upgrade_failed 1 $?
echo NVME PASS 3

# Upgrade without reset.
prepare_test
nvme_id_files=(
  'INTEL_SSDPEKKW256G7-PSF100C'
  ''
  ''
  'INTEL_SSDPEKKW256G7-PSF109C'
  'INTEL_SSDPEKKW256G7-PSF109C'
)
nvme_id_rc=(0 10 10 0 0)

run_test
check_test 4 nvme_upgraded 0 $?
echo NVME PASS 4

# Upgrade Samsung device
prepare_test
nvme_id_files=(
  'SAMSUNG_KUS040205M-DXC81G1E'
  'SAMSUNG_KUS040205M-DXC81G1T'
  'SAMSUNG_KUS040205M-DXC81G1T'
)
nvme_id_rc=(0 0 0)
run_test
check_test 5 nvme_upgraded 0 $?
echo NVME PASS 5

rm -rf "${DISK_TEMP}"
