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: David Ahern <dsahern@kernel.org> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
378f082eaf
commit
9d0b4ad82d
|
@ -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
|
||||
run_one "$DIR" "$TEST" "$test_num"
|
||||
if [ -n "$RUN_IN_NETNS" ]; then
|
||||
run_in_netns &
|
||||
else
|
||||
run_one "$DIR" "$TEST" "$test_num"
|
||||
fi
|
||||
done
|
||||
|
||||
wait
|
||||
}
|
||||
|
|
|
@ -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 ;;
|
||||
|
|
Loading…
Reference in New Issue