Page MenuHomeFreeBSD

D54695.diff
No OneTemporary

D54695.diff

diff --git a/tests/sys/common/vnet.subr b/tests/sys/common/vnet.subr
--- a/tests/sys/common/vnet.subr
+++ b/tests/sys/common/vnet.subr
@@ -135,3 +135,96 @@
rm created_interfaces.lst
fi
}
+
+#
+# Wait for a process to start
+#
+wait_for_process_usage()
+{
+ echo "Usage: wait_for_process [OPTIONS] <process_name>"
+ echo "Options:"
+ echo " -i SEC Check interval in seconds (default: 1)"
+ echo " -j JAIL Run commands inside jail"
+ echo " -t SEC Timeout in seconds (default: 30)"
+
+ exit 1
+}
+wait_for_process()
+{
+ local process_name=""
+ local timeout="30"
+ local interval="1"
+ local elapsed jflag start_time
+
+ elapsed=0
+ start_time=$(date +%s)
+
+ while getopts "i:j:t:" option; do
+ case "$option" in
+ i)
+ interval="$OPTARG"
+ ;;
+ j)
+ jflag="-j $OPTARG"
+ ;;
+ t)
+ timeout="$OPTARG"
+ ;;
+ *)
+ wait_for_process_usage
+ ;;
+ esac
+ done
+ shift $((OPTIND - 1))
+
+ if [ $# -ne 1 ]; then
+ wait_for_process_usage
+ fi
+
+ process_name="$1"
+
+ case "$interval" in
+ ''|*[!0-9]*)
+ echo "wait_for_process: interval must be a positive integer" >&2
+ exit 1
+ ;;
+ *)
+ if [ "$interval" -le 0 ]; then
+ echo "wait_for_process: interval must be a positive integer" >&2
+ exit 1
+ fi
+ ;;
+ esac
+
+ case "$timeout" in
+ ''|*[!0-9]*)
+ echo "wait_for_process: timeout must be a positive integer" >&2
+ exit 1
+ ;;
+ *)
+ if [ "$timeout" -le 0 ]; then
+ echo "wait_for_process: timeout must be a positive integer" >&2
+ exit 1
+ fi
+ ;;
+ esac
+
+ if [ "$timeout" -lt "$interval" ]; then
+ echo "wait_for_process: timeout must be greater than interval" >&2
+ exit 1
+ fi
+
+ while true; do
+ if pgrep $jflag -fq "$process_name"; then
+ return
+ fi
+
+ elapsed=$(( $(date +%s) - start_time ))
+ if [ $elapsed -ge "$timeout" ]; then
+ echo "wait_for_process: timeout waiting for process '$process_name'" >&2
+ exit 1
+ fi
+
+ sleep "$interval"
+ done
+}
diff --git a/tests/sys/netpfil/pf/pflog.sh b/tests/sys/netpfil/pf/pflog.sh
--- a/tests/sys/netpfil/pf/pflog.sh
+++ b/tests/sys/netpfil/pf/pflog.sh
@@ -337,7 +337,7 @@
}
atf_test_case "rdr_action" "cleanup"
-rdr_head()
+rdr_action_head()
{
atf_set descr 'Ensure that NAT rule actions are logged correctly'
atf_set require.user root
@@ -375,15 +375,13 @@
"block quick inet6" \
"pass in log"
- jexec ${j}gw tcpdump -n -e -ttt --immediate-mode -l -U -i pflog0 >> ${PWD}/pflog.txt &
- sleep 1 # Wait for tcpdump to start
+ jexec ${j}gw tcpdump -n -e -ttt --immediate-mode -l -U -i pflog0 >> pflog.txt &
+ # Wait for tcpdump to start
+ wait_for_process -j ${j}gw tcpdump
# send a SYN to catch in the log
jexec ${j}srv nc -N -w 0 198.51.100.2 1234
- echo "Log"
- cat ${PWD}/pflog.txt
-
# log line generated for rdr hit (pre-NAT)
atf_check -o match:".*.*rule 0/0\(match\): rdr in on ${epair_srv}b: 198.51.100.1.[0-9]* > 198.51.100.2.1234: Flags \[S\].*" \
cat pflog.txt

File Metadata

Mime Type
text/plain
Expires
Thu, Jan 15, 5:02 AM (3 h, 15 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27643403
Default Alt Text
D54695.diff (2 KB)

Event Timeline