Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 134 additions & 0 deletions Runner/config/pkg_command_map.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# qcom-linux-testkit command-to-package map
#
# Format:
# os-id:command=package package2 ...
# provider:command=package package2 ...
# os-id:TESTNAME:command=package package2 ...
# provider:TESTNAME:command=package package2 ...
#
# Lookup order:
# 1. os-id:TESTNAME:command
# 2. provider:TESTNAME:command
# 3. os-id:command
# 4. provider:command
#
# The right-hand side is a required package set.
# All packages listed on the same line are installed when that exact
# dependency command is missing.
#
# Use TESTNAME-scoped mappings for large feature stacks so only that test
# installs those packages.
#
# The provider installs package names through the active package manager.
# It does not scrape raw package pool directories.
#
# For apt:
# - Internal repositories should be provided through *.sources files.
# - Public repositories can use the target's existing apt sources.
# - Local package locations should be exposed as a local apt repository
# through a *.sources file under:
#
# /opt/qcom-testkit/metadata/*.sources
#
# Apt selects the latest candidate version from repository metadata.
# Do not encode versions here unless strict pinning is required.
#
# Do not assume command name equals package name.

apt:modetest=libdrm-tests
apt:kmscube=kmscube
apt:glmark2=glmark2
apt:v4l2-ctl=v4l-utils
apt:media-ctl=v4l-utils
apt:yavta=yavta
apt:jq=jq
apt:wget=wget
apt:curl=curl
apt:tar=tar
apt:unzip=unzip
apt:stress-ng=stress-ng
apt:iperf3=iperf3
apt:bluetoothctl=bluez
apt:gst-launch-1.0=gstreamer1.0-tools
apt:gst-inspect-1.0=gstreamer1.0-tools
apt:efivar=efivar

# ---------------------------------------------------------------------------
# Common rpm provider mappings.
# Applies to Yocto+dNF/RPM, Red Hat, CentOS, Fedora, etc.
# ---------------------------------------------------------------------------

rpm:modetest=libdrm-tests
rpm:kmscube=kmscube
rpm:glmark2=glmark2
rpm:v4l2-ctl=v4l-utils
rpm:media-ctl=v4l-utils
rpm:yavta=yavta
rpm:jq=jq
rpm:wget=wget
rpm:curl=curl
rpm:tar=tar
rpm:unzip=unzip
rpm:stress-ng=stress-ng
rpm:iperf3=iperf3
rpm:bluetoothctl=bluez
rpm:gst-launch-1.0=gstreamer1.0-tools
rpm:gst-inspect-1.0=gstreamer1.0-tools
rpm:efivar=efivar

# ---------------------------------------------------------------------------
# Common opkg provider mappings.
# Override per distro if package names differ.
# ---------------------------------------------------------------------------

opkg:modetest=libdrm-tests
opkg:kmscube=kmscube
opkg:glmark2=glmark2
opkg:v4l2-ctl=v4l-utils
opkg:media-ctl=v4l-utils
opkg:yavta=yavta
opkg:jq=jq
opkg:wget=wget
opkg:curl=curl
opkg:tar=tar
opkg:unzip=unzip
opkg:stress-ng=stress-ng
opkg:iperf3=iperf3
opkg:bluetoothctl=bluez5
opkg:gst-launch-1.0=gstreamer1.0
opkg:gst-inspect-1.0=gstreamer1.0
opkg:efivar=efivar

# ---------------------------------------------------------------------------
# Qualcomm sensors test-specific package set.
#
# These mappings are TESTNAME-scoped, so sensor packages are installed only
# when the sensor test runs and check_dependencies() checks sns_test.
#
# Update TESTNAME/command if the actual sensor test uses a different
# TESTNAME or dependency binary.
# ---------------------------------------------------------------------------

apt:Sensors_Validation:sns_test=qcom-sensors-api qcom-sensors-core qcom-sensors-registry qcom-sensors-services qcom-sensors-test-core qcom-sensors-test-apps
rpm:Sensors_Validation:sns_test=qcom-sensors-api qcom-sensors-core qcom-sensors-registry qcom-sensors-services qcom-sensors-test-core qcom-sensors-test-apps
opkg:Sensors_Validation:sns_test=qcom-sensors-api qcom-sensors-core qcom-sensors-registry qcom-sensors-services qcom-sensors-test-core qcom-sensors-test-apps

