From 6b3eaa05e5b1c88a3293591c19b6901e1943af69 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Tue, 18 Apr 2023 13:31:52 +0200 Subject: [PATCH] src/net: refactor test into lib.sh and .sh Signed-off-by: Joachim Wiberg --- src/net/test/lib.sh | 129 ++++++++++++++++++++++++++++++ src/net/test/three-independent.sh | 47 ++--------- 2 files changed, 135 insertions(+), 41 deletions(-) create mode 100755 src/net/test/lib.sh diff --git a/src/net/test/lib.sh b/src/net/test/lib.sh new file mode 100755 index 00000000..c59e0d63 --- /dev/null +++ b/src/net/test/lib.sh @@ -0,0 +1,129 @@ +#!/bin/sh + +# Session set from Makefile before calling unshare -mrun +if [ -z "$SESSION" ]; then + SESSION=$(mktemp -d) + TMPSESS=1 +fi + +if [ -n "$DEBUG" ]; then + DEBUG="-v -d" +else + DEBUG="" +fi + +# Test name, used everywhere as /tmp/$NM/foo +NM=$(basename "$0" .sh) +NET_DIR="${SESSION}/${NM}" +export NET_DIR + +gen=-1 + +# Exit immediately on error, treat unset variables as error +set -eu + +color_reset='\e[0m' +fg_red='\e[1;31m' +fg_green='\e[1;32m' +fg_yellow='\e[1;33m' +log() +{ + test=$(basename "$0" ".sh") + printf "\e[2m[%s]\e[0m %b%b%b %s\n" "$test" "$1" "$2" "$color_reset" "$3" +} + +sep() +{ + printf "\e[2m――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――\e[0m\n" +} + +say() +{ + log "$fg_yellow" "•" "$@" +} + +skip() +{ + log "$fg_yellow" − "$*" + exit 77 +} + +fail() +{ + log "$fg_red" ✘ "$*" + exit 99 +} + +assert() +{ + __assert_msg=$1 + shift + + if [ ! "$@" ]; then + log "$fg_red" ✘ "$__assert_msg ($*)" + return 1 + fi + + log "$fg_green" ✔ "$__assert_msg" + return 0 +} + +signal() +{ + echo + if [ "$1" != "EXIT" ]; then + print "Got signal, cleaning up" + fi + + rm -rf "${NET_DIR}" + if [ -n "$TMPSESS" ] && [ -d "$SESSION" ]; then + rm -rf "$SESSION" + fi +} + +# props to https://stackoverflow.com/a/2183063/1708249 +# shellcheck disable=SC2064 +trapit() +{ + func="$1" ; shift + for sig ; do + trap "$func $sig" "$sig" + done +} + +create_ng() +{ + _=$((gen += 1)) + mkdir -p "$NET_DIR/$gen" + echo $gen > "$NET_DIR/next" +} + +setup() +{ + say "Test start $(date)" + create_ng + + # Runs once when including lib.sh + mkdir -p "${NET_DIR}" + trapit signal INT TERM QUIT EXIT + + ip link set lo up + sep +} + +netdo() +{ + if [ -n "$DEBUG" ]; then + tree "$NET_DIR/" + fi + + ../net "$DEBUG" apply + + if [ -n "$DEBUG" ]; then + ip link + ip addr + tree "$NET_DIR/" + fi +} + +setup diff --git a/src/net/test/three-independent.sh b/src/net/test/three-independent.sh index aed1eaf9..10f08ec9 100755 --- a/src/net/test/three-independent.sh +++ b/src/net/test/three-independent.sh @@ -3,28 +3,7 @@ # - Verify removal of one # - Verify net down # - Verify net up - -NET_DIR=/tmp/net -export NET_DIR - -gen=-1 - -init() -{ - ip link set lo up -} - -netdo() -{ - ../net -vd apply -} - -create_ng() -{ - _=$((gen += 1)) - mkdir -p "$NET_DIR/$gen" - echo $gen > "$NET_DIR/next" -} +. "./lib.sh" create_iface() { @@ -51,33 +30,19 @@ check_iface() addr="$addr/$plen" updn=$(ip -br -j link show "$ifname" | jq -r '.[] | .flags[] | select(index("UP"))' | head -1) - echo "$state => $ifname: $updn $addr" - - if [ "$state" != "$updn" ]; then - echo "Failed to bring $ifname $state ($updn)" - exit 1 - fi - if [ "$address" != "$addr" ]; then - echo "Failed to set $ifname $address ($addr)" - exit 1 - fi +# echo "$state => $ifname: $updn $addr" + assert "Verify $ifname state $state" "$state" = "$updn" + assert "Verify $ifname address $address" "$address" = "$addr" } -init - -create_ng +say "Verify bringup of generation $gen" create_iface eth0 10.0.0.1/24 create_iface eth1 10.0.1.1/24 create_iface eth2 10.0.2.1/24 -tree "$NET_DIR/" + netdo check_iface eth0 10.0.0.1/24 check_iface eth1 10.0.1.1/24 check_iface eth2 10.0.2.1/24 -ip link -ip addr - - -tree "$NET_DIR/"