-more uniform naming of statisitcs
[oweals/gnunet.git] / src / integration-tests / test_integration_connect_on_restart.py.in
1 #!@PYTHON@
2 #    This file is part of GNUnet.
3 #    (C) 2010 Christian Grothoff (and other contributing authors)
4 #
5 #    GNUnet is free software; you can redistribute it and/or modify
6 #    it under the terms of the GNU General Public License as published
7 #    by the Free Software Foundation; either version 2, or (at your
8 #    option) any later version.
9 #
10 #    GNUnet is distributed in the hope that it will be useful, but
11 #    WITHOUT ANY WARRANTY; without even the implied warranty of
12 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 #    General Public License for more details.
14 #
15 #    You should have received a copy of the GNU General Public License
16 #    along with GNUnet; see the file COPYING.  If not, write to the
17 #    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 #    Boston, MA 02111-1307, USA.
19 #
20
21 #
22 # This test starts 3 peers and expects bootstrap and a connected clique
23 # After a successful clique it shuts down all peers and starts the non-bootstrap
24 # peers, expecting them to reconnect
25 #
26 # Conditions for successful exit:
27 # Both peers have 1 connected peer in transport, core, topology, fs 
28
29 import sys
30 import os
31 import subprocess
32 import re
33 import shutil
34 import time
35 import pexpect
36 from gnunet_testing import Peer
37 from gnunet_testing import Test
38 from gnunet_testing import Check
39 from gnunet_testing import Condition
40 from gnunet_testing import * 
41  
42
43 #definitions
44
45 testname = "test_integration_clique"
46 verbose = True
47 check_timeout = 180
48
49
50 def cleanup ():
51         if os.name == "nt":
52             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "c_bootstrap_server"), True)
53             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "c_no_nat_client"), True)
54             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "c_no_nat_client_2"), True)
55         else:
56             shutil.rmtree ("/tmp/c_bootstrap_server/", True)
57             shutil.rmtree ("/tmp/c_no_nat_client/", True)
58             shutil.rmtree ("/tmp/c_no_nat_client_2/", True)
59
60
61 def success_cont (check):
62         global success 
63         success = True;
64         check.evaluate(True)
65
66 def fail_cont (check):    
67         global success 
68         success = False;
69         check.evaluate(False)        
70
71
72 def success_connect_cont (check):
73         check.evaluate(True)
74         print "Connected clique, shutdown"
75         server.stop ()
76         client.stop ()
77         client2.stop ()
78         time.sleep (3)
79         client.start ()
80         client2.start ()        
81
82         check = Check (test)
83         check.add (StatisticsCondition (client, 'transport', '# peers connected',1))
84         check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',1))  
85         check.add (StatisticsCondition (client, 'core', '# peers connected',1))
86         check.add (StatisticsCondition (client, 'topology', '# peers connected',1))
87         check.add (StatisticsCondition (client, 'fs', '# peers connected',1))
88         
89         check.add (StatisticsCondition (client2, 'transport', '# peers connected',1))
90         check.add (StatisticsCondition (client2, 'core', '# neighbour entries allocated',1))  
91         check.add (StatisticsCondition (client2, 'core', '# peers connected',1))
92         check.add (StatisticsCondition (client2, 'topology', '# peers connected',1))
93         check.add (StatisticsCondition (client2, 'fs', '# peers connected',1))  
94
95         check.run_blocking (check_timeout, success_cont, fail_cont)
96
97
98 def fail_connect_cont (check):    
99     global success
100     print "Failed to connect clique, shutdown" 
101     success = False;
102     check.evaluate(False)
103
104
105 def check_connect ():
106   check = Check (test)
107   check.add (StatisticsCondition (client, 'transport', '# peers connected',2))
108   check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',2))  
109   check.add (StatisticsCondition (client, 'core', '# peers connected',2))
110   check.add (StatisticsCondition (client, 'topology', '# peers connected',2))
111   check.add (StatisticsCondition (client, 'fs', '# peers connected',2))
112
113   check.add (StatisticsCondition (client2, 'transport', '# peers connected',2))
114   check.add (StatisticsCondition (client2, 'core', '# neighbour entries allocated',2))  
115   check.add (StatisticsCondition (client2, 'core', '# peers connected',2))
116   check.add (StatisticsCondition (client2, 'topology', '# peers connected',2))
117   check.add (StatisticsCondition (client2, 'fs', '# peers connected',2))
118   
119   check.add (StatisticsCondition (server, 'transport', '# peers connected',2))
120   check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',2))  
121   check.add (StatisticsCondition (server, 'core', '# peers connected',2))
122   check.add (StatisticsCondition (server, 'topology', '# peers connected',2))
123   check.add (StatisticsCondition (server, 'fs', '# peers connected',2))  
124   
125   check.run_blocking (check_timeout, success_connect_cont, fail_connect_cont)
126
127
128 # Test execution
129
130 def run ():
131         global success
132         global test
133         global server
134         global client
135         global client2  
136         
137         success = False
138         
139         test = Test ('test_integration_disconnect', verbose)
140         
141         server = Peer(test, './confs/c_bootstrap_server.conf');
142         server.start();
143         
144         client = Peer(test, './confs/c_no_nat_client.conf');
145         client.start();
146         
147         client2 = Peer(test, './confs/c_no_nat_client_2.conf');
148         client2.start();
149         
150         if ((client.started == True) and (client2.started == True) and (server.started == True)):
151             test.p ('Peers started, running check')
152             check_connect ()
153             
154         server.stop ()    
155         client.stop ()
156         client2.stop ()
157         
158         cleanup ()
159         
160         if (success == False):
161                 print ('Test failed')
162                 return False 
163         else:
164                 return True
165
166     
167 try:
168     run ()
169 except (KeyboardInterrupt, SystemExit):    
170     print 'Test interrupted'
171     server.stop ()
172     client.stop ()
173     client2.stop ()
174     cleanup ()
175 if (success == False):
176         sys.exit(1)   
177 else:
178         sys.exit(0)    
179             
180