- msg
[oweals/gnunet.git] / src / integration-tests / test_integration_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 import sys
22 import os
23 import subprocess
24 import re
25 import shutil
26 import time
27 import pexpect
28 from gnunet_testing import Peer
29 from gnunet_testing import Test
30 from gnunet_testing import Check
31 from gnunet_testing import Condition
32 from gnunet_testing import * 
33  
34
35 #
36 # This test tests if a fresh peer bootstraps from a hostlist server and then
37 # successfully connects to the server. When both peers are connected
38 # in transport, core, topology, fs, botth peers are shutdown and restarted 
39 #
40 # Conditions for successful exit:
41 # Both peers have 1 connected peer in transport, core, topology, fs after restart
42
43 #definitions
44
45
46 testname = "test_integration_restart"
47 verbose = False
48 check_timeout = 30
49
50
51 def cleanup ():
52         if os.name == "nt":
53             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "gnunet-test-fs-py-ns"), True)
54             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "c_no_nat_client"), True)
55         else:
56             shutil.rmtree ("/tmp/c_bootstrap_server/", True)
57             shutil.rmtree ("/tmp/c_no_nat_client/", True)    
58
59
60 def success_restart_cont (check):
61         global success 
62         test.p ('Shutting down client & server')
63         server.stop ()
64         client.stop ()
65         success = True; 
66
67
68 def fail_restart_cont (check):    
69         global success 
70         success = False;
71         check.evaluate(True)   
72     
73
74 def success_connect_cont (check):
75         test.p ('Shutting down client & server for restart')
76         server.stop ()
77         client.stop ()
78         
79         time.sleep(5)
80         
81         test.p ('Restarting client & server')
82         server.start ()
83         client.start ()
84         
85         check = Check (test)
86         check.add (StatisticsCondition (client, 'transport', '# peers connected',1))
87         check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',1))  
88         check.add (StatisticsCondition (client, 'core', '# entries in session map',1))
89         check.add (StatisticsCondition (client, 'topology', '# peers connected',1))
90         check.add (StatisticsCondition (client, 'fs', '# peers connected',1))
91         
92         check.add (StatisticsCondition (server, 'transport', '# peers connected',1))
93         check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',1))  
94         check.add (StatisticsCondition (server, 'core', '# entries in session map',1))
95         check.add (StatisticsCondition (server, 'topology', '# peers connected',1))
96         check.add (StatisticsCondition (server, 'fs', '# peers connected',1))  
97         
98         check.run_blocking (check_timeout, success_restart_cont, fail_restart_cont)
99
100
101 def fail_connect_cont (check):    
102     global success 
103     success= False;
104     check.evaluate(True)
105
106
107 def check_connect ():
108         check = Check (test)
109         check.add (StatisticsCondition (client, 'transport', '# peers connected',1))
110         check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',1))  
111         check.add (StatisticsCondition (client, 'core', '# entries in session map',1))
112         check.add (StatisticsCondition (client, 'topology', '# peers connected',1))
113         check.add (StatisticsCondition (client, 'fs', '# peers connected',1))
114         
115         check.add (StatisticsCondition (server, 'transport', '# peers connected',1))
116         check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',1))  
117         check.add (StatisticsCondition (server, 'core', '# entries in session map',1))
118         check.add (StatisticsCondition (server, 'topology', '# peers connected',1))
119         check.add (StatisticsCondition (server, 'fs', '# peers connected',1))  
120         
121         check.run_blocking (check_timeout, success_connect_cont, fail_connect_cont)
122
123
124 # Test execution
125
126
127 def run ():
128         global success
129         global test
130         global server
131         global client
132         
133         success = False
134         
135         test = Test ('test_integration_disconnect', verbose)
136         
137         server = Peer(test, './confs/c_bootstrap_server.conf');
138         server.start();
139         
140         client = Peer(test, './confs/c_no_nat_client.conf');
141         client.start();
142         
143         
144         if ((client.started == True) and (server.started == True)):
145             test.p ('Peers started, running check')
146             check_connect ()
147                 
148         server.stop ()    
149         client.stop ()
150         
151         cleanup ()
152         
153         if (success == False):
154                 print ('Test failed')
155                 return True
156         else:
157                 return False
158
159         
160 try:
161     run ()
162 except (KeyboardInterrupt, SystemExit):    
163     print 'Test interrupted'
164     server.stop ()
165     client.stop ()
166     cleanup ()
167 if (success == False):
168         sys.exit(1)   
169 else:
170         sys.exit(0)    
171