src/net: new test, basic bridge

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2023-04-20 21:14:54 +02:00
committed by Tobias Waldekranz
parent a26dd9c19f
commit e6834c5db6
3 changed files with 144 additions and 2 deletions
+1
View File
@@ -4,5 +4,6 @@ pkgdata_DATA = $(EXTRA_DIST)
TEST_EXTENSIONS = .sh
TESTS_ENVIRONMENT = unshare -mrun
TESTS = three-independent.sh
TESTS += bridge.sh
CLEANFILES = *~ *.trs *.log
+49
View File
@@ -0,0 +1,49 @@
#!/bin/sh
# - Basic bridge with three bridge ports
# - Add another port
# - Remove a port
TEST_DIR=$(dirname "$0")
. "$TEST_DIR/lib.sh"
################################################
say "Verify bringup of basic bridge with three ports"
create_iface eth0
create_iface eth1
create_iface eth2
create_bridge br0 eth0 eth1 eth2
netdo
assert_bridge_ports br0 true eth0 eth1 eth2
assert_iface br0
################################################
sep
say "Verify add another bridge port"
create_ng
create_iface br0
create_iface eth3
add_brport br0 eth3
netdo
assert_bridge_ports br0 true eth0 eth1 eth2 eth3
assert_iface br0
################################################
sep
say "Verify delete a bridge port"
del_brport br0 eth1
create_ng
create_iface br0
create_iface eth1
netdo
bridge link
assert_bridge_ports br0 true eth0 eth2 eth3
assert_bridge_ports br0 false eth1
assert_iface br0
+94 -2
View File
@@ -20,6 +20,12 @@ export NET_DIR
gen=-1
NET=$(command -v net)
if [ -n "$NET" ]; then
# Verify we didn't find Samba net command, our net live in sbin
if [ "$(dirname "$NET")" = "/usr/bin" ]; then
NET=""
fi
fi
[ -n "$NET" ] || NET=../src/net
# Exit immediately on error, treat unset variables as error
@@ -175,6 +181,61 @@ create_iface()
echo "up" > "$ifdir/admin-state"
}
add_brport()
{
brname=$1
brdir="$NET_DIR/$gen/$brname"
shift
# shellcheck disable=SC2124
brports=$@
mkdir -p "$brdir/deps"
for port in $brports; do
pdir="$NET_DIR/$gen/$port"
ln -s "../../$port" "$brdir/deps/$port"
create_iface "$port"
cat <<-EOF >"$pdir/init.ip"
link add $port type dummy
link set $port master $brname
link set $port up
EOF
done
}
del_brport()
{
brname=$1
brdir="$NET_DIR/$gen/$brname"
shift
# shellcheck disable=SC2124
brports=$@
for port in $brports; do
cat <<-EOF >"$pdir/exit.ip"
link set $port nomaster
EOF
done
}
create_bridge()
{
brname=$1
brdir="$NET_DIR/$gen/$brname"
shift
# shellcheck disable=SC2124
brports=$@
create_iface "$brname"
cat <<-EOF > "$brdir/init.ip"
link add $brname type bridge
link set $brname up
EOF
# shellcheck disable=SC2086
add_brport "$brname" $brports
}
remove_iface()
{
ifname=$1
@@ -187,7 +248,11 @@ EOF
assert_iface()
{
ifname=$1
address=$2
if [ $# -gt 1 ]; then
address=$2
else
address=""
fi
state=$(tr '[:lower:]' '[:upper:]' < "$NET_DIR/$gen/$ifname/admin-state")
addr=$(ip -br -j addr show "$ifname" | jq -r '.[] | .addr_info[0].local')
@@ -197,7 +262,9 @@ assert_iface()
# echo "$state => $ifname: $updn $addr"
assert "Verify $ifname state $state" "$state" = "$updn"
assert "Verify $ifname address $address" "$address" = "$addr"
if [ -n "$address" ]; then
assert "Verify $ifname address $address" "$address" = "$addr"
fi
}
assert_noiface()
@@ -234,4 +301,29 @@ assert_iface_flag()
assert "$msg" "$found" = "$val"
}
assert_bridge_ports()
{
br="$1"
val="$2"
shift 2
# shellcheck disable=SC2124
ports=$@
for port in $ports; do
found=false
for brport in $(bridge -j link |jq -r --arg br "$br" '.[] | select(.master == $br).ifname'); do
if [ "$port" = "$brport" ]; then
found=true
break;
fi
done
if [ "$val" = "false" ]; then
not="NOT "
else
not=""
fi
assert "Port $port is ${not}a $br bridge port" "$found" = "$val"
done
}
setup