Skip to content
Merged
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
87 changes: 75 additions & 12 deletions Runner/suites/Connectivity/WiFi/WiFi_Dynamic_IP/run.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#!/bin/sh

# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
# SPDX-License-Identifier: BSD-3-Clause-Clear

Expand Down Expand Up @@ -33,42 +32,106 @@ TESTNAME="WiFi_Dynamic_IP"
test_path=$(find_test_case_by_name "$TESTNAME")
cd "$test_path" || exit 1

# ---------------- CLI (SSID/PASSWORD) ----------------
SSID=""
PASSWORD=""

while [ $# -gt 0 ]; do
case "$1" in
--ssid)
shift
if [ -n "${1:-}" ]; then
SSID="$1"
fi
;;
--password)
shift
if [ -n "${1:-}" ]; then
PASSWORD="$1"
fi
;;
--help|-h)
echo "Usage: $0 [--ssid SSID] [--password PASS]"
exit 0
;;
*)
log_warn "Unknown argument: $1"
;;
esac
shift
done

log_info "-------------------------------------------------------------"
log_info "------------------- Starting $TESTNAME Test -----------------"
log_info "Host: $(hostname 2>/dev/null || printf 'unknown')"
log_info "Kernel: $(uname -r 2>/dev/null || printf 'unknown')"
log_info "Date: $(date -u 2>/dev/null || printf 'unknown')"

# Credential extraction
creds=$(get_wifi_credentials "$1" "$2") || log_skip_exit "$TESTNAME" "WiFi: SSID and/or password missing. Skipping test." wifi_cleanup ""
creds=$(get_wifi_credentials "$SSID" "$PASSWORD") || \
log_skip_exit "$TESTNAME" "WiFi: SSID and/or password missing. Skipping test." wifi_cleanup ""

SSID=$(echo "$creds" | awk '{print $1}')
PASSWORD=$(echo "$creds" | awk '{print $2}')

log_info "Using SSID='$SSID' and PASSWORD='[hidden]'"

check_dependencies iw ping

# If not a kernel-only/minimal build, systemd is checked, else skipped automatically
check_systemd_services systemd-networkd.service || log_fail_exit "$TESTNAME" "Network services check failed" wifi_cleanup ""
log_info "Checking network service: systemd-networkd.service"
check_systemd_services systemd-networkd.service || \
log_fail_exit "$TESTNAME" "Network services check failed" wifi_cleanup ""

WIFI_IFACE=$(get_wifi_interface) || \
log_fail_exit "$TESTNAME" "No WiFi interface found" wifi_cleanup ""

WIFI_IFACE=$(get_wifi_interface) || log_fail_exit "$TESTNAME" "No WiFi interface found" wifi_cleanup ""
log_info "Using WiFi interface: $WIFI_IFACE"

# Prepare a ping log file for command output (appended across retries)
PING_LOG="./wifi_ping_${WIFI_IFACE}.log"
: > "$PING_LOG"
log_info "Ping output will be logged to: $PING_LOG"

# nmcli with retry
log_info "Attempting connection via nmcli…"
if wifi_connect_nmcli "$WIFI_IFACE" "$SSID" "$PASSWORD"; then
IP=$(wifi_get_ip "$WIFI_IFACE")
[ -z "$IP" ] && log_fail_exit "$TESTNAME" "No IP after nmcli" wifi_cleanup "$WIFI_IFACE"
if retry_command "ping -I \"$WIFI_IFACE\" -c 3 -W 2 8.8.8.8 >/dev/null 2>&1" 3 3; then
log_pass_exit "$TESTNAME" "Internet connectivity verified via ping" wifi_cleanup "$WIFI_IFACE"

if [ -z "$IP" ]; then
log_fail_exit "$TESTNAME" "No IP after nmcli" wifi_cleanup "$WIFI_IFACE"
fi

log_info "Acquired IP via nmcli: $IP"

PING_CMD="ping -I \"$WIFI_IFACE\" -c 3 -W 2 8.8.8.8 2>&1 | tee -a \"$PING_LOG\""
log_info "Connectivity check command: $PING_CMD"

if retry_command "$PING_CMD" 3 3; then
log_pass_exit "$TESTNAME" "Internet connectivity verified via ping (iface=$WIFI_IFACE ip=$IP)" wifi_cleanup "$WIFI_IFACE"
else
log_fail_exit "$TESTNAME" "Ping test failed after nmcli connection" wifi_cleanup "$WIFI_IFACE"
log_fail_exit "$TESTNAME" "Ping test failed after nmcli connection (iface=$WIFI_IFACE ip=$IP). See $PING_LOG" wifi_cleanup "$WIFI_IFACE"
fi
fi

# wpa_supplicant+udhcpc with retry
log_info "Attempting connection via wpa_supplicant + udhcpc…"
if wifi_connect_wpa_supplicant "$WIFI_IFACE" "$SSID" "$PASSWORD"; then
IP=$(wifi_get_ip "$WIFI_IFACE")
[ -z "$IP" ] && log_fail_exit "$TESTNAME" "No IP after wpa_supplicant" wifi_cleanup "$WIFI_IFACE"
if retry_command "ping -I \"$WIFI_IFACE\" -c 3 -W 2 8.8.8.8 >/dev/null 2>&1" 3 3; then
log_pass_exit "$TESTNAME" "Internet connectivity verified via ping" wifi_cleanup "$WIFI_IFACE"

