Skip to content

Commit 4b2be2c

Browse files
committed
utils: lib_common.sh: add common helpers for hw-probe runner
Signed-off-by: Srikanth Muppandam <smuppand@qti.qualcomm.com>
1 parent 7e821eb commit 4b2be2c

1 file changed

Lines changed: 131 additions & 0 deletions

File tree

Runner/utils/lib_common.sh

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
#!/bin/sh
2+
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
3+
# SPDX-License-Identifier: BSD-3-Clause-Clear
4+
# POSIX helpers that defer to functestlib.sh where available.
5+
6+
# --- fallbacks only if functestlib wasn't sourced ---
7+
if ! command -v log_info >/dev/null 2>&1; then
8+
log_info() { printf '[INFO] %s\n' "$*"; }
9+
fi
10+
if ! command -v log_warn >/dev/null 2>&1; then
11+
log_warn() { printf '[WARN] %s\n' "$*" >&2; }
12+
fi
13+
if ! command -v log_error >/dev/null 2>&1; then
14+
log_error() { printf '[ERROR] %s\n' "$*" >&2; }
15+
fi
16+
if ! command -v log_fail >/dev/null 2>&1; then
17+
log_fail() { printf '[FAIL] %s\n' "$*" >&2; }
18+
fi
19+
if ! command -v log_skip >/dev/null 2>&1; then
20+
log_skip() { printf '[SKIP] %s\n' "$*"; }
21+
fi
22+
23+
die() { log_error "$*"; exit 1; }
24+
25+
# --- cmd exists ---
26+
have_cmd() { command -v "$1" >/dev/null 2>&1; }
27+
28+
# --- root / sudo (non-interactive aware) ---
29+
SUDO=""
30+
is_root() { [ "$(id -u 2>/dev/null || echo 1)" -eq 0 ]; }
31+
32+
# Returns:
33+
# 0 => we can escalate non-interactively (sets $SUDO or empty when already root)
34+
# 2 => escalation would PROMPT (caller should SKIP gracefully)
35+
ensure_root_noprompt() {
36+
if is_root; then
37+
SUDO=""
38+
return 0
39+
fi
40+
41+
if have_cmd sudo; then
42+
if sudo -n true >/dev/null 2>&1; then
43+
SUDO="sudo -E"
44+
return 0
45+
fi
46+
if [ -n "${SUDO_ASKPASS:-}" ] && [ -x "${SUDO_ASKPASS:-/nonexistent}" ]; then
47+
if sudo -A -n true >/dev/null 2>&1; then
48+
SUDO="sudo -A -E"
49+
return 0
50+
fi
51+
fi
52+
fi
53+
54+
if have_cmd doas; then
55+
if doas -n true >/dev/null 2>&1; then
56+
SUDO="doas"
57+
return 0
58+
fi
59+
fi
60+
61+
return 2
62+
}
63+
64+
need_root() {
65+
ensure_root_noprompt
66+
rc=$?
67+
if [ "$rc" -eq 0 ]; then
68+
return 0
69+
fi
70+
die "Root privileges required but non-interactive sudo/doas is unavailable (would prompt). Re-run as root or configure passwordless sudo."
71+
}
72+
73+
need_root_or_skip() {
74+
ensure_root_noprompt
75+
rc=$?
76+
if [ "$rc" -eq 0 ]; then
77+
return 0
78+
fi
79+
log_skip "Root required but sudo/doas would prompt (no passwordless method)."
80+
return 2
81+
}
82+
83+
# --- ensure dir ---
84+
ensure_dir() {
85+
d="$1"
86+
if [ -d "$d" ]; then
87+
return 0
88+
fi
89+
mkdir -p "$d" 2>/dev/null && return 0
90+
if need_root_or_skip; then
91+
$SUDO mkdir -p "$d" || return 1
92+
return 0
93+
fi
94+
return 1
95+
}
96+
97+
# --- OS detect (Debian/Ubuntu) ---
98+
detect_os_like() {
99+
if [ -r /etc/os-release ]; then
100+
# shellcheck source=/dev/null
101+
. /etc/os-release
102+
printf '%s\n' "${ID_LIKE:-$ID}"
103+
return 0
104+
fi
105+
printf '%s\n' "unknown"
106+
}
107+
108+
is_debianish() {
109+
like="$(detect_os_like | tr '[:upper:]' '[:lower:]')"
110+
echo "$like" | grep -Eq 'debian|ubuntu'
111+
}
112+
113+
# --- network check: prefer functestlib’s richer checks if present ---
114+
network_is_ok() {
115+
if command -v check_network_status >/dev/null 2>&1; then
116+
check_network_status
117+
return $?
118+
fi
119+
ping -c 1 -W 1 1.1.1.1 >/dev/null 2>&1 || ping -c 1 -W 1 8.8.8.8 >/dev/null 2>&1
120+
}
121+
122+
ensure_network_online() {
123+
if command -v ensure_network_online >/dev/null 2>&1; then
124+
command ensure_network_online
125+
return $?
126+
fi
127+
return 1
128+
}
129+
130+
# --- timestamp helper ---
131+
nowstamp() { date +%Y%m%d%H%M%S 2>/dev/null || printf '%s\n' "now"; }

0 commit comments

Comments
 (0)