| #!/bin/bash |
| # Copyright 2014 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_fw_dir" \ |
| --hdparm "tests/hdparm" \ |
| --hdparm_kingston "tests/hdparm_kingston" \ |
| --smartctl "test_smartctl" \ |
| --pwr_suspend "tests/powerd_dbus_suspend" \ |
| --test |
| |
| # Overwrite funtions that call hdparm |
| # Read the identify for files |
| declare -a hdparm_files |
| declare -a hdparm_rc |
| declare -i id_idx |
| |
| disk_hdparm_info() { |
| local rc=${hdparm_rc[${id_idx}]} |
| if [ ${rc} -eq 0 ]; then |
| cat "tests/${hdparm_files[${id_idx}]}.hdparm" |
| fi |
| : $(( id_idx += 1)) |
| return ${rc} |
| } |
| |
| test_smartctl() { |
| # Given smartctl run in a subshell, we have no memory. |
| # Never assume the power count increases. We just print a message if it fails, |
| # But at least we test the internal logic of power cycling function. |
| echo " 12 Power_Cycle_Count 0x0012 100 100 000 Old_age Always - 123" |
| } |
| |
| 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 |
| } |
| |
| # ATA tests: |
| get_device_type() { |
| echo "ATA" |
| } |
| |
| list_fixed_ata_disks() { |
| echo "sda" |
| } |
| |
| list_fixed_mmc_disks() { |
| echo |
| } |
| |
| list_fixed_nvme_disks() { |
| echo |
| } |
| |
| # Test 1: Good update |
| # A disk that matches the upgrade file |
| prepare_test |
| hdparm_files=( |
| 'LITEONIT_LSS_32L6G_HP-DS51702' |
| '' |
| '' |
| 'LITEONIT_LSS_32L6G_HP-DS51704' |
| 'LITEONIT_LSS_32L6G_HP-DS51704' |
| ) |
| hdparm_rc=(0 10 10 0 0) |
| |
| run_test |
| check_test 1 disk_upgraded 0 $? |
| echo ATA PASS 1 |
| |
| # Test 2: Disk is not part of the upgrade |
| prepare_test |
| hdparm_files=( 'LITEONIT_LSS_16L6G_HP-DS41702') |
| hdparm_rc=(0) |
| |
| run_test |
| check_test 2 disk_good 0 $? |
| echo ATA PASS 2 |
| |
| # Test 3: Disk is not part of the upgrade |
| prepare_test |
| hdparm_files=('LITEONIT_LSS_32L6G_HP-DS51704') |
| hdparm_rc=(0) |
| |
| run_test |
| check_test 3 disk_good 0 $? |
| echo ATA PASS 3 |
| |
| # Test 4: Disk not supported by hdparm |
| prepare_test |
| hdparm_files=() |
| hdparm_rc=(10) |
| |
| run_test |
| check_test 4 disk_absent 0 $? |
| echo ATA PASS 4 |
| |
| # Test 5: Invalid package, a file missing |
| prepare_test |
| hdparm_files=('SAMSUNG_MZAPF032HCFV-000H1') |
| hdparm_rc=(0) |
| |
| run_test |
| check_test 5 file_missing 1 $? |
| echo ATA PASS 5 |
| |
| # Test 6: Kingston update |
| # A disk that matches the upgrade file |
| prepare_test |
| hdparm_files=( |
| 'KINGSTON_RBU_SUS151S364GD-S9FM01.8' |
| 'KINGSTON_RBU_SUS151S364GD-S9FM02.3' |
| 'KINGSTON_RBU_SUS151S364GD-S9FM02.3' |
| ) |
| hdparm_rc=(0 0 0) |
| smartctl_pwr_count=(12 12 13) |
| |
| run_test |
| check_test 6 disk_upgraded 0 $? |
| echo ATA PASS 6 |
| |
| # Test 7: Kingston reformat |
| prepare_test |
| hdparm_files=( |
| 'KINGSTON_RBU_SUS151S364GD-S9FM01.7' |
| 'PS3109S9' |
| 'PS3109S9' |
| 'KINGSTON_RBU_SUS151S364GD-S9FM02.3' |
| 'KINGSTON_RBU_SUS151S364GD-S9FM02.3' |
| ) |
| hdparm_rc=(0 0 0 0 0) |
| samus_ata1_power_cycle() { |
| echo "samus power cycle: $1" |
| } |
| |
| run_test |
| check_test 7 disk_reformatted 0 $? |
| echo ATA PASS 7 |
| |
| rm -rf "${DISK_TEMP}" |