Commit 9d0b4ad8 authored by Hangbin Liu's avatar Hangbin Liu Committed by David S. Miller
Browse files

kselftest/runner.sh: add netns support



Add a variable RUN_IN_NETNS if the user wants to run all the selected tests
in namespace in parallel. With this, we can save a lot of testing time.

Note that some tests may not fit to run in namespace, e.g.
net/drop_monitor_tests.sh, as the dwdump needs to be run in init ns.

I also added another parameter -p to make all the logs reported separately
instead of mixing them in the stdout or output.log.

Nit: the NUM in run_one is not used, rename it to test_num.

Acked-by: default avatarDavid Ahern <dsahern@kernel.org>
Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 378f082e
Loading
Loading
Loading
Loading
+36 −2
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ export skip_rc=4
export timeout_rc=124
export logfile=/dev/stdout
export per_test_logging=
export RUN_IN_NETNS=

# Defaults for "settings" file fields:
# "timeout" how many seconds to let each test run before running
@@ -47,7 +48,7 @@ run_one()
{
	DIR="$1"
	TEST="$2"
	NUM="$3"
	local test_num="$3"

	BASENAME_TEST=$(basename $TEST)

@@ -141,6 +142,33 @@ run_one()
	fi
}

in_netns()
{
	local name=$1
	ip netns exec $name bash <<-EOF
		BASE_DIR=$BASE_DIR
		source $BASE_DIR/kselftest/runner.sh
		logfile=$logfile
		run_one $DIR $TEST $test_num
	EOF
}

run_in_netns()
{
	local netns=$(mktemp -u ${BASENAME_TEST}-XXXXXX)
	local tmplog="/tmp/$(mktemp -u ${BASENAME_TEST}-XXXXXX)"
	ip netns add $netns
	if [ $? -ne 0 ]; then
		echo "# Warning: Create namespace failed for $BASENAME_TEST"
		echo "not ok $test_num selftests: $DIR: $BASENAME_TEST # Create NS failed"
	fi
	ip -n $netns link set lo up
	in_netns $netns &> $tmplog
	ip netns del $netns &> /dev/null
	cat $tmplog
	rm -f $tmplog
}

run_many()
{
	echo "TAP version 13"
@@ -155,6 +183,12 @@ run_many()
			logfile="/tmp/$BASENAME_TEST"
			cat /dev/null > "$logfile"
		fi
		if [ -n "$RUN_IN_NETNS" ]; then
			run_in_netns &
		else
			run_one "$DIR" "$TEST" "$test_num"
		fi
	done

	wait
}
+9 −1
Original line number Diff line number Diff line
@@ -20,11 +20,13 @@ usage()
{
	cat <<EOF
Usage: $0 [OPTIONS]
  -s | --summary		Print summary with detailed log in output.log
  -s | --summary		Print summary with detailed log in output.log (conflict with -p)
  -p | --per_test_log		Print test log in /tmp with each test name (conflict with -s)
  -t | --test COLLECTION:TEST	Run TEST from COLLECTION
  -c | --collection COLLECTION	Run all tests from COLLECTION
  -l | --list			List the available collection:test entries
  -d | --dry-run		Don't actually run any tests
  -n | --netns			Run each test in namespace
  -h | --help			Show this usage info
  -o | --override-timeout	Number of seconds after which we timeout
EOF
@@ -41,6 +43,9 @@ while true; do
			logfile="$BASE_DIR"/output.log
			cat /dev/null > $logfile
			shift ;;
		-p | --per-test-log)
			per_test_logging=1
			shift ;;
		-t | --test)
			TESTS="$TESTS $2"
			shift 2 ;;
@@ -53,6 +58,9 @@ while true; do
		-d | --dry-run)
			dryrun="echo"
			shift ;;
		-n | --netns)
			RUN_IN_NETNS=1
			shift ;;
		-o | --override-timeout)
			kselftest_override_timeout="$2"
			shift 2 ;;