Wait until the expected interface state is reached instead of relying on
authoranton <anton@openbsd.org>
Fri, 5 Jan 2024 10:37:54 +0000 (10:37 +0000)
committeranton <anton@openbsd.org>
Fri, 5 Jan 2024 10:37:54 +0000 (10:37 +0000)
arbitrary sleeps. Should hopefully make these tests more stable.

regress/sys/netinet/carp/carp_1.sh
regress/sys/netinet/carp/carp_2.sh
regress/sys/netinet/carp/carp_3.sh
regress/sys/netinet/carp/carp_4.sh
regress/sys/netinet/carp/carp_subr

index 76cf607..28d685e 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/ksh
-#      $OpenBSD: carp_1.sh,v 1.2 2023/10/19 18:36:41 anton Exp $
+#      $OpenBSD: carp_1.sh,v 1.3 2024/01/05 10:37:54 anton Exp $
 
 
 cleanup()
@@ -78,13 +78,13 @@ ifconfig carp$IFNO2 rdomain $RD2 192.168.0.1/24 \
 #
 
 # IFNO1 must become master
-sleep 3.1      # need 3 seconds to become master
+wait_until "ifconfig carp$IFNO1 | grep -q 'status: master'"
 test sh -c "ifconfig carp$IFNO1 | grep -q 'status: master'"
 test sh -c "ifconfig carp$IFNO2 | grep -q 'status: backup'"
 
 # carpdemote must work
 ifconfig -g ${IFGPREFIX}a carpdemote
-sleep 0.1
+wait_until "ifconfig carp$IFNO1 | grep -q 'status: backup'"
 test sh -c "ifconfig carp$IFNO1 | grep -q 'status: backup'"
 test sh -c "ifconfig carp$IFNO2 | grep -q 'status: master'"
 
index 2cd53f0..ce87750 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/ksh
-#      $OpenBSD: carp_2.sh,v 1.2 2023/10/19 18:36:41 anton Exp $
+#      $OpenBSD: carp_2.sh,v 1.3 2024/01/05 10:37:54 anton Exp $
 
 
 cleanup()
@@ -81,13 +81,13 @@ ifconfig carp$IFNO2 rdomain $RD2 lladdr $lladdr2 192.168.0.1/24 \
 #
 
 # IFNO1 must become master
-sleep 3.1      # need 3 seconds to become master
+wait_until "ifconfig carp$IFNO1 | grep -q 'status: master'"
 test sh -c "ifconfig carp$IFNO1 | grep -q 'status: master'"
 test sh -c "ifconfig carp$IFNO2 | grep -q 'status: backup'"
 
 # carpdemote must work
 ifconfig -g ${IFGPREFIX}a carpdemote
-sleep 0.1
+wait_until "ifconfig carp$IFNO1 | grep -q 'status: backup'"
 test sh -c "ifconfig carp$IFNO1 | grep -q 'status: backup'"
 test sh -c "ifconfig carp$IFNO2 | grep -q 'status: master'"
 
index 3b2dc2c..ca7774c 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/ksh
-#      $OpenBSD: carp_3.sh,v 1.2 2023/10/19 18:36:41 anton Exp $
+#      $OpenBSD: carp_3.sh,v 1.3 2024/01/05 10:37:54 anton Exp $
 
 
 cleanup()
@@ -78,13 +78,13 @@ ifconfig carp$IFNO2 rdomain $RD2 192.168.0.1/24 \
 #
 
 # IFNO1 must become master
-sleep 3.1      # need 3 seconds to become master
+wait_until "ifconfig carp$IFNO1 | grep -q 'status: master'"
 test sh -c "ifconfig carp$IFNO1 | grep -q 'status: master'"
 test sh -c "ifconfig carp$IFNO2 | grep -q 'status: backup'"
 
 # carpdemote must work
 ifconfig -g ${IFGPREFIX}a carpdemote
-sleep 0.1
+wait_until "ifconfig carp$IFNO1 | grep -q 'status: backup'"
 test sh -c "ifconfig carp$IFNO1 | grep -q 'status: backup'"
 test sh -c "ifconfig carp$IFNO2 | grep -q 'status: master'"
 
index 98c2d6a..56eab1d 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/ksh
-#      $OpenBSD: carp_4.sh,v 1.2 2023/10/19 18:36:41 anton Exp $
+#      $OpenBSD: carp_4.sh,v 1.3 2024/01/05 10:37:54 anton Exp $
 
 
 cleanup()
@@ -81,13 +81,13 @@ ifconfig carp$IFNO2 rdomain $RD2 lladdr $lladdr2 192.168.0.1/24 \
 #
 
 # IFNO1 must become master
-sleep 3.1      # need 3 seconds to become master
+wait_until "ifconfig carp$IFNO1 | grep -q 'status: master'"
 test sh -c "ifconfig carp$IFNO1 | grep -q 'status: master'"
 test sh -c "ifconfig carp$IFNO2 | grep -q 'status: backup'"
 
 # carpdemote must work
 ifconfig -g ${IFGPREFIX}a carpdemote
-sleep 0.1
+wait_until "ifconfig carp$IFNO1 | grep -q 'status: backup'"
 test sh -c "ifconfig carp$IFNO1 | grep -q 'status: backup'"
 test sh -c "ifconfig carp$IFNO2 | grep -q 'status: master'"
 
index fb86ca6..e3456c7 100644 (file)
@@ -55,6 +55,19 @@ test()
        fi
 }
 
+wait_until() {
+       local _i=0
+
+       while [ "$_i" -lt 8 ]; do
+               sh -c "$@" && return 0
+               sleep 0.5
+               _i="$((_i + 1))"
+       done
+       echo timeout
+       return 1
+}
+
+
 RDOMAINS=""
 IFACE_NUMS=""
 while getopts 'cvR:I:' ch "$@"; do