[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 1/2] tests: Add net_test for network commands
From: |
Andrew Hamilton |
Subject: |
[PATCH v2 1/2] tests: Add net_test for network commands |
Date: |
Sat, 31 Aug 2024 22:31:07 -0500 |
diff --git a/Makefile.util.def b/Makefile.util.def
index 0f74a1680..9ed211bc5 100644
--- a/Makefile.util.def
+++ b/Makefile.util.def
@@ -1131,6 +1131,12 @@ script = {
common = tests/cdboot_test.in;
};
+script = {
+ testcase = nonnative;
+ name = net_test;
+ common = tests/net_test.in;
+};
+
script = {
testcase = nonnative;
name = netboot_test;
diff --git a/tests/net_test.in b/tests/net_test.in
new file mode 100644
index 000000000..de5d8a821
--- /dev/null
+++ b/tests/net_test.in
@@ -0,0 +1,187 @@
+#! @BUILD_SHEBANG@
+# This test is intended to perform basic tests of the "net" commands
+# by providing command line inputs and checking command console output.
+
+set -e
+
+. "@builddir@/grub-core/modinfo.sh"
+
+set -e
+
+if [ "$EUID" = "" ] ; then
+ EUID=$(id -u)
+fi
+
+# Define some variables to be used if different platforms have different
+# interfaces / etc.
+net_dev=""
+net_dev_mac=""
+net_addr=""
+net_addr2=""
+net_addr_ip6=""
+net_addr_ip6_exp=""
+net_route_subnet6=""
+net_gw_subnet=""
+net_gw_addr=""
+net_route_subnet=""
+echo "${grub_modinfo_target_cpu}-${grub_modinfo_platfomr}"
+case "${grub_modinfo_target_cpu}-${grub_modinfo_platform}" in
+ # PLATFORM: emu works when run as root to create the tap device
+ *-emu)
+ if [ "$EUID" != 0 ] ; then
+ echo "not root; cannot test net_test"
+ exit 99
+ fi
+ net_dev="emu0"
+ net_dev_mac="00:01:02:03:04:05"
+ net_addr="169.254.45.2"
+ net_addr2="169.254.46.2"
+ net_addr_ip6="fe80::bca3:3bdf:ba9B:ba9a"
+ net_addr_ip6_exp="fe80:0:0:0:bca3:3bdf:ba9b:ba9a"
+ net_route_subnet6="fe80:0:0:0:0:0:0:0/32"
+ net_gw_subnet="169.254.60.1/24"
+ net_gw_addr="169.254.45.1"
+ net_route_subnet="169.254.0.0/16"
+ ;;
+ # Others are untested (wasn't able to figure out how to get a
+ # network card in Qemu with Grub)
+ # FIXME:
+ *)
+ exit 77;;
+esac
+
+# TC1: The default state should be one card exists
+expected="$net_dev $net_dev_mac"
+output="$(echo 'net_ls_cards' | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC2: The default state should be no address defined
+expected=""
+output="$(echo 'net_ls_addr' | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC3: The default state should be no DNS defined
+expected=""
+output="$(echo 'net_ls_dns' | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC4: The default state should be no routes defined
+expected=""
+output="$(echo 'net_ls_routes' | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC5: Add an addr to the card
+expected="if1 $net_dev_mac $net_addr
+if1:local $net_route_subnet if1"
+command="net_add_addr if1 $net_dev $net_addr; net_ls_addr; net_ls_routes"
+output="$(echo "$command" | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC6: Test removing the addr and associated route update
+expected=""
+command="net_add_addr if1 $net_dev $net_addr; net_del_addr if1; net_ls_routes;
\
+net_ls_addr"
+output="$(echo "$command" | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC7: Test adding two interfaces then removing one
+expected="if:2 $net_dev_mac 169.254.46.2
+if:2:local $net_route_subnet if:2"
+command="net_add_addr if:1 $net_dev $net_addr; net_add_addr if:2 $net_dev \
+$net_addr2 ; net_del_addr if:1; net_ls_addr; net_ls_routes"
+output="$(echo "$command" | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC8: Test adding a route with a gateway
+expected="INTERFACE_1 00:01:02:03:04:05 169.254.45.2
+IFACE1_ROUTE $net_gw_subnet gw $net_gw_addr
+INTERFACE_1:local $net_route_subnet INTERFACE_1"
+command="net_add_addr INTERFACE_1 $net_dev $net_addr; net_add_route \
+IFACE1_ROUTE $net_gw_subnet gw $net_gw_addr; net_ls_addr; net_ls_routes"
+output="$(echo "$command" | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC9: Test timeout case for IP6 autoconf
+expected="error: couldn't send network packet.
+error: couldn't send network packet.
+error: couldn't send network packet.
+error: couldn't send network packet.
+error: couldn't send network packet.
+error: couldn't send network packet.
+error: couldn't autoconfigure emu0."
+command="net_ipv6_autoconf"
+output="$(echo "$command" | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC10: Test setting a VLAN
+expected="if1 $net_dev_mac $net_addr vlan1"
+command="net_add_addr if1 $net_dev $net_addr; net_set_vlan if1 1; \
+net_ls_addr"
+output="$(echo "$command" | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC11: Test setting another VLAN
+expected="if1 $net_dev_mac $net_addr vlan4"
+command="net_add_addr if1 $net_dev $net_addr; net_set_vlan if1 4; \
+net_ls_addr"
+output="$(echo "$command" | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC12: Test setting up an IPv6 address
+# I'm not sure if manually adding a route for the link local should be
+# required...
+expected="if1 $net_dev_mac $net_addr_ip6_exp
+if1:local $net_route_subnet6 if1"
+command="net_add_addr if1 $net_dev $net_addr_ip6; net_add_route \
+if1:local $net_route_subnet6 if1; net_ls_addr; net_ls_routes"
+output="$(echo "$command" | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
+
+# TC13: Test adding IPV6 address, route, then removing the interface
+# I'm not sure if manually adding a route for the link local should be
+# required...
+expected=""
+command="net_add_addr if1 $net_dev $net_addr_ip6; net_add_route \
+if1:local $net_route_subnet6 if1; net_del_addr if1; net_ls_routes; \
+net_ls_addr"
+output="$(echo "$command" | @builddir@/grub-shell)"
+if [ "$output" != "$expected" ]; then
+ printf "Line: $LINENO, Actual: >%s<\nExpected: >%s<\n" "$output" "$expected"
+ exit 1;
+fi
--
2.39.2