Discard large metadata items first
[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 from gnunet_testing import Peer
36 from gnunet_testing import Test
37 from gnunet_testing import Check
38 from gnunet_testing import Condition
39 from gnunet_testing import * 
40  
41
42 #definitions
43
44 testname = "test_integration_clique"
45 verbose = True
46 check_timeout = 180
47
48 if os.name == "nt":
49   tmp = os.getenv ("TEMP")
50 else:
51   tmp = "/tmp"
52
53 def cleanup ():
54     shutil.rmtree (os.path.join (tmp, "c_bootstrap_server"), True)
55     shutil.rmtree (os.path.join (tmp, "c_no_nat_client"), True)
56     shutil.rmtree (os.path.join (tmp, "c_no_nat_client_2"), True)
57
58
59 def success_cont (check):
60         global success 
61         success = True;
62         check.evaluate(True)
63
64 def fail_cont (check):    
65         global success 
66         success = False;
67         check.evaluate(False)        
68
69
70 def success_connect_cont (check):
71         check.evaluate(True)
72         print "Connected clique, shutdown"
73         server.stop ()
74         client.stop ()
75         client2.stop ()
76         time.sleep (3)
77         client.start ()
78         client2.start ()        
79
80         check = Check (test)
81         check.add (StatisticsCondition (client, 'transport', '# peers connected',1))
82         check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',1))  
83         check.add (StatisticsCondition (client, 'core', '# peers connected',1))
84         check.add (StatisticsCondition (client, 'topology', '# peers connected',1))
85         check.add (StatisticsCondition (client, 'fs', '# peers connected',1))
86         
87         check.add (StatisticsCondition (client2, 'transport', '# peers connected',1))
88         check.add (StatisticsCondition (client2, 'core', '# neighbour entries allocated',1))  
89         check.add (StatisticsCondition (client2, 'core', '# peers connected',1))
90         check.add (StatisticsCondition (client2, 'topology', '# peers connected',1))
91         check.add (StatisticsCondition (client2, 'fs', '# peers connected',1))  
92
93         check.run_blocking (check_timeout, success_cont, fail_cont)
94
95
96 def fail_connect_cont (check):    
97     global success
98     print "Failed to connect clique, shutdown" 
99     success = False;
100     check.evaluate(False)
101
102
103 def check_connect ():
104   check = Check (test)
105   check.add (StatisticsCondition (client, 'transport', '# peers connected',2))
106   check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',2))  
107   check.add (StatisticsCondition (client, 'core', '# peers connected',2))
108   check.add (StatisticsCondition (client, 'topology', '# peers connected',2))
109   check.add (StatisticsCondition (client, 'fs', '# peers connected',2))
110
111   check.add (StatisticsCondition (client2, 'transport', '# peers connected',2))
112   check.add (StatisticsCondition (client2, 'core', '# neighbour entries allocated',2))  
113   check.add (StatisticsCondition (client2, 'core', '# peers connected',2))
114   check.add (StatisticsCondition (client2, 'topology', '# peers connected',2))
115   check.add (StatisticsCondition (client2, 'fs', '# peers connected',2))
116   
117   check.add (StatisticsCondition (server, 'transport', '# peers connected',2))
118   check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',2))  
119   check.add (StatisticsCondition (server, 'core', '# peers connected',2))
120   check.add (StatisticsCondition (server, 'topology', '# peers connected',2))
121   check.add (StatisticsCondition (server, 'fs', '# peers connected',2))  
122   
123   check.run_blocking (check_timeout, success_connect_cont, fail_connect_cont)
124
125
126 # Test execution
127
128 def run ():
129         global success
130         global test
131         global server
132         global client
133         global client2  
134         
135         success = False
136         
137         test = Test ('test_integration_disconnect', verbose)
138         
139         server = Peer(test, './confs/c_bootstrap_server.conf');
140         server.start();
141         
142         client = Peer(test, './confs/c_no_nat_client.conf');
143         client.start();
144         
145         client2 = Peer(test, './confs/c_no_nat_client_2.conf');
146         client2.start();
147         
148         if ((client.started == True) and (client2.started == True) and (server.started == True)):
149             test.p ('Peers started, running check')
150             check_connect ()
151             
152         server.stop ()    
153         client.stop ()
154         client2.stop ()
155         
156         cleanup ()
157         
158         if (success == False):
159                 print ('Test failed')
160                 return False 
161         else:
162                 return True
163
164     
165 try:
166     run ()
167 except (KeyboardInterrupt, SystemExit):    
168     print 'Test interrupted'
169     server.stop ()
170     client.stop ()
171     client2.stop ()
172     cleanup ()
173 if (success == False):
174         sys.exit(1)   
175 else:
176         sys.exit(0)    
177             
178