blob: 32d25a764f16e633a4f83a99a331d6ac53b044ac [file] [log] [blame]
Milosz Wasilewski7a39d552021-07-29 16:05:01 +01001#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-only
3# Copyright (C) 2021 Foundries.io Ltd.
4
5# shellcheck disable=SC1091
Milosz Wasilewskic5c3faa2023-10-30 14:39:15 +00006. ../../lib/sh-test-lib
Milosz Wasilewski7a39d552021-07-29 16:05:01 +01007OUTPUT="$(pwd)/output"
8RESULT_FILE="${OUTPUT}/result.txt"
9export RESULT_FILE
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010010TYPE="kernel"
11UBOOT_VAR_TOOL=fw_printenv
12export UBOOT_VAR_TOOL
13UBOOT_VAR_SET_TOOL=fw_setenv
14export UBOOT_VAR_SET_TOOL
Milosz Wasilewskie7a27462023-11-16 13:18:11 +000015DEBUG="false"
Milosz Wasilewski7a39d552021-07-29 16:05:01 +010016
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010017usage() {
18 echo "\
Milosz Wasilewskie7a27462023-11-16 13:18:11 +000019 Usage: $0 [-type <kernel|uboot>] [-u <u-boot var read>] [-s <u-boot var set>] [-d <true|false>]
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010020
21 -t <kernel|uboot>
22 This determines type of corruption test
23 performed:
24 kernel: corrupt OTA updated kernel binary
25 uboot: corrupt OTA updated u-boot binary
26 -u <u-boot variable read tool>
27 Set the name of the tool to read u-boot variables
28 On the unsecured systems it will usually be
29 fw_printenv. On secured systems it might be
30 fiovb_printenv
31 -s <u-boot variable set tool>
32 Set the name of the tool to set u-boot variables
33 On the unsecured systems it will usually be
34 fw_setenv. On secured systems it might be
35 fiovb_setenv
Milosz Wasilewskie7a27462023-11-16 13:18:11 +000036 -d <true|false> Enables more debug messages. Default: false
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010037 "
38}
39
Milosz Wasilewskie7a27462023-11-16 13:18:11 +000040while getopts "t:u:s:d:h" opts; do
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010041 case "$opts" in
42 t) TYPE="${OPTARG}";;
43 u) UBOOT_VAR_TOOL="${OPTARG}";;
44 s) UBOOT_VAR_SET_TOOL="${OPTARG}";;
Milosz Wasilewskie7a27462023-11-16 13:18:11 +000045 d) DEBUG="${OPTARG}";;
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010046 h|*) usage ; exit 1 ;;
47 esac
48done
Milosz Wasilewski7a39d552021-07-29 16:05:01 +010049
50# the script works only on builds with aktualizr-lite
51# and lmp-device-auto-register
52
53! check_root && error_msg "You need to be root to run this script."
54create_out_dir "${OUTPUT}"
55
Milosz Wasilewski68e43d12022-07-19 10:34:18 +010056SECONDARY_BOOT_VAR_NAME="fiovb.is_secondary_boot"
57if [ "${UBOOT_VAR_TOOL}" != "fw_printenv" ]; then
58 SECONDARY_BOOT_VAR_NAME="is_secondary_boot"
59fi
60
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010061ref_bootcount_after_reboot=4
62ref_rollback_after_reboot=1
63ref_bootupgrade_available_after_reboot=0
64ref_upgrade_available_after_reboot=0
65ref_fiovb_is_secondary_boot_after_reboot=0
66
Milosz Wasilewski7a39d552021-07-29 16:05:01 +010067# check u-boot variables
68bootcount_after_reboot=$(uboot_variable_value bootcount)
69echo "Bootcount: ${bootcount_after_reboot}"
70# bootcount should be 4 despite the fact there was no boot failures in u-boot
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010071compare_test_value "bootcount_after_reboot" "${ref_bootcount_after_reboot}" "${bootcount_after_reboot}"
Milosz Wasilewski7a39d552021-07-29 16:05:01 +010072rollback_after_reboot=$(uboot_variable_value rollback)
73echo "Rollback: ${rollback_after_reboot}"
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010074compare_test_value "rollback_after_reboot" "${ref_rollback_after_reboot}" "${rollback_after_reboot}"
Milosz Wasilewski7a39d552021-07-29 16:05:01 +010075upgrade_available_after_reboot=$(uboot_variable_value upgrade_available)
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010076compare_test_value "upgrade_available_after_reboot" "${ref_upgrade_available_after_reboot}" "${upgrade_available_after_reboot}"
Milosz Wasilewski20f24812022-03-18 16:57:11 +000077if [ -f /usr/lib/firmware/version.txt ]; then
78 . /usr/lib/firmware/version.txt
79 bootupgrade_available_after_reboot=$(uboot_variable_value bootupgrade_available)
80 compare_test_value "bootupgrade_available_after_reboot" "${ref_bootupgrade_available_after_reboot}" "${bootupgrade_available_after_reboot}"
Milosz Wasilewski7a39d552021-07-29 16:05:01 +010081
Milosz Wasilewski20f24812022-03-18 16:57:11 +000082 # shellcheck disable=SC2154
83 ref_bootfirmware_version_after_reboot="${bootfirmware_version}"
84 if [ "${TYPE}" = "uboot" ]; then
85 ref_bootfirmware_version_after_reboot=0
86 fi
87 bootfirmware_version_after_reboot=$(uboot_variable_value bootfirmware_version)
88 # shellcheck disable=SC2154
89 compare_test_value "bootfirmware_version_after_reboot" "${ref_bootfirmware_version_after_reboot}" "${bootfirmware_version_after_reboot}"
Milosz Wasilewski68e43d12022-07-19 10:34:18 +010090 fiovb_is_secondary_boot_after_reboot=$(uboot_variable_value "${SECONDARY_BOOT_VAR_NAME}")
Milosz Wasilewski20f24812022-03-18 16:57:11 +000091 compare_test_value "fiovb_is_secondary_boot_after_reboot" "${ref_fiovb_is_secondary_boot_after_reboot}" "${fiovb_is_secondary_boot_after_reboot}"
92else
93 report_skip "bootupgrade_available_after_reboot"
94 report_skip "bootfirmware_version_after_reboot"
95 report_skip "fiovb_is_secondary_boot_after_reboot"
Milosz Wasilewski5d0c0c02021-09-23 12:26:33 +010096fi
Milosz Wasilewskie7a27462023-11-16 13:18:11 +000097
98if [ "${DEBUG}" = "true" ]; then
99 journalctl --no-pager -u aktualizr-lite
100fi