# If the sensor test requires development/header packages, use the below
# TESTNAME-specific mapping instead of the smaller runtime-only mapping above.
#
# apt:Sensors_Validation:sns_test=qcom-sensors-api qcom-sensors-api-dev qcom-sensors-core qcom-sensors-core-dev qcom-sensors-registry qcom-sensors-services qcom-sensors-test-core qcom-sensors-test-core-dev qcom-sensors-test-apps
# rpm:Sensors_Validation:sns_test=qcom-sensors-api qcom-sensors-api-dev qcom-sensors-core qcom-sensors-core-dev qcom-sensors-registry qcom-sensors-services qcom-sensors-test-core qcom-sensors-test-core-dev qcom-sensors-test-apps
# opkg:Sensors_Validation:sns_test=qcom-sensors-api qcom-sensors-api-dev qcom-sensors-core qcom-sensors-core-dev qcom-sensors-registry qcom-sensors-services qcom-sensors-test-core qcom-sensors-test-core-dev qcom-sensors-test-apps

# ---------------------------------------------------------------------------
# Optional OS-specific overrides can be added below.
#
# OS-specific mappings override provider mappings.
#
# Examples:
# qcom-distro:media-ctl=v4l-utils
# qcom-distro:Video_V4L2_Runner:yavta=qcom-yavta
# debian:modetest=libdrm-tests
# ubuntu:modetest=libdrm-tests
# centos:modetest=libdrm-tests
# ---------------------------------------------------------------------------
45 changes: 45 additions & 0 deletions Runner/config/pkg_provider.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# qcom-linux-testkit package provider configuration
#
# Repo-owned package recovery policy.
#
# This file controls whether check_dependencies() is allowed to recover
# missing commands by installing mapped packages through the active package
# manager.
#
# Package names are resolved from:
#
# Runner/config/pkg_command_map.conf
#
# Supported providers:
# auto
# apt
# rpm
# opkg
# check
#
# auto detects:
# apt-get + dpkg-query -> apt
# dnf/yum + rpm -> rpm
# opkg -> opkg
# none -> check

provider=auto

# 0 = missing dependency -> SKIP as before
# 1 = try package-provider recovery before SKIP
check_dependencies_recover=1

# 0 = check only
# 1 = install missing mapped packages
auto_install=1

# Command-to-package map, relative to Runner/
package_map=config/pkg_command_map.conf

# 0 = do not mutate package versions
# 1 = apt upgrade / dnf upgrade / yum upgrade before install
package_upgrade=0

# 0 = normal logs
# 1 = verbose provider debug logs
debug=0
39 changes: 29 additions & 10 deletions Runner/utils/functestlib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -147,33 +147,52 @@ check_dependencies() {
# shellcheck disable=SC2086
set -- $1
fi

missing=0
missing_cmds=""


if [ -n "${TOOLS:-}" ] && [ -f "$TOOLS/lib_pkg_provider.sh" ]; then
# shellcheck disable=SC1091
. "$TOOLS/lib_pkg_provider.sh"
fi

for cmd in "$@"; do
[ -n "$cmd" ] || continue
if ! command -v "$cmd" >/dev/null 2>&1; then
log_warn "Required command '$cmd' not found in PATH."
missing=1
missing_cmds="$missing_cmds $cmd"

if command -v "$cmd" >/dev/null 2>&1; then
continue
fi

if command -v pkg_check_dependencies_recover_enabled >/dev/null 2>&1; then
if pkg_check_dependencies_recover_enabled; then
if pkg_ensure_command "$cmd"; then
if command -v "$cmd" >/dev/null 2>&1; then
continue
fi
fi
fi
fi

log_warn "Required command '$cmd' not found in PATH."
missing=1
missing_cmds="$missing_cmds $cmd"
done

if [ "$missing" -ne 0 ]; then
testname="${TESTNAME:-UnknownTest}"
log_skip "$testname SKIP missing dependencies$missing_cmds"
if [ -n "${TESTNAME:-}" ]; then
echo "$TESTNAME SKIP" > "./$TESTNAME.res" 2>/dev/null || true
fi

# Default: exit like today. Allow opt-out for callers that want a return code.
# Preserve existing escape hatch for callers that expect return code.
if [ "${CHECK_DEPS_NO_EXIT:-0}" = "1" ]; then
return 1
fi

exit 0
fi

return 0
}

Expand Down
Loading
Loading