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