added support for interupting a test
[oweals/gnunet.git] / src / integration-tests / test_integration_bootstrap_and_connect.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 
38 #
39 # Conditions for successful exit:
40 # Both peers have 1 connected peer in transport, core, topology, fs
41
42 #
43 # This test tests if a fresh peer bootstraps from a hostlist server and then
44 # successfully connects to the server 
45 #
46 # Conditions for successful exit:
47 # Both peers have 1 connected peer in transport, core, topology, fs
48
49 #definitions
50
51 testname = "test_integration_bootstrap_and_connect"
52 verbose = True
53 check_timeout = 30
54
55
56 def cleanup ():
57         if os.name == "nt":
58             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "gnunet-test-fs-py-ns"), True)
59             shutil.rmtree (os.path.join (os.getenv ("TEMP"), "c_no_nat_client"), True)
60         else:
61             shutil.rmtree ("/tmp/c_bootstrap_server/", True)
62             shutil.rmtree ("/tmp/c_no_nat_client/", True)    
63
64 def success_cont (check):
65     global success
66     success = True;
67     
68 def fail_cont (check):    
69     global success 
70     success= False;
71     check.eval(True)
72
73 def check ():
74   global test
75   global server
76   global client
77   global success
78   check = Check (test)
79   check.add (StatisticsCondition (client, 'transport', '# peers connected',1))
80   check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',1))  
81   check.add (StatisticsCondition (client, 'core', '# entries in session map',1))
82   check.add (StatisticsCondition (client, 'topology', '# peers connected',1))
83   check.add (StatisticsCondition (client, 'fs', '# peers connected',1))
84   
85
86   check.add (StatisticsCondition (server, 'transport', '# peers connected',1))
87   check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',1))  
88   check.add (StatisticsCondition (server, 'core', '# entries in session map',1))
89   check.add (StatisticsCondition (server, 'topology', '# peers connected',1))
90   check.add (StatisticsCondition (server, 'fs', '# peers connected',1))  
91   
92   check.run_blocking (check_timeout, success_cont, fail_cont)
93
94
95 # Test execution
96
97
98 def run ():
99     global test
100     global server
101     global client
102     global success
103     
104     success = False  
105     test = Test ('test_integration_bootstrap_and_connect.py', verbose)
106     
107     server = Peer(test, './confs/c_bootstrap_server.conf');
108     client = Peer(test, './confs/c_no_nat_client.conf');
109
110     server.start();
111     client.start();
112     
113     if ((client.started == True) and (server.started == True)):
114         test.p ('Peers started, running check')
115         time.sleep(5)
116         check ()
117         
118     print 'stop in run'
119     server.stop ()
120     client.stop ()
121     
122     cleanup ()
123     
124     if (success == False):
125         print ('Test failed')
126         return False 
127     else:
128         return True
129
130 try:
131     run ()
132 except (KeyboardInterrupt, SystemExit):    
133     print 'Test interrupted'
134     server.stop ()
135     client.stop ()
136     cleanup ()
137 sys.exit(success)    
138