[LTP] [PATCH] containers/netns: update netns shell test to new API
Kory Maincent
kory.maincent@bootlin.com
Fri Dec 11 18:20:47 CET 2020
Signed-off-by: Kory Maincent <kory.maincent@bootlin.com>
---
.../kernel/containers/netns/netns_breakns.sh | 60 ++++-----
.../kernel/containers/netns/netns_comm.sh | 95 ++++++--------
.../kernel/containers/netns/netns_helper.sh | 69 +++++-----
.../kernel/containers/netns/netns_sysfs.sh | 118 +++++++-----------
4 files changed, 140 insertions(+), 202 deletions(-)
diff --git a/testcases/kernel/containers/netns/netns_breakns.sh b/testcases/kernel/containers/netns/netns_breakns.sh
index c7aa2c34c..69bed757c 100755
--- a/testcases/kernel/containers/netns/netns_breakns.sh
+++ b/testcases/kernel/containers/netns/netns_breakns.sh
@@ -1,21 +1,8 @@
#!/bin/sh
-#==============================================================================
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) Köry Maincent <kory.maincent@bootlin.com> 2020
# Copyright (c) 2015 Red Hat, Inc.
#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of version 2 the GNU General Public License as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Written by Matus Marhefka <mmarhefk@redhat.com>
-#
#==============================================================================
#
# SYNOPSIS:
@@ -42,32 +29,29 @@
# 2. using ioctl (ifconfig command).
#==============================================================================
-TCID="netns_breakns_$1_$2_$3"
-TST_TOTAL=2
+TST_POS_ARGS=3
+TST_SETUP=do_setup
+TST_TESTFUNC=do_test
. netns_helper.sh
-# SETUP
-netns_setup $1 $2 $3 "192.168.0.2" "192.168.0.3" "fd00::2" "fd00::3"
-tst_resm TINFO "NS interaction: $1 | devices setup: $3"
-
-
-# TEST CASE #1
-$NS_EXEC $NS_HANDLE0 $NS_TYPE ip address add $IP1/$NETMASK dev veth1 2>/dev/null
-if [ $? -ne 0 ]; then
- tst_resm TPASS "controlling device over netlink"
-else
- tst_resm TFAIL "controlling device over netlink"
-fi
+PROG=$1
+IP_VER=$2
+COM_TYPE=$3
+do_setup()
+{
+ netns_setup $PROG $IP_VER $COM_TYPE "192.168.0.2" "192.168.0.3" "fd00::2" "fd00::3"
+ tst_res TINFO "NS interaction: $PROG | devices setup: $COM_TYPE"
+}
-# TEST CASE #2
-tst_require_cmds ifconfig
-$NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig veth1 $IFCONF_IN6_ARG $IP1/$NETMASK 2>/dev/null
-if [ $? -ne 0 ]; then
- tst_resm TPASS "controlling device over ioctl"
-else
- tst_resm TFAIL "controlling device over ioctl"
-fi
+do_test()
+{
+ # TEST CASE #1
+ EXPECT_FAIL $NS_EXEC $NS_HANDLE0 $NS_TYPE ip address add $IP1/$NETMASK dev veth1
+ # TEST CASE #2
+ tst_require_cmds ifconfig
+ EXPECT_FAIL $NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig veth1 $IFCONF_IN6_ARG $IP1/$NETMASK
+}
-tst_exit
+tst_run
diff --git a/testcases/kernel/containers/netns/netns_comm.sh b/testcases/kernel/containers/netns/netns_comm.sh
index 15991e2a6..77b546bbb 100755
--- a/testcases/kernel/containers/netns/netns_comm.sh
+++ b/testcases/kernel/containers/netns/netns_comm.sh
@@ -1,21 +1,8 @@
#!/bin/sh
-#==============================================================================
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) Köry Maincent <kory.maincent@bootlin.com> 2020
# Copyright (c) 2015 Red Hat, Inc.
#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of version 2 the GNU General Public License as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Written by Matus Marhefka <mmarhefk@redhat.com>
-#
#==============================================================================
#
# SYNOPSIS:
@@ -45,54 +32,46 @@
# network namespace
#==============================================================================
-TCID="netns_comm_$1_$2_$3"
-TST_TOTAL=3
+TST_POS_ARGS=3
+TST_SETUP=do_setup
+TST_TESTFUNC=do_test
. netns_helper.sh
-# SETUP
-netns_setup $1 $2 $3 "192.168.0.2" "192.168.0.3" "fd00::2" "fd00::3"
-tst_resm TINFO "NS interaction: $1 | devices setup: $3"
-
-
-# TEST CASE #1
-$NS_EXEC $NS_HANDLE0 $NS_TYPE $tping -q -c2 -I veth0 $IP1 1>/dev/null
-if [ $? -eq 0 ]; then
- tst_resm TPASS "configuration and communication over veth0"
-else
- tst_resm TFAIL "configuration and communication over veth0"
-fi
+PROG=$1
+IP_VER=$2
+COM_TYPE=$3
-# TEST CASE #2
-$NS_EXEC $NS_HANDLE1 $NS_TYPE $tping -q -c2 -I veth1 $IP0 1>/dev/null
-if [ $? -eq 0 ]; then
- tst_resm TPASS "configuration and communication over veth1"
-else
- tst_resm TFAIL "configuration and communication over veth1"
-fi
+do_setup()
+{
+ netns_setup $PROG $IP_VER $COM_TYPE "192.168.0.2" "192.168.0.3" "fd00::2" "fd00::3"
+ tst_res TINFO "NS interaction: $PROG | devices setup: $COM_TYPE"
+}
+do_test()
+{
+ # TEST CASE #1
+ EXPECT_PASS $NS_EXEC $NS_HANDLE0 $NS_TYPE $tping -q -c2 -I veth0 $IP1 1>/dev/null
-# TEST CASE #3
-case "$2" in
-ipv4) IP_LO="127.0.0.1" ;;
-ipv6) IP_LO="::1" ;;
-esac
-case "$3" in
-netlink)
- $NS_EXEC $NS_HANDLE0 $NS_TYPE ip link set dev lo up || \
- tst_brkm TBROK "enabling lo device failed"
- ;;
-ioctl)
- $NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig lo up || \
- tst_brkm TBROK "enabling lo device failed"
- ;;
-esac
-$NS_EXEC $NS_HANDLE0 $NS_TYPE $tping -q -c2 -I lo $IP_LO 1>/dev/null
-if [ $? -eq 0 ]; then
- tst_resm TPASS "configuration and communication over localhost"
-else
- tst_resm TFAIL "configuration and communication over localhost"
-fi
+ # TEST CASE #2
+ EXPECT_PASS $NS_EXEC $NS_HANDLE1 $NS_TYPE $tping -q -c2 -I veth1 $IP0 1>/dev/null
+ # TEST CASE #3
+ case "$IP_VER" in
+ ipv4) ip_lo="127.0.0.1" ;;
+ ipv6) ip_lo="::1" ;;
+ esac
+ case "$COM_TYPE" in
+ netlink)
+ $NS_EXEC $NS_HANDLE0 $NS_TYPE ip link set dev lo up || \
+ tst_brk TBROK "enabling lo device failed"
+ ;;
+ ioctl)
+ $NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig lo up || \
+ tst_brk TBROK "enabling lo device failed"
+ ;;
+ esac
+ EXPECT_PASS $NS_EXEC $NS_HANDLE0 $NS_TYPE $tping -q -c2 -I lo $ip_lo 1>/dev/null
+}
-tst_exit
+tst_run
diff --git a/testcases/kernel/containers/netns/netns_helper.sh b/testcases/kernel/containers/netns/netns_helper.sh
index c765a0cb9..0201e5e51 100755
--- a/testcases/kernel/containers/netns/netns_helper.sh
+++ b/testcases/kernel/containers/netns/netns_helper.sh
@@ -17,8 +17,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#==============================================================================
-. test.sh
+. tst_test.sh
TST_CLEANUP=netns_ns_exec_cleanup
+TST_NEEDS_ROOT=1
+TST_NEEDS_CMDS="ip modprobe"
# Set to 1 only for test cases using ifconfig (ioctl).
USE_IFCONFIG=0
@@ -60,7 +62,6 @@ NS_HANDLE1=""
IFCONF_IN6_ARG=""
###############################################################################
-
tst_check_iproute()
{
local cur_ipver="$(ip -V)"
@@ -69,11 +70,11 @@ tst_check_iproute()
cur_ipver=${cur_ipver##*s}
if [ -z $cur_ipver ] || [ -z $spe_ipver ]; then
- tst_brkm TBROK "don't obtain valid iproute version"
+ tst_brk TBROK "don't obtain valid iproute version"
fi
if [ $cur_ipver -lt $spe_ipver ]; then
- tst_brkm TCONF \
+ tst_brk TCONF \
"The commands in iproute tools do not support required objects"
fi
}
@@ -106,11 +107,9 @@ tst_check_iproute()
# * IP6_VETH0, IP6_VETH1
# IPv6 addresses for veth0 and veth1 devices.
#
-# On success function returns, on error tst_brkm is called and TC is terminated.
+# On success function returns, on error tst_brk is called and TC is terminated.
netns_setup()
{
- tst_require_root
- tst_require_cmds ip modprobe
modprobe veth > /dev/null 2>&1
@@ -118,7 +117,7 @@ netns_setup()
ns_exec)
setns_check
if [ $? -eq 32 ]; then
- tst_brkm TCONF "setns not supported"
+ tst_brk TCONF "setns not supported"
fi
NS_TYPE="net"
netns_ns_exec_setup
@@ -129,7 +128,7 @@ netns_setup()
TST_CLEANUP=netns_ip_cleanup
;;
*)
- tst_brkm TBROK \
+ tst_brk TBROK \
"first argument must be a program used to enter a network namespace (ns_exec|ip)"
;;
esac
@@ -142,22 +141,22 @@ netns_setup()
tst_require_cmds ifconfig
;;
*)
- tst_brkm TBROK \
+ tst_brk TBROK \
"third argument must be a comm. type between kernel and user space (netlink|ioctl)"
;;
esac
if [ -z "$4" ]; then
- tst_brkm TBROK "fourth argument must be the IPv4 address for veth0"
+ tst_brk TBROK "fourth argument must be the IPv4 address for veth0"
fi
if [ -z "$5" ]; then
- tst_brkm TBROK "fifth argument must be the IPv4 address for veth1"
+ tst_brk TBROK "fifth argument must be the IPv4 address for veth1"
fi
if [ -z "$6" ]; then
- tst_brkm TBROK "sixth argument must be the IPv6 address for veth0"
+ tst_brk TBROK "sixth argument must be the IPv6 address for veth0"
fi
if [ -z "$7" ]; then
- tst_brkm TBROK "seventh argument must be the IPv6 address for veth1"
+ tst_brk TBROK "seventh argument must be the IPv6 address for veth1"
fi
case "$2" in
@@ -176,7 +175,7 @@ netns_setup()
NETMASK=64
;;
*)
- tst_brkm TBROK "second argument must be an ip version (ipv4|ipv6)"
+ tst_brk TBROK "second argument must be an ip version (ipv4|ipv6)"
;;
esac
@@ -194,18 +193,18 @@ netns_ns_exec_setup()
NS_HANDLE0=$(ns_create $NS_TYPE)
if [ $? -eq 1 ]; then
- tst_resm TINFO "$NS_HANDLE0"
- tst_brkm TBROK "unable to create a new network namespace"
+ tst_res TINFO "$NS_HANDLE0"
+ tst_brk TBROK "unable to create a new network namespace"
fi
NS_HANDLE1=$(ns_create $NS_TYPE)
if [ $? -eq 1 ]; then
- tst_resm TINFO "$NS_HANDLE1"
- tst_brkm TBROK "unable to create a new network namespace"
+ tst_res TINFO "$NS_HANDLE1"
+ tst_brk TBROK "unable to create a new network namespace"
fi
$NS_EXEC $NS_HANDLE0 $NS_TYPE ip link add veth0 type veth peer name veth1 || \
- tst_brkm TBROK "unable to create veth pair devices"
+ tst_brk TBROK "unable to create veth pair devices"
$NS_EXEC $NS_HANDLE0 $NS_TYPE ns_ifmove veth1 $NS_HANDLE1
ret=$?
@@ -214,10 +213,10 @@ netns_ns_exec_setup()
fi
if [ $ret -eq 32 ]; then
- tst_brkm TCONF "IFLA_NET_NS_PID not supported"
+ tst_brk TCONF "IFLA_NET_NS_PID not supported"
fi
- tst_brkm TBROK "unable to add device veth1 to the separate network namespace"
+ tst_brk TBROK "unable to add device veth1 to the separate network namespace"
}
##
@@ -236,15 +235,15 @@ netns_ip_setup()
ip netns del $NS_HANDLE1 2>/dev/null
ip netns add $NS_HANDLE0 || \
- tst_brkm TBROK "unable to create a new network namespace"
+ tst_brk TBROK "unable to create a new network namespace"
ip netns add $NS_HANDLE1 || \
- tst_brkm TBROK "unable to create a new network namespace"
+ tst_brk TBROK "unable to create a new network namespace"
$NS_EXEC $NS_HANDLE0 ip link add veth0 type veth peer name veth1 || \
- tst_brkm TBROK "unable to create veth pair devices"
+ tst_brk TBROK "unable to create veth pair devices"
$NS_EXEC $NS_HANDLE0 ip link set veth1 netns $NS_HANDLE1 || \
- tst_brkm TBROK "unable to add device veth1 to the separate network namespace"
+ tst_brk TBROK "unable to add device veth1 to the separate network namespace"
}
##
@@ -253,7 +252,7 @@ netns_ip_setup()
netns_set_ip()
{
if [ -z "$NS_EXEC" ]; then
- tst_brkm TBROK "netns_setup() function must be called first"
+ tst_brk TBROK "netns_setup() function must be called first"
fi
# This applies only for ipv6 variant:
@@ -273,23 +272,23 @@ netns_set_ip()
case $USE_IFCONFIG in
1)
$NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig veth0 $IFCONF_IN6_ARG $IP0/$NETMASK ||
- tst_brkm TBROK "adding address to veth0 failed"
+ tst_brk TBROK "adding address to veth0 failed"
$NS_EXEC $NS_HANDLE1 $NS_TYPE ifconfig veth1 $IFCONF_IN6_ARG $IP1/$NETMASK ||
- tst_brkm TBROK "adding address to veth1 failed"
+ tst_brk TBROK "adding address to veth1 failed"
$NS_EXEC $NS_HANDLE0 $NS_TYPE ifconfig veth0 up ||
- tst_brkm TBROK "enabling veth0 device failed"
+ tst_brk TBROK "enabling veth0 device failed"
$NS_EXEC $NS_HANDLE1 $NS_TYPE ifconfig veth1 up ||
- tst_brkm TBROK "enabling veth1 device failed"
+ tst_brk TBROK "enabling veth1 device failed"
;;
*)
$NS_EXEC $NS_HANDLE0 $NS_TYPE ip address add $IP0/$NETMASK dev veth0 ||
- tst_brkm TBROK "adding address to veth0 failed"
+ tst_brk TBROK "adding address to veth0 failed"
$NS_EXEC $NS_HANDLE1 $NS_TYPE ip address add $IP1/$NETMASK dev veth1 ||
- tst_brkm TBROK "adding address to veth1 failed"
+ tst_brk TBROK "adding address to veth1 failed"
$NS_EXEC $NS_HANDLE0 $NS_TYPE ip link set veth0 up ||
- tst_brkm TBROK "enabling veth0 device failed"
+ tst_brk TBROK "enabling veth0 device failed"
$NS_EXEC $NS_HANDLE1 $NS_TYPE ip link set veth1 up ||
- tst_brkm TBROK "enabling veth1 device failed"
+ tst_brk TBROK "enabling veth1 device failed"
;;
esac
}
diff --git a/testcases/kernel/containers/netns/netns_sysfs.sh b/testcases/kernel/containers/netns/netns_sysfs.sh
index 944a4c152..b1660b196 100644
--- a/testcases/kernel/containers/netns/netns_sysfs.sh
+++ b/testcases/kernel/containers/netns/netns_sysfs.sh
@@ -1,93 +1,69 @@
#!/bin/sh
-#==============================================================================
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Copyright (c) Köry Maincent <kory.maincent@bootlin.com> 2020
# Copyright (c) 2015 Red Hat, Inc.
#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of version 2 the GNU General Public License as
-# published by the Free Software Foundation.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# Written by Matus Marhefka <mmarhefk@redhat.com>
-#
#==============================================================================
#
# Tests that a separate network namespace cannot affect sysfs contents
# of the main namespace.
#==============================================================================
-TCID="netns_sysfs"
-TST_TOTAL=3
-NS_TYPE="net,mnt"
-DUMMYDEV_HOST="dummy_test0"
-DUMMYDEV="dummy_test1"
-. test.sh
+TST_NEEDS_DRIVERS="dummy"
+TST_CLEANUP=do_cleanup
+TST_SETUP=do_setup
+TST_TESTFUNC=do_test
+TST_NEEDS_TMPDIR=1
+. tst_test.sh
-if tst_kvcmp -lt "2.6.35"; then
- tst_brkm TCONF "sysfs is not mount namespace aware for kernels older than 2.6.35"
-fi
-
-setns_check
-if [ $? -eq 32 ]; then
- tst_brkm TCONF "setns not supported"
-fi
-
-cleanup()
+do_setup()
{
- tst_rmdir
- ip link del $DUMMYDEV_HOST 2>/dev/null
- ip link del $DUMMYDEV 2>/dev/null
- kill -9 $NS_HANDLE 2>/dev/null
-}
+ NS_TYPE="net,mnt"
+ DUMMYDEV_HOST="dummy_test0"
+ DUMMYDEV="dummy_test1"
-tst_tmpdir
-NS_HANDLE=$(ns_create $NS_TYPE)
-if [ $? -eq 1 ]; then
- tst_resm TINFO "$NS_HANDLE"
- tst_brkm TBROK "unable to create a new network namespace"
-fi
-TST_CLEANUP=cleanup
+ if tst_kvcmp -lt "2.6.35"; then
+ tst_brk TCONF "sysfs is not mount namespace aware for kernels older than 2.6.35"
+ fi
-ip link add $DUMMYDEV_HOST type dummy || \
- tst_brkm TBROK "failed to add a new (host) dummy device"
+ setns_check
+ if [ $? -eq 32 ]; then
+ tst_brk TCONF "setns not supported"
+ fi
-ns_exec $NS_HANDLE $NS_TYPE mount --make-rprivate /sys
-ns_exec $NS_HANDLE $NS_TYPE ip link add $DUMMYDEV type dummy || \
- tst_brkm TBROK "failed to add a new dummy device"
-ns_exec $NS_HANDLE $NS_TYPE mount -t sysfs none /sys 2>/dev/null
+ NS_HANDLE=$(ns_create $NS_TYPE)
+ if [ $? -eq 1 ]; then
+ tst_res TINFO "$NS_HANDLE"
+ tst_brk TBROK "unable to create a new network namespace"
+ fi
+ ip link add $DUMMYDEV_HOST type dummy || \
+ tst_brk TBROK "failed to add a new (host) dummy device"
-# TEST CASE #1
-ns_exec $NS_HANDLE $NS_TYPE test -e /sys/class/net/$DUMMYDEV
-if [ $? -eq 0 ]; then
- tst_resm TPASS "sysfs in new namespace has $DUMMYDEV interface"
-else
- tst_resm TFAIL "sysfs in new namespace does not have $DUMMYDEV interface"
-fi
+ ns_exec $NS_HANDLE $NS_TYPE mount --make-rprivate /sys
+ ns_exec $NS_HANDLE $NS_TYPE ip link add $DUMMYDEV type dummy || \
+ tst_brk TBROK "failed to add a new dummy device"
+ ns_exec $NS_HANDLE $NS_TYPE mount -t sysfs none /sys 2>/dev/null
+}
+do_cleanup()
+{
+ ip link del $DUMMYDEV_HOST 2>/dev/null
+ ip link del $DUMMYDEV 2>/dev/null
+ kill -9 $NS_HANDLE 2>/dev/null
+}
-# TEST CASE #2
-ns_exec $NS_HANDLE $NS_TYPE test -e /sys/class/net/$DUMMYDEV_HOST
-if [ $? -ne 0 ]; then
- tst_resm TPASS "sysfs in new namespace does not have $DUMMYDEV_HOST interface"
-else
- tst_resm TFAIL "sysfs in new namespace contains $DUMMYDEV_HOST interface"
-fi
+do_test()
+{
+ # TEST CASE #1
+ EXPECT_PASS ns_exec $NS_HANDLE $NS_TYPE test -e /sys/class/net/$DUMMYDEV
-# TEST CASE #3
-test -e /sys/class/net/$DUMMYDEV
-if [ $? -ne 0 ]; then
- tst_resm TPASS "sysfs not affected by a separate namespace"
-else
- tst_resm TFAIL "sysfs affected by a separate namespace"
-fi
+ # TEST CASE #2
+ EXPECT_FAIL ns_exec $NS_HANDLE $NS_TYPE test -e /sys/class/net/$DUMMYDEV_HOST
+ # TEST CASE #3
+ EXPECT_FAIL test -e /sys/class/net/$DUMMYDEV
+}
-tst_exit
+tst_run
--
2.17.1
More information about the ltp
mailing list