runs sanity checks again : run all the test scripts in qaapi/qa/tests/{node,slice}
[tests.git] / qaapi / qa / tests / node / synacks.pl.hide
1 #!/usr/bin/perl
2
3 # Module: VNET+
4 # Description:  
5 # Generate a ton of connections and check if we can see syn/ack packets via tcpdump.
6 # Author: sapanb@cs.princeton.edu
7
8 use strict;
9 use IO::Socket;
10 use threads;
11 use threads::shared;
12
13 my $guineapig='www.cs.princeton.edu';
14 my $targetfile='/~sapanb/small';
15 my $magic='3j4kl;1234kj341234jl1k234ljk123h4';
16 my $numiter=1000;
17 my $numsynacks:shared=0;
18 my $numthreads=4;
19 my $numpackets=$numthreads*$numiter;
20
21 sub fetch {
22         my $sock = new IO::Socket::INET (
23                 PeerAddr => $guineapig,
24                 PeerPort => 80,
25                 Proto => 'tcp'
26         );
27         return 0 unless $sock;
28         print $sock "GET $targetfile HTTP/1.0\r\n";
29         print $sock "Host: www.cs.princeton.edu\r\n";
30         print $sock "\r\n";
31
32         my $success=0;
33         while (<$sock>) {
34                 if (/$magic/g) {
35                         $success=1;
36                         last;
37                 }
38         }
39         close ($sock);
40         if ($success==1) {
41                 $numsynacks=$numsynacks+1;
42         }
43         return $success;
44 }
45
46 sub mfetch {
47         foreach (1..$numiter) {
48                 fetch;
49         }
50 }
51
52 sub launch {
53         my @tarray;
54         foreach (1..$numthreads) {
55                 my $thr = threads->create(\&mfetch);
56                 push @tarray,$thr;
57         }
58
59         for (@tarray) {
60                 $_->join;
61         }
62 }
63
64 sub open_tcpdump {
65         my $filter="'tcp[tcpflags]&tcp-syn !=0 and tcp[tcpflags]&tcp-ack !=0 and src $guineapig'";
66         my $cmdline="/usr/sbin/tcpdump -c $numpackets $filter";
67         my $p;
68         
69         system($cmdline);
70 }
71
72 sub alhandler {
73         print "[FAILED] tcpdump apparently did not intercept all SYN/ACK packets\n";
74         exit(-1);
75 }
76
77 print "Starting tcpdump...\n";
78 my $tcpdthr=threads->create(\&open_tcpdump);
79 sleep 10;
80 print "Generating connections...\n";
81 launch;
82 $SIG{ALRM}=\&alhandler;
83 alarm(60);
84 $tcpdthr->join;
85 $numsynacks++;
86 print "[SUCCESS] Test completed OK. $numsynacks SYN/ACK packets intercepted.\n";