fix
[oweals/gnunet.git] / src / integration-tests / test_integration_clique_nat.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 (1 bootstrap server, 1 not nat'ed peer, 1 nat'ed peer)
23 # and expects bootstrap and a connected clique
24 #
25 # Conditions for successful exit:
26 # Both peers have 1 connected peer in transport, core, topology, fs 
27
28 import sys
29 import os
30 import subprocess
31 import re
32 import shutil
33 import time
34 import pexpect
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 testname = "test_integration_clique_nat"
44 verbose = True
45 check_timeout = 120
46
47
48 def cleanup ():
49         if os.name == "nt":
50             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "c_bootstrap_server"), True)
51             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "c_no_nat_client"), True)
52             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "c_nat_client"), True)
53         else:
54             shutil.rmtree ("/tmp/c_bootstrap_server/", True)
55             shutil.rmtree ("/tmp/c_no_nat_client/", True)
56             shutil.rmtree ("/tmp/c_nat_client/", True)
57
58
59 def success_cont (check):
60         global success 
61         success = True;
62
63 def fail_cont (check):    
64     global success 
65     success= False;
66     check.eval(True)        
67
68
69 def check_disconnect_client ():
70   test.p ('Shutting down bootstrap client')
71   client.stop ()
72   check = Check (test)
73   
74   check.add (StatisticsCondition (client2, 'transport', '# peers connected',0))
75   check.add (StatisticsCondition (client2, 'core', '# neighbour entries allocated',0))  
76   check.add (StatisticsCondition (client2, 'core', '# entries in session map',0))
77   check.add (StatisticsCondition (client2, 'topology', '# peers connected',0))
78   check.add (StatisticsCondition (client2, 'fs', '# peers connected',0))
79   
80   check.run_blocking (check_timeout, success_cont, fail_cont)
81
82                 
83 def success_disconnect_server_cont (check):
84     check_disconnect_client ()
85
86
87 def fail_disconnect_server_cont (check):    
88     global success 
89     success= False;
90     check.eval(True)        
91
92         
93 def check_disconnect_server ():
94   test.p ('Shutting down bootstrap server')
95   server.stop ()
96   check = Check (test)
97   check.add (StatisticsCondition (client, 'transport', '# peers connected',1))
98   check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',1))  
99   check.add (StatisticsCondition (client, 'core', '# entries in session map',1))
100   check.add (StatisticsCondition (client, 'topology', '# peers connected',1))
101   check.add (StatisticsCondition (client, 'fs', '# peers connected',1))
102   
103   check.add (StatisticsCondition (client2, 'transport', '# peers connected',1))
104   check.add (StatisticsCondition (client2, 'core', '# neighbour entries allocated',1))  
105   check.add (StatisticsCondition (client2, 'core', '# entries in session map',1))
106   check.add (StatisticsCondition (client2, 'topology', '# peers connected',1))
107   check.add (StatisticsCondition (client2, 'fs', '# peers connected',1))
108   
109   check.run_blocking (check_timeout, success_disconnect_server_cont, fail_disconnect_server_cont)
110
111
112 def success_connect_cont (check):  
113     check.eval(False)
114     check_disconnect_server ()
115
116
117 def fail_connect_cont (check):    
118     global success 
119     success= False;
120     check.eval(True)
121
122
123 def check_connect ():
124   check = Check (test)
125   check.add (StatisticsCondition (client, 'transport', '# peers connected',2))
126   check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',2))  
127   check.add (StatisticsCondition (client, 'core', '# entries in session map',2))
128   check.add (StatisticsCondition (client, 'topology', '# peers connected',2))
129   check.add (StatisticsCondition (client, 'fs', '# peers connected',2))
130
131   check.add (StatisticsCondition (client2, 'transport', '# peers connected',2))
132   check.add (StatisticsCondition (client2, 'core', '# neighbour entries allocated',2))  
133   check.add (StatisticsCondition (client2, 'core', '# entries in session map',2))
134   check.add (StatisticsCondition (client2, 'topology', '# peers connected',2))
135   check.add (StatisticsCondition (client2, 'fs', '# peers connected',2))
136   
137   check.add (StatisticsCondition (server, 'transport', '# peers connected',2))
138   check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',2))  
139   check.add (StatisticsCondition (server, 'core', '# entries in session map',2))
140   check.add (StatisticsCondition (server, 'topology', '# peers connected',2))
141   check.add (StatisticsCondition (server, 'fs', '# peers connected',2))  
142   
143   check.run_blocking (check_timeout, success_connect_cont, fail_connect_cont)
144
145
146 # Test execution
147
148 def run ():
149         global success
150         global test
151         global server
152         global client
153         global client2  
154         
155         success = False
156         
157         test = Test ('test_integration_disconnect', verbose)
158         
159         server = Peer(test, './confs/c_bootstrap_server.conf');
160         server.start();
161         
162         client = Peer(test, './confs/c_no_nat_client.conf');
163         client.start();
164         
165         client2 = Peer(test, './confs/c_nat_client.conf');
166         client2.start();
167         
168         if ((client.started == True) and (client2.started == True) and (server.started == True)):
169             test.p ('Peers started, running check')
170             check_connect ()
171             
172         server.stop ()    
173         client.stop ()
174         client2.stop ()
175         
176         cleanup ()
177         
178         if (success == False):
179                 print ('Test failed')
180                 return False 
181         else:
182                 return True
183
184     
185 try:
186     run ()
187 except (KeyboardInterrupt, SystemExit):    
188     print 'Test interrupted'
189     server.stop ()
190     client.stop ()
191     client2.stop ()
192     cleanup ()
193 if (success == False):
194         sys.exit(1)   
195 else:
196         sys.exit(0)    
197             
198