X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/blobdiff_plain/d245350adb5c3c687159409dcecc24fd1e7098d0..9cda68ab3974b1f2c08a5896929890bf4a973e9a:/server/tests.at?ds=sidebyside diff --git a/server/tests.at b/server/tests.at index ab64c538..e0eaa05b 100644 --- a/server/tests.at +++ b/server/tests.at @@ -40,6 +40,7 @@ m4_define([TRIPECTL], [$abs_top_builddir/client/tripectl -d. -aadmin]) m4_define([USLIP], [$abs_top_builddir/uslip/tripe-uslip]) m4_define([PKSTREAM], [$abs_top_builddir/pkstream/pkstream -b127.0.0.1 -p127.0.0.1]) +m4_define([MITM], [$abs_top_builddir/proxy/tripe-mitm]) ## Sequences. (These are used for testing the replay protection machinery.) m4_define([R32], [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dnl @@ -181,10 +182,24 @@ m4_define([WITH_3TRIPES], [WITH_TRIPEX([$3], [$4 $7], [$8])])])]) -## COMMS_EPING(adir, aname, bdir, bname) +## RETRY(n, body) +m4_define([RETRY], [ + n=0 rc=1 + while test $n -lt $1; do + if $2 + then rc=0; break + fi + n=$(( $n + 1 )) + done + exit $rc +]) + +## COMMS_EPING(adir, aname, bdir, bname, [n]) m4_define([COMMS_EPING], [ - AT_CHECK([TRIPECTL -d$1 EPING $4],, [ignore]) - AT_CHECK([TRIPECTL -d$3 EPING $2],, [ignore]) + AT_CHECK([RETRY([m4_default([$5], [1])], + [TRIPECTL -d$1 EPING $4])],, [ignore]) + AT_CHECK([RETRY([m4_default([$5], [1])], + [TRIPECTL -d$3 EPING $2])],, [ignore]) ]) ## COMMS_SLIP(adir, aname, bdir, bname) @@ -423,6 +438,44 @@ WITH_3TRIPES([alice], [bob], [carol], [-nslip], AT_CLEANUP +###-------------------------------------------------------------------------- +### Adverse communication. + +AT_SETUP([server retry]) +AT_KEYWORDS([backoff]) +export TRIPE_SLIPIF=USLIP + +for i in alice bob; do (mkdir $i; cd $i; SETUPDIR([beta])); done + +WITH_2TRIPES([alice], [bob], [-nslip], [-talice], [-tbob], [ + + ## Set up the evil proxy. + alicemitm=24516 bobmitm=14016 + MITM -kalice/keyring.pub >mitm.out 2>mitm.err \ + peer:alice:$alicemitm:127.0.0.1:$(cat alice/port) \ + peer:bob:$bobmitm:127.0.0.1:$(cat bob/port) \ + filt:drop:5 filt:send& mitmpid=$! + strace -omitm.trace -p$mitmpid& mitmtrace=$! + trap 'kill $mitmpid $mitmtrace; exit 127' EXIT INT QUIT TERM HUP + + ## Try to establish keys anyway. + AWAIT_KXDONE([alice], [alice], [bob], [bob], [ + AT_CHECK([TRIPECTL -dalice ADD -cork bob INET 127.0.0.1 $alicemitm]) + AT_CHECK([TRIPECTL -dbob ADD alice INET 127.0.0.1 $bobmitm]) + ]) + + ## Check pinging. + COMMS_EPING([alice], [alice], [bob], [bob], [10]) + COMMS_EPING([bob], [bob], [alice], [alice], [10]) + + ## Tear down the MITM proxy. + kill $mitmpid + wait $mitmpid + wait $mitmtrace +]) + +AT_CLEANUP + ###-------------------------------------------------------------------------- ### Services.