1*d0eba39bSchristos# #-- tcp_reuse.test --# 2*d0eba39bSchristos# source the master var file when it's there 3*d0eba39bSchristos[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master 4*d0eba39bSchristos# use .tpkg.var.test for in test variable passing 5*d0eba39bSchristos[ -f .tpkg.var.test ] && source .tpkg.var.test 6*d0eba39bSchristos 7*d0eba39bSchristosPRE="../.." 8*d0eba39bSchristos. ../common.sh 9*d0eba39bSchristos 10*d0eba39bSchristosget_make 11*d0eba39bSchristos(cd $PRE; $MAKE streamtcp) 12*d0eba39bSchristos 13*d0eba39bSchristosecho "> query www1.example.com." 14*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN >outfile 2>&1 15*d0eba39bSchristoscat outfile 16*d0eba39bSchristosif test "$?" -ne 0; then 17*d0eba39bSchristos echo "exit status not OK" 18*d0eba39bSchristos echo "> cat logfiles" 19*d0eba39bSchristos cat outfile 20*d0eba39bSchristos cat unbound2.log 21*d0eba39bSchristos cat unbound.log 22*d0eba39bSchristos echo "Not OK" 23*d0eba39bSchristos exit 1 24*d0eba39bSchristosfi 25*d0eba39bSchristosif grep "www1.example.com" outfile | grep "10.20.30.41"; then 26*d0eba39bSchristos echo "content OK" 27*d0eba39bSchristoselse 28*d0eba39bSchristos echo "result contents not OK, for www1.example.com" 29*d0eba39bSchristos echo "> cat logfiles" 30*d0eba39bSchristos cat outfile 31*d0eba39bSchristos cat unbound2.log 32*d0eba39bSchristos cat unbound.log 33*d0eba39bSchristos echo "result contents not OK, for www1.example.com" 34*d0eba39bSchristos exit 1 35*d0eba39bSchristosfi 36*d0eba39bSchristosecho "OK" 37*d0eba39bSchristosecho "" 38*d0eba39bSchristos 39*d0eba39bSchristos# this should be reused on the same tcp stream: 40*d0eba39bSchristosecho "> query www2.example.com." 41*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN >outfile 2>&1 42*d0eba39bSchristoscat outfile 43*d0eba39bSchristosif test "$?" -ne 0; then 44*d0eba39bSchristos echo "exit status not OK" 45*d0eba39bSchristos echo "> cat logfiles" 46*d0eba39bSchristos cat outfile 47*d0eba39bSchristos cat unbound2.log 48*d0eba39bSchristos cat unbound.log 49*d0eba39bSchristos echo "Not OK" 50*d0eba39bSchristos exit 1 51*d0eba39bSchristosfi 52*d0eba39bSchristosif grep "www2.example.com" outfile | grep "10.20.30.42"; then 53*d0eba39bSchristos echo "content OK" 54*d0eba39bSchristoselse 55*d0eba39bSchristos echo "result contents not OK, for www2.example.com" 56*d0eba39bSchristos echo "> cat logfiles" 57*d0eba39bSchristos cat outfile 58*d0eba39bSchristos cat unbound2.log 59*d0eba39bSchristos cat unbound.log 60*d0eba39bSchristos echo "result contents not OK, for www2.example.com" 61*d0eba39bSchristos exit 1 62*d0eba39bSchristosfi 63*d0eba39bSchristos 64*d0eba39bSchristosecho "> query refuse.net." 65*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT refuse.net. A IN >outfile 2>&1 66*d0eba39bSchristoscat outfile 67*d0eba39bSchristosif test "$?" -ne 0; then 68*d0eba39bSchristos echo "exit status not OK" 69*d0eba39bSchristos echo "> cat logfiles" 70*d0eba39bSchristos cat outfile 71*d0eba39bSchristos cat unbound2.log 72*d0eba39bSchristos cat unbound.log 73*d0eba39bSchristos echo "Not OK" 74*d0eba39bSchristos exit 1 75*d0eba39bSchristosfi 76*d0eba39bSchristosif grep "rcode: SERVFAIL" outfile; then 77*d0eba39bSchristos echo "content OK" 78*d0eba39bSchristoselse 79*d0eba39bSchristos echo "result contents not OK, for refuse.net" 80*d0eba39bSchristos echo "> cat logfiles" 81*d0eba39bSchristos cat outfile 82*d0eba39bSchristos cat unbound2.log 83*d0eba39bSchristos cat unbound.log 84*d0eba39bSchristos echo "result contents not OK, for refuse.net" 85*d0eba39bSchristos exit 1 86*d0eba39bSchristosfi 87*d0eba39bSchristos 88*d0eba39bSchristosecho "> query www3.example.com." 89*d0eba39bSchristosecho "> query www4.example.com." 90*d0eba39bSchristosecho "> query www5.example.com." 91*d0eba39bSchristosecho "> query www6.example.com." 92*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www3.example.com. A IN >outfile3 2>&1 & 93*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN >outfile4 2>&1 & 94*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN >outfile5 2>&1 & 95*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN >outfile6 2>&1 & 96*d0eba39bSchristoswait 97*d0eba39bSchristosif test "$?" -ne 0; then 98*d0eba39bSchristos echo "exit status not OK" 99*d0eba39bSchristos echo "> cat logfiles" 100*d0eba39bSchristos cat outfile3 101*d0eba39bSchristos cat outfile4 102*d0eba39bSchristos cat outfile5 103*d0eba39bSchristos cat outfile6 104*d0eba39bSchristos cat unbound2.log 105*d0eba39bSchristos cat unbound.log 106*d0eba39bSchristos echo "Not OK" 107*d0eba39bSchristos exit 1 108*d0eba39bSchristosfi 109*d0eba39bSchristosif grep "www3.example.com" outfile3 | grep "10.20.30.43"; then 110*d0eba39bSchristos echo "content OK" 111*d0eba39bSchristoselse 112*d0eba39bSchristos echo "result contents not OK, for www3.example.com" 113*d0eba39bSchristos echo "> cat logfiles" 114*d0eba39bSchristos cat outfile3 115*d0eba39bSchristos cat outfile4 116*d0eba39bSchristos cat outfile5 117*d0eba39bSchristos cat outfile6 118*d0eba39bSchristos cat unbound2.log 119*d0eba39bSchristos cat unbound.log 120*d0eba39bSchristos echo "result contents not OK, for www3.example.com" 121*d0eba39bSchristos exit 1 122*d0eba39bSchristosfi 123*d0eba39bSchristosif grep "www4.example.com" outfile4 | grep "10.20.30.44"; then 124*d0eba39bSchristos echo "content OK" 125*d0eba39bSchristoselse 126*d0eba39bSchristos echo "result contents not OK, for www4.example.com" 127*d0eba39bSchristos echo "> cat logfiles" 128*d0eba39bSchristos cat outfile3 129*d0eba39bSchristos cat outfile4 130*d0eba39bSchristos cat outfile5 131*d0eba39bSchristos cat outfile6 132*d0eba39bSchristos cat unbound2.log 133*d0eba39bSchristos cat unbound.log 134*d0eba39bSchristos echo "result contents not OK, for www4.example.com" 135*d0eba39bSchristos exit 1 136*d0eba39bSchristosfi 137*d0eba39bSchristosif grep "www5.example.com" outfile5 | grep "10.20.30.45"; then 138*d0eba39bSchristos echo "content OK" 139*d0eba39bSchristoselse 140*d0eba39bSchristos echo "result contents not OK, for www5.example.com" 141*d0eba39bSchristos echo "> cat logfiles" 142*d0eba39bSchristos cat outfile3 143*d0eba39bSchristos cat outfile4 144*d0eba39bSchristos cat outfile5 145*d0eba39bSchristos cat outfile6 146*d0eba39bSchristos cat unbound2.log 147*d0eba39bSchristos cat unbound.log 148*d0eba39bSchristos echo "result contents not OK, for www5.example.com" 149*d0eba39bSchristos exit 1 150*d0eba39bSchristosfi 151*d0eba39bSchristosif grep "www6.example.com" outfile6 | grep "10.20.30.46"; then 152*d0eba39bSchristos echo "content OK" 153*d0eba39bSchristoselse 154*d0eba39bSchristos echo "result contents not OK, for www6.example.com" 155*d0eba39bSchristos echo "> cat logfiles" 156*d0eba39bSchristos cat outfile3 157*d0eba39bSchristos cat outfile4 158*d0eba39bSchristos cat outfile5 159*d0eba39bSchristos cat outfile6 160*d0eba39bSchristos cat unbound2.log 161*d0eba39bSchristos cat unbound.log 162*d0eba39bSchristos echo "result contents not OK, for www6.example.com" 163*d0eba39bSchristos exit 1 164*d0eba39bSchristosfi 165*d0eba39bSchristos 166*d0eba39bSchristosecho "> query a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net" 167*d0eba39bSchristos$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a1.more.net A IN a2.more.net A IN a3.more.net A IN a4.more.net A IN a5.more.net A IN >outfile 2>&1 168*d0eba39bSchristosif test "$?" -ne 0; then 169*d0eba39bSchristos echo "exit status not OK" 170*d0eba39bSchristos echo "> cat logfiles" 171*d0eba39bSchristos cat outfile 172*d0eba39bSchristos cat unbound2.log 173*d0eba39bSchristos cat unbound.log 174*d0eba39bSchristos echo "Not OK" 175*d0eba39bSchristos exit 1 176*d0eba39bSchristosfi 177*d0eba39bSchristoscat outfile 178*d0eba39bSchristosfor x in a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net; do 179*d0eba39bSchristos if grep "$x" outfile | grep "10.20.30.40"; then 180*d0eba39bSchristos echo "content OK for $x" 181*d0eba39bSchristos else 182*d0eba39bSchristos echo "result contents not OK, for $x" 183*d0eba39bSchristos echo "> cat logfiles" 184*d0eba39bSchristos cat outfile 185*d0eba39bSchristos cat unbound2.log 186*d0eba39bSchristos cat unbound.log 187*d0eba39bSchristos echo "result contents not OK, for $x" 188*d0eba39bSchristos exit 1 189*d0eba39bSchristos fi 190*d0eba39bSchristosdone 191*d0eba39bSchristos 192*d0eba39bSchristos# make the server timeout to drop the upstream connection 193*d0eba39bSchristosecho "> sleep 15" 194*d0eba39bSchristossleep 15 195*d0eba39bSchristos# see if we are still up. 196*d0eba39bSchristosecho "> query a7.more.net" 197*d0eba39bSchristos$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a7.more.net A IN >outfile 2>&1 198*d0eba39bSchristosif test "$?" -ne 0; then 199*d0eba39bSchristos echo "exit status not OK" 200*d0eba39bSchristos echo "> cat logfiles" 201*d0eba39bSchristos cat outfile 202*d0eba39bSchristos cat unbound2.log 203*d0eba39bSchristos cat unbound.log 204*d0eba39bSchristos echo "Not OK" 205*d0eba39bSchristos exit 1 206*d0eba39bSchristosfi 207*d0eba39bSchristoscat outfile 208*d0eba39bSchristosfor x in a7.more.net; do 209*d0eba39bSchristos if grep "$x" outfile | grep "10.20.30.40"; then 210*d0eba39bSchristos echo "content OK for $x" 211*d0eba39bSchristos else 212*d0eba39bSchristos echo "result contents not OK, for $x" 213*d0eba39bSchristos echo "> cat logfiles" 214*d0eba39bSchristos cat outfile 215*d0eba39bSchristos cat unbound2.log 216*d0eba39bSchristos cat unbound.log 217*d0eba39bSchristos echo "result contents not OK, for $x" 218*d0eba39bSchristos exit 1 219*d0eba39bSchristos fi 220*d0eba39bSchristosdone 221*d0eba39bSchristos 222*d0eba39bSchristos# dropconn.drop.net make the server drop the connection. 223*d0eba39bSchristosecho "> query a11.more.net a12.more.net dropconn.drop.net a14.more.net a15.more.net" 224*d0eba39bSchristos$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a11.more.net A IN a12.more.net A IN dropconn.drop.net A IN a14.more.net A IN a15.more.net A IN >outfile 2>&1 225*d0eba39bSchristosif test "$?" -ne 0; then 226*d0eba39bSchristos echo "exit status not OK" 227*d0eba39bSchristos echo "> cat logfiles" 228*d0eba39bSchristos cat outfile 229*d0eba39bSchristos cat unbound2.log 230*d0eba39bSchristos cat unbound.log 231*d0eba39bSchristos echo "Not OK" 232*d0eba39bSchristos exit 1 233*d0eba39bSchristosfi 234*d0eba39bSchristoscat outfile 235*d0eba39bSchristos# cannot really check outfile, because it may or may not have answers depending 236*d0eba39bSchristos# on how fast the other server responds or the drop happens, but there are 237*d0eba39bSchristos# a bunch of connection drops, whilst resolving the other queries. 238*d0eba39bSchristos 239*d0eba39bSchristosecho "> query drop.net." 240*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT drop.net. A IN >outfile 2>&1 241*d0eba39bSchristoscat outfile 242*d0eba39bSchristosif test "$?" -ne 0; then 243*d0eba39bSchristos echo "exit status not OK" 244*d0eba39bSchristos echo "> cat logfiles" 245*d0eba39bSchristos cat outfile 246*d0eba39bSchristos cat unbound2.log 247*d0eba39bSchristos cat unbound.log 248*d0eba39bSchristos echo "Not OK" 249*d0eba39bSchristos exit 1 250*d0eba39bSchristosfi 251*d0eba39bSchristosif grep "rcode: SERVFAIL" outfile; then 252*d0eba39bSchristos echo "content OK" 253*d0eba39bSchristoselse 254*d0eba39bSchristos echo "result contents not OK, for drop.net" 255*d0eba39bSchristos echo "> cat logfiles" 256*d0eba39bSchristos cat outfile 257*d0eba39bSchristos cat unbound2.log 258*d0eba39bSchristos cat unbound.log 259*d0eba39bSchristos echo "result contents not OK, for drop.net" 260*d0eba39bSchristos exit 1 261*d0eba39bSchristosfi 262*d0eba39bSchristos 263*d0eba39bSchristos 264*d0eba39bSchristos# timeouts at the end. (so that the server is not marked as failed for 265*d0eba39bSchristos# the other tests). 266*d0eba39bSchristosecho "> query q1.drop.net." 267*d0eba39bSchristosecho "> query q2.drop.net." 268*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q1.drop.net. A IN >outfile1 2>&1 & 269*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q2.drop.net. A IN >outfile2 2>&1 & 270*d0eba39bSchristoswait 271*d0eba39bSchristosif test "$?" -ne 0; then 272*d0eba39bSchristos echo "exit status not OK" 273*d0eba39bSchristos echo "> cat logfiles" 274*d0eba39bSchristos cat outfile1 275*d0eba39bSchristos cat outfile2 276*d0eba39bSchristos cat unbound2.log 277*d0eba39bSchristos cat unbound.log 278*d0eba39bSchristos echo "Not OK" 279*d0eba39bSchristos exit 1 280*d0eba39bSchristosfi 281*d0eba39bSchristoscat outfile1 282*d0eba39bSchristoscat outfile2 283*d0eba39bSchristosif grep "rcode: SERVFAIL" outfile1; then 284*d0eba39bSchristos echo "content OK" 285*d0eba39bSchristoselse 286*d0eba39bSchristos echo "result contents not OK, for q1.drop.net" 287*d0eba39bSchristos echo "> cat logfiles" 288*d0eba39bSchristos cat outfile1 289*d0eba39bSchristos cat outfile2 290*d0eba39bSchristos cat unbound2.log 291*d0eba39bSchristos cat unbound.log 292*d0eba39bSchristos echo "result contents not OK, for q1.drop.net" 293*d0eba39bSchristos exit 1 294*d0eba39bSchristosfi 295*d0eba39bSchristosif grep "rcode: SERVFAIL" outfile2; then 296*d0eba39bSchristos echo "content OK" 297*d0eba39bSchristoselse 298*d0eba39bSchristos echo "result contents not OK, for q2.drop.net" 299*d0eba39bSchristos echo "> cat logfiles" 300*d0eba39bSchristos cat outfile1 301*d0eba39bSchristos cat outfile2 302*d0eba39bSchristos cat unbound2.log 303*d0eba39bSchristos cat unbound.log 304*d0eba39bSchristos echo "result contents not OK, for q2.drop.net" 305*d0eba39bSchristos exit 1 306*d0eba39bSchristosfi 307*d0eba39bSchristos 308*d0eba39bSchristosecho "OK" 309*d0eba39bSchristosexit 0 310