]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
3260. [bug] "rrset-order cyclic" could appears to not rotate
authorMark Andrews <marka@isc.org>
Fri, 23 Dec 2011 00:43:19 +0000 (00:43 +0000)
committerMark Andrews <marka@isc.org>
Fri, 23 Dec 2011 00:43:19 +0000 (00:43 +0000)
                        for some query patterns.  [RT #27170]

bin/tests/system/rrsetorder/clean.sh
bin/tests/system/rrsetorder/dig.out.cyclic.good1 [new file with mode: 0644]
bin/tests/system/rrsetorder/dig.out.cyclic.good2 [new file with mode: 0644]
bin/tests/system/rrsetorder/dig.out.cyclic.good3 [new file with mode: 0644]
bin/tests/system/rrsetorder/dig.out.cyclic.good4 [new file with mode: 0644]
bin/tests/system/rrsetorder/tests.sh

index d5b245cc8c5c77af979be5bfecb5c2909498cd82..8c31aa56a42c71d71a99d39b438180d107941eac 100644 (file)
@@ -14,8 +14,9 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: clean.sh,v 1.8 2008/04/24 23:46:59 tbox Exp $
+# $Id: clean.sh,v 1.8.106.1 2011/12/23 00:42:40 marka Exp $
 
+rm -f dig.out.test*
 rm -f dig.out.cyclic dig.out.fixed dig.out.random
 rm -f dig.out.0 dig.out.1 dig.out.2 dig.out.3
 rm -f ns2/root.bk
diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good1 b/bin/tests/system/rrsetorder/dig.out.cyclic.good1
new file mode 100644 (file)
index 0000000..c272c75
--- /dev/null
@@ -0,0 +1,4 @@
+1.2.3.1
+1.2.3.2
+1.2.3.3
+1.2.3.4
diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good2 b/bin/tests/system/rrsetorder/dig.out.cyclic.good2
new file mode 100644 (file)
index 0000000..6a39e3f
--- /dev/null
@@ -0,0 +1,4 @@
+1.2.3.2
+1.2.3.3
+1.2.3.4
+1.2.3.1
diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good3 b/bin/tests/system/rrsetorder/dig.out.cyclic.good3
new file mode 100644 (file)
index 0000000..6082a25
--- /dev/null
@@ -0,0 +1,4 @@
+1.2.3.3
+1.2.3.4
+1.2.3.1
+1.2.3.2
diff --git a/bin/tests/system/rrsetorder/dig.out.cyclic.good4 b/bin/tests/system/rrsetorder/dig.out.cyclic.good4
new file mode 100644 (file)
index 0000000..a5530c6
--- /dev/null
@@ -0,0 +1,4 @@
+1.2.3.4
+1.2.3.1
+1.2.3.2
+1.2.3.3
index a05e34f2828952949666dc4e678b6b85339ffaf6..c5448cabbcf3b87a13a7e08168fc30ba5b082891 100644 (file)
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: tests.sh,v 1.8 2008/10/09 21:27:52 each Exp $
+# $Id: tests.sh,v 1.8.44.1 2011/12/23 00:42:40 marka Exp $
 
 SYSTEMTESTTOP=..
 . $SYSTEMTESTTOP/conf.sh
 
 status=0
+n=0
 
 if grep "^#define DNS_RDATASET_FIXED" $TOP/config.h > /dev/null 2>&1 ; then
         test_fixed=true
@@ -31,47 +32,57 @@ fi
 #
 #
 #
+n=`expr $n + 1`
 if $test_fixed; then
-    echo "I: Checking order fixed (master)"
-    ret=0
+    echo "I: Checking order fixed (master) ($n)"
     for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
     do
+    ret=0
     $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
-           -p 5300 @10.53.0.1 fixed.example > dig.out.fixed || ret=1
-    cmp -s dig.out.fixed dig.out.fixed.good || ret=1
+           -p 5300 @10.53.0.1 fixed.example > dig.out.test$n || ret=1
+    cmp -s dig.out.test$n dig.out.fixed.good || ret=1
+    [ $ret = 0 ] && break
     done
     if [ $ret != 0 ]; then echo "I:failed"; fi
     status=`expr $status + $ret`
+else
+    echo "I: Skipped: Checking order fixed (master) ($n)"
 fi
 
 #
 #
 #
-echo "I: Checking order cyclic (master)"
+n=`expr $n + 1`
+echo "I: Checking order cyclic (master) ($n)"
 ret=0
-matches=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
+for i in 1 2 3 4
 do
-    j=`expr $i % 4`
-    $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
-           -p 5300 @10.53.0.1 cyclic.example > dig.out.cyclic || ret=1
-    if [ $i -le 4 ]; then
-        cp dig.out.cyclic dig.out.$j
-    else
-        cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1`
-    fi
+       eval match$i=0
+done
+for i in a b c d e f g h
+do
+$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+       -p 5300 @10.53.0.1 cyclic.example > dig.out.cyclic || ret=1
+       match=0
+       for j in 1 2 3 4
+       do
+               eval "cmp -s dig.out.cyclic dig.out.cyclic.good$j && match$j=1 match=1"
+               if [ $match -eq 1 ]; then break; fi
+       done
+       if [ $match -eq 0 ]; then ret=1; echo "I:unexpected order"; fi
+done
+match=0
+for i in 1 2 3 4
+do
+       eval "match=\`expr \$match + \$match$i\`"
 done
-cmp -s dig.out.0 dig.out.1 && ret=1
-cmp -s dig.out.0 dig.out.2 && ret=1
-cmp -s dig.out.0 dig.out.3 && ret=1
-cmp -s dig.out.1 dig.out.2 && ret=1
-cmp -s dig.out.1 dig.out.3 && ret=1
-cmp -s dig.out.2 dig.out.3 && ret=1
-if [ $matches -ne 16 ]; then ret=1; fi
+echo "I: Cyclic selection return $match of 4 possible orders in 8 samples"
+if [ $match -ne 4 ]; then echo ret=1; fi
 if [ $ret != 0 ]; then echo "I:failed"; fi
 status=`expr $status + $ret`
 
-echo "I: Checking order random (master)"
+n=`expr $n + 1`
+echo "I: Checking order random (master) ($n)"
 ret=0
 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 do
@@ -102,47 +113,56 @@ status=`expr $status + $ret`
 #
 #
 #
+n=`expr $n + 1`
 if $test_fixed; then
-    echo "I: Checking order fixed (slave)"
+    echo "I: Checking order fixed (slave) ($n)"
     ret=0
     for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
     do
     $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
-           -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1
-    cmp -s dig.out.fixed dig.out.fixed.good || ret=1
+           -p 5300 @10.53.0.2 fixed.example > dig.out.test$n || ret=1
+    cmp -s dig.out.test$n dig.out.fixed.good || ret=1
     done
     if [ $ret != 0 ]; then echo "I:failed"; fi
     status=`expr $status + $ret`
+else
+    echo "I: Skipped: Checking order fixed (slave) ($n)"
 fi
 
 #
 #
 #
-echo "I: Checking order cyclic (slave)"
+n=`expr $n + 1`
+echo "I: Checking order cyclic (slave) ($n)"
 ret=0
-matches=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
+for i in 1 2 3 4
 do
-    j=`expr $i % 4`
-    $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
-           -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1
-    if [ $i -le 4 ]; then
-        cp dig.out.cyclic dig.out.$j
-    else
-        cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1`
-    fi
+       eval match$i=0
 done
-cmp -s dig.out.0 dig.out.1 && ret=1
-cmp -s dig.out.0 dig.out.2 && ret=1
-cmp -s dig.out.0 dig.out.3 && ret=1
-cmp -s dig.out.1 dig.out.2 && ret=1
-cmp -s dig.out.1 dig.out.3 && ret=1
-cmp -s dig.out.2 dig.out.3 && ret=1
-if [ $matches -ne 16 ]; then ret=1; fi
+for i in a b c d e f g h
+do
+$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+       -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1
+       match=0
+       for j in 1 2 3 4
+       do
+               eval "cmp -s dig.out.cyclic dig.out.cyclic.good$j && match$j=1 match=1"
+               if [ $match -eq 1 ]; then break; fi
+       done
+       if [ $match -eq 0 ]; then ret=1; echo "I:unexpected order"; fi
+done
+match=0
+for i in 1 2 3 4
+do
+       eval "match=\`expr \$match + \$match$i\`"
+done
+echo "I: Cyclic selection return $match of 4 possible orders in 8 samples"
+if [ $match -ne 4 ]; then echo ret=1; fi
 if [ $ret != 0 ]; then echo "I:failed"; fi
 status=`expr $status + $ret`
 
-echo "I: Checking order random (slave)"
+n=`expr $n + 1`
+echo "I: Checking order random (slave) ($n)"
 ret=0
 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 do
@@ -174,7 +194,8 @@ echo "I: Shutting down slave"
 
 (cd ..; sh stop.sh rrsetorder ns2 )
 
-echo "I: Checking for slave's on disk copy of zone"
+n=`expr $n + 1`
+echo "I: Checking for slave's on disk copy of zone ($n)"
 
 if [ ! -f ns2/root.bk ]
 then
@@ -189,47 +210,59 @@ echo "I: Re-starting slave"
 #
 #
 #
+n=`expr $n + 1`
 if $test_fixed; then
-    echo "I: Checking order fixed (slave loaded from disk)"
-    ret=0
+    echo "I: Checking order fixed (slave loaded from disk) ($n)"
     for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
     do
+    ret=0
     $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
-           -p 5300 @10.53.0.2 fixed.example > dig.out.fixed || ret=1
-    cmp -s dig.out.fixed dig.out.fixed.good || ret=1
+           -p 5300 @10.53.0.2 fixed.example > dig.out.test$n || ret=1
+    cmp -s dig.out.test$n dig.out.fixed.good || ret=1
+    [ $ret = 0 ] && break
+    sleep 1
     done
     if [ $ret != 0 ]; then echo "I:failed"; fi
     status=`expr $status + $ret`
+else
+    echo "I: Skipped: Checking order fixed (slave loaded from disk) ($n)"
+
 fi
 
 #
 #
 #
-echo "I: Checking order cyclic (slave loaded from disk)"
+n=`expr $n + 1`
+echo "I: Checking order cyclic (slave loaded from disk) ($n)"
 ret=0
-matches=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
+for i in 1 2 3 4
 do
-    j=`expr $i % 4`
-    $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
-           -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1
-    if [ $i -le 4 ]; then
-        cp dig.out.cyclic dig.out.$j
-    else
-        cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1`
-    fi
+       eval match$i=0
+done
+for i in a b c d e f g h
+do
+$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+       -p 5300 @10.53.0.2 cyclic.example > dig.out.cyclic || ret=1
+       match=0
+       for j in 1 2 3 4
+       do
+               eval "cmp -s dig.out.cyclic dig.out.cyclic.good$j && match$j=1 match=1"
+               if [ $match -eq 1 ]; then break; fi
+       done
+       if [ $match -eq 0 ]; then ret=1; echo "I:unexpected order"; fi
+done
+match=0
+for i in 1 2 3 4
+do
+       eval "match=\`expr \$match + \$match$i\`"
 done
-cmp -s dig.out.0 dig.out.1 && ret=1
-cmp -s dig.out.0 dig.out.2 && ret=1
-cmp -s dig.out.0 dig.out.3 && ret=1
-cmp -s dig.out.1 dig.out.2 && ret=1
-cmp -s dig.out.1 dig.out.3 && ret=1
-cmp -s dig.out.2 dig.out.3 && ret=1
-if [ $matches -ne 16 ]; then ret=1; fi
+echo "I: Cyclic selection return $match of 4 possible orders in 8 samples"
+if [ $match -ne 4 ]; then echo ret=1; fi
 if [ $ret != 0 ]; then echo "I:failed"; fi
 status=`expr $status + $ret`
 
-echo "I: Checking order random (slave loaded from disk)"
+n=`expr $n + 1`
+echo "I: Checking order random (slave loaded from disk) ($n)"
 ret=0
 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 do
@@ -260,47 +293,57 @@ status=`expr $status + $ret`
 #
 #
 #
+n=`expr $n + 1`
 if $test_fixed; then
-    echo "I: Checking order fixed (cache)"
+    echo "I: Checking order fixed (cache) ($n)"
     ret=0
     for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
     do
     $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
-           -p 5300 @10.53.0.3 fixed.example > dig.out.fixed || ret=1
-    cmp -s dig.out.fixed dig.out.fixed.good || ret=1
+           -p 5300 @10.53.0.3 fixed.example > dig.out.test$n || ret=1
+    cmp -s dig.out.test$n dig.out.fixed.good || ret=1
     done
     if [ $ret != 0 ]; then echo "I:failed"; fi
     status=`expr $status + $ret`
+else
+    echo "I: Skipped: Checking order fixed (cache) ($n)"
 fi
 
 #
 #
 #
-echo "I: Checking order cyclic (cache)"
+n=`expr $n + 1`
+echo "I: Checking order cyclic (cache) ($n)"
 ret=0
-matches=0
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
+for i in 1 2 3 4
 do
-    j=`expr $i % 4`
-    $DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
-           -p 5300 @10.53.0.3 cyclic.example > dig.out.cyclic || ret=1
-    if [ $i -le 4 ]; then
-        cp dig.out.cyclic dig.out.$j
-    else
-        cmp -s dig.out.cyclic dig.out.$j && matches=`expr $matches + 1`
-    fi
+       eval match$i=0
+done
+for i in a b c d e f g h
+do
+$DIG +nosea +nocomm +nocmd +noquest +noadd +noauth +nocomm +nostat +short \
+       -p 5300 @10.53.0.3 cyclic.example > dig.out.cyclic || ret=1
+       match=0
+       for j in 1 2 3 4
+       do
+               eval "cmp -s dig.out.cyclic dig.out.cyclic.good$j && match$j=1 match=1"
+               if [ $match -eq 1 ]; then break; fi
+       done
+       if [ $match -eq 0 ]; then ret=1; echo "I:unexpected order"; fi
+done
+match=0
+for i in 1 2 3 4
+do
+       eval "match=\`expr \$match + \$match$i\`"
 done
-cmp -s dig.out.0 dig.out.1 && ret=1
-cmp -s dig.out.0 dig.out.2 && ret=1
-cmp -s dig.out.0 dig.out.3 && ret=1
-cmp -s dig.out.1 dig.out.2 && ret=1
-cmp -s dig.out.1 dig.out.3 && ret=1
-cmp -s dig.out.2 dig.out.3 && ret=1
-if [ $matches -ne 16 ]; then ret=1; fi
+echo "I: Cyclic selection return $match of 4 possible orders in 8 samples"
+if [ $match -ne 4 ]; then echo ret=1; fi
 if [ $ret != 0 ]; then echo "I:failed"; fi
 status=`expr $status + $ret`
+n=`expr $n + 1`
 
-echo "I: Checking order random (cache)"
+n=`expr $n + 1`
+echo "I: Checking order random (cache) ($n)"
 ret=0
 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
 do