if [ -z "$IP" ]; then
log_fail_exit "$TESTNAME" "No IP after wpa_supplicant" wifi_cleanup "$WIFI_IFACE"
fi

log_info "Acquired IP via wpa_supplicant: $IP"

PING_CMD="ping -I \"$WIFI_IFACE\" -c 3 -W 2 8.8.8.8 2>&1 | tee -a \"$PING_LOG\""
log_info "Connectivity check command: $PING_CMD"

if retry_command "$PING_CMD" 3 3; then
log_pass_exit "$TESTNAME" "Internet connectivity verified via ping (iface=$WIFI_IFACE ip=$IP)" wifi_cleanup "$WIFI_IFACE"
else
log_fail_exit "$TESTNAME" "Ping test failed after wpa_supplicant connection" wifi_cleanup "$WIFI_IFACE"
log_fail_exit "$TESTNAME" "Ping test failed after wpa_supplicant connection (iface=$WIFI_IFACE ip=$IP). See $PING_LOG" wifi_cleanup "$WIFI_IFACE"
fi
fi

Expand Down
53 changes: 43 additions & 10 deletions Runner/suites/Connectivity/WiFi/WiFi_Manual_IP/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,32 +29,65 @@ fi
. "$TOOLS/functestlib.sh"

TESTNAME="WiFi_Manual_IP"
test_path=$(find_test_case_by_name "$TESTNAME")
test_path="$(find_test_case_by_name "$TESTNAME")"
cd "$test_path" || exit 1

log_info "--------------------------------------------------------------------------"
log_info "-------------------Starting $TESTNAME Testcase----------------------------"
log_info "=== Test Initialization ==="

# ---------------- CLI (SSID/PASSWORD) ----------------
SSID=""
PASSWORD=""

while [ $# -gt 0 ]; do
case "$1" in
--ssid)
shift
if [ -n "${1:-}" ]; then
SSID="$1"
fi
;;
--password)
shift
if [ -n "${1:-}" ]; then
PASSWORD="$1"
fi
;;
--help|-h)
echo "Usage: $0 [--ssid SSID] [--password PASS]"
exit 0
;;
*)
log_warn "Unknown argument: $1"
;;
esac
shift
done

# Trap to always restore udhcpc script
trap 'restore_udhcpc_script' EXIT

# Credential extraction (from arguments, env, or ssid_list.txt)
if ! CRED=$(get_wifi_credentials "$1" "$2") || [ -z "$CRED" ]; then
# Credential extraction (from CLI, env, or ssid_list.txt via helper)
if ! CRED="$(get_wifi_credentials "$SSID" "$PASSWORD")" || [ -z "$CRED" ]; then
log_skip_exit "$TESTNAME" "WiFi: SSID and/or password missing. Skipping test."
fi

SSID=$(echo "$CRED" | awk '{print $1}')
PASSWORD=$(echo "$CRED" | awk '{print $2}')
SSID="$(echo "$CRED" | awk '{print $1}')"
PASSWORD="$(echo "$CRED" | awk '{print $2}')"
log_info "Using SSID='$SSID' and PASSWORD='[hidden]'"

check_dependencies iw wpa_supplicant udhcpc ip

WIFI_IF=$(get_wifi_interface)
[ -z "$WIFI_IF" ] && log_fail_exit "$TESTNAME" "No WiFi interface detected."
WIFI_IF="$(get_wifi_interface)"
if [ -z "$WIFI_IF" ]; then
log_fail_exit "$TESTNAME" "No WiFi interface detected."
fi

UDHCPC_SCRIPT=$(ensure_udhcpc_script)
[ ! -x "$UDHCPC_SCRIPT" ] && log_fail_exit "$TESTNAME" "Failed to create udhcpc script."
UDHCPC_SCRIPT="$(ensure_udhcpc_script)"
if [ ! -x "$UDHCPC_SCRIPT" ]; then
log_fail_exit "$TESTNAME" "Failed to create udhcpc script."
fi

wifi_cleanup() {
killall -q wpa_supplicant 2>/dev/null
Expand All @@ -76,7 +109,7 @@ sleep 4
udhcpc -i "$WIFI_IF" -s "$UDHCPC_SCRIPT" -n -q &
sleep 8

IP=$(ip addr show "$WIFI_IF" | awk '/inet / {print $2}' | cut -d/ -f1)
IP="$(ip addr show "$WIFI_IF" | awk '/inet / {print $2}' | cut -d/ -f1)"
if [ -n "$IP" ]; then
log_info "WiFi got IP: $IP (manual DHCP via udhcpc)"
if ping -I "$WIFI_IF" -c 3 -W 2 8.8.8.8 >/dev/null 2>&1; then
Expand Down
13 changes: 13 additions & 0 deletions Runner/utils/functestlib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1264,6 +1264,19 @@ dt_has_remoteproc_fw() {
return 1
}

# Find the remoteproc path for a given firmware substring (e.g., "adsp", "cdsp", "gdsp").
get_remoteproc_path_by_firmware() {
name="$1"
idx path
# List all remoteproc firmware nodes, match name, and return the remoteproc path
idx=$(cat /sys/class/remoteproc/remoteproc*/firmware 2>/dev/null | grep -n "$name" | cut -d: -f1 | head -n1)
[ -z "$idx" ] && return 1
idx=$((idx - 1))
path="/sys/class/remoteproc/remoteproc${idx}"
[ -d "$path" ] && echo "$path" && return 0
return 1
}

# Get remoteproc state
get_remoteproc_state() {
rp="$1"
Expand Down
Loading