[lxc-devel] [PATCH] tests: Rework lxc-test-usernic

Serge Hallyn serge.hallyn at ubuntu.com
Fri Jan 24 05:44:02 UTC 2014


Quoting Stéphane Graber (stgraber at ubuntu.com):
> Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>

Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>

> ---
>  src/tests/lxc-test-usernic | 136 ++++++++++++++++++++++++---------------------
>  1 file changed, 74 insertions(+), 62 deletions(-)
> 
> diff --git a/src/tests/lxc-test-usernic b/src/tests/lxc-test-usernic
> index e641cb9..f3194dd 100755
> --- a/src/tests/lxc-test-usernic
> +++ b/src/tests/lxc-test-usernic
> @@ -21,123 +21,135 @@
>  # License along with this library; if not, write to the Free Software
>  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
>  
> +DONE=0
> +
>  cleanup() {
> -	sed -i '/usernic-user/d' /var/run/lxc/nics /etc/lxc/lxc-usernet
> -	ifconfig usernic-br0 down
> -	ifconfig usernic-br1 down
> -	sudo brctl delbr usernic-br0
> -	sudo brctl delbr usernic-br1
> -	sudo deluser usernic-user
> -	su -l usernic-user -c "lxc-stop -P /tmp/usernic-test/lxcbase -n b1"
> -	rm -rf /tmp/usernic-test
> -	exit $1
> +	(
> +		set +e
> +
> +		lxc-stop -n usernic-c1
> +		lxc-destroy -n usernic-c1
> +
> +		sed -i '/usernic-user/d' /var/run/lxc/nics /etc/lxc/lxc-usernet
> +		ifconfig usernic-br0 down
> +		ifconfig usernic-br1 down
> +		brctl delbr usernic-br0
> +		brctl delbr usernic-br1
> +
> +		run_cmd "lxc-stop -n b1"
> +		pkill -u $(id -u usernic-user) -9
> +
> +		rm -rf /tmp/usernic-test /home/usernic-user /run/user/$(id -u usernic-user)
> +
> +		deluser usernic-user
> +	) >/dev/null 2>&1
> +
> +	if [ "$DONE" = "1" ]; then
> +		echo "PASS"
> +		exit 0
> +	fi
> +
> +	echo "FAIL"
> +	exit 1
> +}
> +
> +run_cmd() {
> +	sudo -i -u usernic-user env XDG_RUNTIME_DIR=/run/user/$(id -u usernic-user) $*
>  }
>  
> +set -eu
> +trap cleanup EXIT SIGHUP SIGINT SIGTERM
> +
>  # create a test user
>  deluser usernic-user || true
>  useradd usernic-user
>  sudo mkdir -p /home/usernic-user
>  sudo chown usernic-user /home/usernic-user
>  usermod -v 910000-919999 -w 910000-919999 usernic-user
> -mkdir -p /tmp/usernic-test/lxcbase
> -chown usernic-user /tmp/usernic-test/lxcbase
> -uid=$(id -u usernic-user)
> -cat > /home/usernic-user/.bashrc << EOF
> -export XDG_RUNTIME_DIR=/run/user/$uid
> -EOF
> -XDG_RUNTIME_DIR=/run/user/$uid
> -export XDG_RUNTIME_DIR=/run/user/$uid
> -mkdir -p /run/user/$uid
> -chown usernic-user /run/user/$uid
> -env
> -echo XXX[
> -su -l usernic-user -c "env"
> -sleep 20
>  
> -#
> -cat > /tmp/lxc-usernic.conf << EOF
> +mkdir -p /home/usernic-user/.config/lxc/
> +cat > /home/usernic-user/.config/lxc/default.conf << EOF
>  lxc.network.type = empty
> -lxc.id_map = u 0 911000 10000
> -lxc.id_map = g 0 911000 10000
> +lxc.id_map = u 0 910000 10000
> +lxc.id_map = g 0 910000 10000
>  EOF
>  
> -# Create two test bridges
> +for d in /sys/fs/cgroup/*; do
> +	[ ! -d $d/lxctest ] && mkdir $d/lxctest
> +	chown -R usernic-user $d/lxctest
> +	echo $$ > $d/lxctest/tasks
> +done
> +
> +mkdir -p /run/user/$(id -u usernic-user)
> +chown -R usernic-user /run/user/$(id -u usernic-user) /home/usernic-user
>  
> +# Create two test bridges
>  brctl addbr usernic-br0
>  brctl addbr usernic-br1
>  ifconfig usernic-br0 0.0.0.0 up
>  ifconfig usernic-br1 0.0.0.0 up
>  
> -LXC_USERNIC_PATH=$(ls -1 /usr/lib/*/lxc/lxc-user-nic | head -1)
> -
>  # Create three containers
> -su -l usernic-user -c "lxc-create -P /tmp/usernic-test/lxcbase -t busybox -n b1 -f /tmp/lxc-usernic.conf"
> -su -l usernic-user -c "lxc-start -P /tmp/usernic-test/lxcbase -n b1 -d"
> -p1=`lxc-info -P /tmp/usernic-test/lxcbase -n b1 -p | awk -F: '{ print $2 }'`
> +run_cmd "lxc-create -t download -n b1 -- -d ubuntu -r trusty -a i386"
> +run_cmd "lxc-start -n b1 -d"
> +p1=$(run_cmd "lxc-info -n b1 -p -H")
>  
>  # Assign one veth, should fail as no allowed entries yet
> -su -l usernic-user -c "$LXC_USERNIC_PATH $p1 veth usernic-br0 xx1"
> -if [ $? -eq 0 ]; then
> +if run_cmd "lxc-user-nic $p1 veth usernic-br0 xx1"; then
>  	echo "FAIL: able to create nic with no entries"
> -	cleanup 1
> +	exit 1
>  fi
>  
>  # Give him a quota of two
>  touch /etc/lxc/lxc-usernet
> -sed -i '/^lxc-usernet/d' /etc/lxc/lxc-usernet
> -echo "lxc-usernet veth usernic-br0 2" >> /etc/lxc/lxc-usernet
> +sed -i '/^usernic-user/d' /etc/lxc/lxc-usernet
> +echo "usernic-user veth usernic-br0 2" >> /etc/lxc/lxc-usernet
>  
>  # Assign one veth to second bridge, should fail
> -su -l usernic-user -c "$LXC_USERNIC_PATH $p1 veth usernic-br1 xx1"
> -if [ $? -eq 0 ]; then
> +if run_cmd "lxc-user-nic $p1 veth usernic-br1 xx1"; then
>  	echo "FAIL: able to create nic with no entries"
> -	cleanup 1
> +	exit 1
>  fi
>  
>  # Assign two veths, should succeed
> -su -l usernic-user -c "$LXC_USERNIC_PATH $p1 veth usernic-br0 xx2"
> -if [ $? -ne 0 ]; then
> +if ! run_cmd "lxc-user-nic $p1 veth usernic-br0 xx2"; then
>  	echo "FAIL: unable to create first nic"
> -	cleanup 1
> +	exit 1
>  fi
> -su -l usernic-user -c "$LXC_USERNIC_PATH $p1 veth usernic-br0 xx3"
> -if [ $? -ne 0 ]; then
> +
> +if ! run_cmd "lxc-user-nic $p1 veth usernic-br0 xx3"; then
>  	echo "FAIL: unable to create second nic"
> -	cleanup 1
> +	exit 1
>  fi
>  
>  # Assign one more veth, should fail.
> -su -l usernic-user -c "$LXC_USERNIC_PATH $p1 veth usernic-br0 xx4"
> -if [ $? -eq 0 ]; then
> +if run_cmd "lxc-user-nic $p1 veth usernic-br0 xx4"; then
>  	echo "FAIL: able to create third nic"
> -	cleanup 1
> +	exit 1
>  fi
>  
>  # Shut down and restart the container, should be able to assign more nics
> -su -l usernic-user -c "lxc-stop -P /tmp/usernic-test/lxcbase -n b1"
> -su -l usernic-user -c "lxc-start -P /tmp/usernic-test/lxcbase -n b1 -d"
> -p1=`lxc-info -P /tmp/usernic-test/lxcbase -n b1 -p | awk -F: '{ print $2 }'`
> -su -l usernic-user -c "$LXC_USERNIC_PATH $p1 veth usernic-br0 xx5"
> -if [ $? -ne 0 ]; then
> +run_cmd "lxc-stop -n b1"
> +run_cmd "lxc-start -n b1 -d"
> +p1=$(run_cmd "lxc-info -n b1 -p -H")
> +
> +if ! run_cmd "lxc-user-nic $p1 veth usernic-br0 xx5"; then
>  	echo "FAIL: unable to create nic after destroying the old"
>  	cleanup 1
>  fi
>  
> -su -l usernic-user -c "lxc-stop -P /tmp/usernic-test/lxcbase -n b1"
> +run_cmd "lxc-stop -n b1"
>  
>  # Create a root-owned ns
>  lxc-create -t busybox -n usernic-c1
>  lxc-start -n usernic-c1 -d
> -p2=`lxc-info -n usernic-c1 -p | awk -F: '{ print $2}'`
> +p2=$(lxc-info -n usernic-c1 -p -H)
>  
>  # assign veth to it - should fail
> -su -l usernic-user -c "$LXC_USERNIC_PATH $p2 veth usernic-br0 xx6"
> -ret=$?
> -lxc-stop -n usernic-c1
> -lxc-destroy -n usernic-c1
> -if [ $ret -eq 0 ]; then
> +if run_cmd "lxc-user-nic $p2 veth usernic-br0 xx6"; then
>  	echo "FAIL: able to attach nic to root-owned container"
>  	cleanup 1
>  fi
>  
>  echo "All tests passed"
> +DONE=1
> -- 
> 1.8.5.3
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel


More information about the lxc-devel mailing list