xref: /aosp_15_r20/external/flashrom/util/ubertest/cmd.sh (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1*0d6140beSAndroid Build Coastguard Worker#!/bin/sh
2*0d6140beSAndroid Build Coastguard Worker#
3*0d6140beSAndroid Build Coastguard Worker# This file is part of the flashrom project. It is derived from
4*0d6140beSAndroid Build Coastguard Worker# board_status.sh in coreboot.
5*0d6140beSAndroid Build Coastguard Worker#
6*0d6140beSAndroid Build Coastguard Worker# Copyright (C) 2016 Google Inc.
7*0d6140beSAndroid Build Coastguard Worker# Copyright (C) 2014 Sage Electronic Engineering, LLC.
8*0d6140beSAndroid Build Coastguard Worker
9*0d6140beSAndroid Build Coastguard WorkerUSE_CUSTOM_HOOKS=0
10*0d6140beSAndroid Build Coastguard Workerif [ -n "$CUSTOM_HOOKS_FILENAME" ]; then
11*0d6140beSAndroid Build Coastguard Worker	USE_CUSTOM_HOOKS=1
12*0d6140beSAndroid Build Coastguard Worker	. "$CUSTOM_HOOKS_FILENAME"
13*0d6140beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
14*0d6140beSAndroid Build Coastguard Worker		echo "Failed to source custom hooks file."
15*0d6140beSAndroid Build Coastguard Worker		exit $EXIT_FAILURE
16*0d6140beSAndroid Build Coastguard Worker	fi
17*0d6140beSAndroid Build Coastguard Worker
18*0d6140beSAndroid Build Coastguard Worker	if ! custom_hook_sanity_check; then
19*0d6140beSAndroid Build Coastguard Worker		echo "Failed to run sanity check for custom hooks."
20*0d6140beSAndroid Build Coastguard Worker		exit $EXIT_FAILURE
21*0d6140beSAndroid Build Coastguard Worker	fi
22*0d6140beSAndroid Build Coastguard Workerfi
23*0d6140beSAndroid Build Coastguard Worker
24*0d6140beSAndroid Build Coastguard Worker# test a command
25*0d6140beSAndroid Build Coastguard Worker#
26*0d6140beSAndroid Build Coastguard Worker# $1: 0 ($LOCAL) to run command locally,
27*0d6140beSAndroid Build Coastguard Worker#     1 ($REMOTE) to run remotely if remote host defined
28*0d6140beSAndroid Build Coastguard Worker# $2: command to test
29*0d6140beSAndroid Build Coastguard Worker# $3: 0 ($FATAL) Exit with an error if the command fails
30*0d6140beSAndroid Build Coastguard Worker#     1 ($NONFATAL) Don't exit on command test failure
31*0d6140beSAndroid Build Coastguard Workertest_cmd()
32*0d6140beSAndroid Build Coastguard Worker{
33*0d6140beSAndroid Build Coastguard Worker	local rc
34*0d6140beSAndroid Build Coastguard Worker	local cmd__="$(echo $2 | cut -d ' ' -f -1)"
35*0d6140beSAndroid Build Coastguard Worker	local args="$(echo $2 | cut -d ' ' -f 2-)"
36*0d6140beSAndroid Build Coastguard Worker
37*0d6140beSAndroid Build Coastguard Worker	if [ -e "$cmd__" ]; then
38*0d6140beSAndroid Build Coastguard Worker		return
39*0d6140beSAndroid Build Coastguard Worker	fi
40*0d6140beSAndroid Build Coastguard Worker
41*0d6140beSAndroid Build Coastguard Worker	if [ "$1" -eq "$REMOTE" ] && [ -n "$REMOTE_HOST" ]; then
42*0d6140beSAndroid Build Coastguard Worker		ssh $REMOTE_PORT_OPTION root@${REMOTE_HOST} command -v "$cmd__" $args > /dev/null 2>&1
43*0d6140beSAndroid Build Coastguard Worker		rc=$?
44*0d6140beSAndroid Build Coastguard Worker	else
45*0d6140beSAndroid Build Coastguard Worker		command -v "$cmd__" $args >/dev/null 2>&1
46*0d6140beSAndroid Build Coastguard Worker		rc=$?
47*0d6140beSAndroid Build Coastguard Worker	fi
48*0d6140beSAndroid Build Coastguard Worker
49*0d6140beSAndroid Build Coastguard Worker	if [ $rc -eq 0 ]; then
50*0d6140beSAndroid Build Coastguard Worker		return 0
51*0d6140beSAndroid Build Coastguard Worker	fi
52*0d6140beSAndroid Build Coastguard Worker
53*0d6140beSAndroid Build Coastguard Worker	if [ "$3" = "1" ]; then
54*0d6140beSAndroid Build Coastguard Worker		return 1
55*0d6140beSAndroid Build Coastguard Worker	fi
56*0d6140beSAndroid Build Coastguard Worker
57*0d6140beSAndroid Build Coastguard Worker	echo "$2 not found"
58*0d6140beSAndroid Build Coastguard Worker	exit $EXIT_FAILURE
59*0d6140beSAndroid Build Coastguard Worker}
60*0d6140beSAndroid Build Coastguard Worker
61*0d6140beSAndroid Build Coastguard Worker# Same args as cmd() but with the addition of $4 which determines if the
62*0d6140beSAndroid Build Coastguard Worker# command should be totally silenced or not.
63*0d6140beSAndroid Build Coastguard Worker_cmd()
64*0d6140beSAndroid Build Coastguard Worker{
65*0d6140beSAndroid Build Coastguard Worker	local silent=$4
66*0d6140beSAndroid Build Coastguard Worker	local rc=0
67*0d6140beSAndroid Build Coastguard Worker
68*0d6140beSAndroid Build Coastguard Worker	if [ -n "$3" ]; then
69*0d6140beSAndroid Build Coastguard Worker		pipe_location="${3}"
70*0d6140beSAndroid Build Coastguard Worker	else
71*0d6140beSAndroid Build Coastguard Worker		pipe_location="/dev/null"
72*0d6140beSAndroid Build Coastguard Worker	fi
73*0d6140beSAndroid Build Coastguard Worker
74*0d6140beSAndroid Build Coastguard Worker	if [ $1 -eq $REMOTE ] && [ -n "$REMOTE_HOST" ]; then
75*0d6140beSAndroid Build Coastguard Worker		if [ $silent -eq 0 ]; then
76*0d6140beSAndroid Build Coastguard Worker			ssh $REMOTE_PORT_OPTION "root@${REMOTE_HOST}" "$2" > "$pipe_location" 2>/dev/null
77*0d6140beSAndroid Build Coastguard Worker			rc=$?
78*0d6140beSAndroid Build Coastguard Worker		else
79*0d6140beSAndroid Build Coastguard Worker			ssh $REMOTE_PORT_OPTION "root@${REMOTE_HOST}" "$2" >/dev/null 2>&1
80*0d6140beSAndroid Build Coastguard Worker			rc=$?
81*0d6140beSAndroid Build Coastguard Worker		fi
82*0d6140beSAndroid Build Coastguard Worker	else
83*0d6140beSAndroid Build Coastguard Worker		if [ $USE_CUSTOM_HOOKS -eq 1 ]; then
84*0d6140beSAndroid Build Coastguard Worker			preflash_hook $1 "$2" "$3" $4
85*0d6140beSAndroid Build Coastguard Worker		fi
86*0d6140beSAndroid Build Coastguard Worker
87*0d6140beSAndroid Build Coastguard Worker		if [ $silent -eq 0 ]; then
88*0d6140beSAndroid Build Coastguard Worker			$SUDO_CMD $2 > "$pipe_location" 2>/dev/null
89*0d6140beSAndroid Build Coastguard Worker			rc=$?
90*0d6140beSAndroid Build Coastguard Worker		else
91*0d6140beSAndroid Build Coastguard Worker			$SUDO_CMD $2 >/dev/null 2>&1
92*0d6140beSAndroid Build Coastguard Worker			rc=$?
93*0d6140beSAndroid Build Coastguard Worker		fi
94*0d6140beSAndroid Build Coastguard Worker
95*0d6140beSAndroid Build Coastguard Worker		if [ $USE_CUSTOM_HOOKS -eq 1 ]; then
96*0d6140beSAndroid Build Coastguard Worker			postflash_hook $1 "$2" "$3" $4
97*0d6140beSAndroid Build Coastguard Worker		fi
98*0d6140beSAndroid Build Coastguard Worker	fi
99*0d6140beSAndroid Build Coastguard Worker
100*0d6140beSAndroid Build Coastguard Worker	return $rc
101*0d6140beSAndroid Build Coastguard Worker}
102*0d6140beSAndroid Build Coastguard Worker
103*0d6140beSAndroid Build Coastguard Worker# run a command
104*0d6140beSAndroid Build Coastguard Worker#
105*0d6140beSAndroid Build Coastguard Worker# $1: 0 ($LOCAL) to run command locally,
106*0d6140beSAndroid Build Coastguard Worker#     1 ($REMOTE) to run remotely if remote host defined
107*0d6140beSAndroid Build Coastguard Worker# $2: command
108*0d6140beSAndroid Build Coastguard Worker# $3: filename to direct output of command into
109*0d6140beSAndroid Build Coastguard Workercmd()
110*0d6140beSAndroid Build Coastguard Worker{
111*0d6140beSAndroid Build Coastguard Worker	_cmd $1 "$2" "$3" 0
112*0d6140beSAndroid Build Coastguard Worker
113*0d6140beSAndroid Build Coastguard Worker	if [ $? -eq 0 ]; then
114*0d6140beSAndroid Build Coastguard Worker		return
115*0d6140beSAndroid Build Coastguard Worker	fi
116*0d6140beSAndroid Build Coastguard Worker
117*0d6140beSAndroid Build Coastguard Worker	echo "Failed to run \"$2\", aborting"
118*0d6140beSAndroid Build Coastguard Worker	rm -f "$3"	# don't leave an empty file
119*0d6140beSAndroid Build Coastguard Worker	return $EXIT_FAILURE
120*0d6140beSAndroid Build Coastguard Worker}
121*0d6140beSAndroid Build Coastguard Worker
122*0d6140beSAndroid Build Coastguard Worker# run a command silently
123*0d6140beSAndroid Build Coastguard Worker#
124*0d6140beSAndroid Build Coastguard Worker# $1: 0 ($LOCAL) to run command locally,
125*0d6140beSAndroid Build Coastguard Worker#     1 ($REMOTE) to run remotely if remote host defined
126*0d6140beSAndroid Build Coastguard Worker# $2: command
127*0d6140beSAndroid Build Coastguard Workerscmd()
128*0d6140beSAndroid Build Coastguard Worker{
129*0d6140beSAndroid Build Coastguard Worker	_cmd $1 "$2" "" 1
130*0d6140beSAndroid Build Coastguard Worker
131*0d6140beSAndroid Build Coastguard Worker	if [ $? -eq 0 ]; then
132*0d6140beSAndroid Build Coastguard Worker		return
133*0d6140beSAndroid Build Coastguard Worker	fi
134*0d6140beSAndroid Build Coastguard Worker
135*0d6140beSAndroid Build Coastguard Worker	echo "Failed to run \"$2\", aborting"
136*0d6140beSAndroid Build Coastguard Worker	return $EXIT_FAILURE
137*0d6140beSAndroid Build Coastguard Worker}
138