From afa9deb93bc57f06d2034f01fd2d405f0fc3551d Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Fri, 1 Aug 2008 02:45:28 +0000 Subject: [PATCH] Updated VNET+ tests --- qaapi/qa/tests/node/nmapitest.py | 10 ++++ qaapi/qa/tests/node/ping.pl | 40 ++++++++++++++ qaapi/qa/tests/node/synacks.pl | 6 +- qaapi/qa/tests/node/traceroutes.pl | 88 ++++++++++++++++++++---------- 4 files changed, 114 insertions(+), 30 deletions(-) create mode 100755 qaapi/qa/tests/node/nmapitest.py create mode 100755 qaapi/qa/tests/node/ping.pl diff --git a/qaapi/qa/tests/node/nmapitest.py b/qaapi/qa/tests/node/nmapitest.py new file mode 100755 index 0000000..f934eb1 --- /dev/null +++ b/qaapi/qa/tests/node/nmapitest.py @@ -0,0 +1,10 @@ +#!/usr/bin/python +# Module: VNET+ +# Description: +# Connect to the node manager +# Author: acb@cs.princeton.edu + +from xmlrpclib import ServerProxy + +nodemanager = ServerProxy('http://127.0.0.1:812/') +nodemanager.SetLoans('pl_sirius', []) diff --git a/qaapi/qa/tests/node/ping.pl b/qaapi/qa/tests/node/ping.pl new file mode 100755 index 0000000..bbc4b58 --- /dev/null +++ b/qaapi/qa/tests/node/ping.pl @@ -0,0 +1,40 @@ +#!/usr/bin/perl + +# Module: VNET+ +# Description: Generate ping packets and count the responses +# Author: sapanb@cs.princeton.edu + +use strict; +use threads; + +#please change to something local +my $guineapig='planetlab-1.cs.princeton.edu'; +my $numiter=1000; + +sub run { + system("ping -c $numiter -i 0.1 $guineapig"); + } + + +sub open_tcpdump { + my $filter="icmp and src $guineapig"; + my $cmdline="/usr/sbin/tcpdump -c $numiter $filter"; + + system($cmdline); +} + +sub alhandler { + print "[FAILED] tcpdump apparently did not intercept all SYN/ACK packets\n"; + exit(-1); +} + +print "Starting tcpdump...\n"; +my $tcpdthr=threads->create(\&open_tcpdump); +sleep 10; +print "Generating connections...\n"; +run; +$SIG{ALRM}=\&alhandler; +alarm(60); + +$tcpdthr->join; +print "[SUCCESS] Test completed OK.\n"; diff --git a/qaapi/qa/tests/node/synacks.pl b/qaapi/qa/tests/node/synacks.pl index 092a509..6f7ef6a 100755 --- a/qaapi/qa/tests/node/synacks.pl +++ b/qaapi/qa/tests/node/synacks.pl @@ -1,5 +1,9 @@ #!/usr/bin/perl -# Generate a ton of connections and check if we can see syn/ack packets via tcpdump + +# Module: VNET+ +# Description: +# Generate a ton of connections and check if we can see syn/ack packets via tcpdump. +# Author: sapanb@cs.princeton.edu use strict; use IO::Socket; diff --git a/qaapi/qa/tests/node/traceroutes.pl b/qaapi/qa/tests/node/traceroutes.pl index 1586dbc..948c90c 100755 --- a/qaapi/qa/tests/node/traceroutes.pl +++ b/qaapi/qa/tests/node/traceroutes.pl @@ -1,70 +1,100 @@ #!/usr/bin/perl -# Generate a ton of connections and check if we can see syn/ack packets via tcpdump +# Module: VNET+ +# Description: Trace the route path to a node using two methods: TCP-related ICMP errors, and TTL expiry. +# Then match the two paths to see that they concord. If there's a slight difference, it's probably OK given that +# some routers might support one type of error but not the other, and that the routes are not guaranteed to be the +# same. +# Dependencies: tcptraceroute, traceroute, which +# Author: sapanb@cs.princeton.edu + +$|=1; + +# ******************************************************************************** +# CONFIGURATION + + +# The node that we're going to trace route. It's probably a good idea to change it +# periodically so that we don't harass the same host. my $guineapig="vini-veritas.net"; -my $ttraceroute="/usr/sbin/tcptraceroute"; -my $traceroute="/usr/sbin/tracepath"; + +# Location of traceroute, tcptraceroute +my $ttraceroute=`which tcptraceroute 2>/dev/null`; +my $traceroute=`which traceroute 2>/dev/null`; + +chop($ttraceroute); +chop($traceroute); + +if ($traceroute !~ /^\//) { + $traceroute=`which tracepath 2>/dev/null`; + chop($traceroute); +} + +if (!-e "$ttraceroute") { + print $ttraceroute."\n"; + die("[FAILED] Please install tcptraceroute in the slice before running this test\n"); +} +else { + print "Found rcptraceroute. Good.\n"; +} + +if ($traceroute !~ /^\//) { + die("[FAILED] Please install traceroute in the slice before running this test\n"); +} + +my %hash; sub open_tcptraceroute { - if (!-e "$ttraceroute") { - die("[FAILED] Please install tcptraceroute in the slice before running this test\n"); - } my $cmdline="$ttraceroute $guineapig"; my $out=''; - my %result; open TT,"$cmdline|"; while () { if (/\((\d+\.\d+\.\d+\.\d+)\)/) { - $result{$1}=$result{$1}+1; + glob %hash; + print ">>> $_"; + $hash{$1}++; } } - return %result; - } sub open_traceroute { - if (!-e "$traceroute") { - die("[FAILED] Please install tcptraceroute in the slice before running this test\n"); - } my $ref=shift; my $cmdline="$traceroute $guineapig"; my $out=''; - my %result=%$ref;; + print $cmdline."\n"; open TT,"$cmdline|"; while () { if (/\((\d+\.\d+\.\d+\.\d+)\)/) { - $result{$1}=$results{$1}+1; + glob %hash; + print ">>> $_"; + $hash{$1}=$hash{$1}+1; } } - return %result; - } sub compare { my $ref=shift; - my %a1=%$ref; my $ret=1; my $double=0; my $single=0; - foreach (keys %a1) { - print "$_->".$a1{$_}."\n"; - if ($a1{$_}==1) { - print "Single: $_\n"; + glob %hash; + foreach (keys %hash) { + if ($hash{$_}==1) { $single++; - } elsif ($a1{$_}==2) { - print "Double: $_\n"; + } elsif ($hash{$_}==2) { + print "Concorded on $_\n"; $double++; } - else { die ("bug in test script");} + else { die ("[FAILED] Could not complete test.\n");} } return ($single,$double); } sub alhandler { - print "[FAILED] Timed out waiting\n"; + print "[FAILED] Timed out waiting.\n"; exit(-1); } @@ -74,9 +104,9 @@ if (fork==0) { my $s; my $d; - %r1=open_tcptraceroute; - %r1=open_traceroute %r1; - ($s,$d)=compare(\%r1); + open_tcptraceroute; + open_traceroute; + ($s,$d)=compare; if ($s==0 && $d>2) { print "[SUCCESS] traceroute and tcptraceroute reported the same result. $d hops.\n"; exit(0); -- 2.43.0