diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-12-17 17:13:47 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-12-17 17:13:47 +0000 |
commit | 949815f37626ab2e14f1614575ec051ea85839f9 (patch) | |
tree | a5b935a8837b5055ae8954984605409b2871afd8 | |
parent | f57cbb13cb69d27ca504964449818c3530d37029 (diff) | |
download | gnunet-949815f37626ab2e14f1614575ec051ea85839f9.tar.gz gnunet-949815f37626ab2e14f1614575ec051ea85839f9.zip |
disconnect test
-rwxr-xr-x | src/integration-tests/test_integration_disconnect_nat.py.in | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/src/integration-tests/test_integration_disconnect_nat.py.in b/src/integration-tests/test_integration_disconnect_nat.py.in new file mode 100755 index 000000000..350bfbe07 --- /dev/null +++ b/src/integration-tests/test_integration_disconnect_nat.py.in | |||
@@ -0,0 +1,198 @@ | |||
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 signal | ||
23 | import os | ||
24 | import subprocess | ||
25 | import re | ||
26 | import shutil | ||
27 | import time | ||
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, the server is shutdown | ||
39 | # | ||
40 | # Conditions for successful exit: | ||
41 | # Client peer has 0 connected peer in transport, core, topology, dht, fs | ||
42 | |||
43 | #definitions | ||
44 | |||
45 | testname = "test_integration_disconnect" | ||
46 | verbose = True | ||
47 | check_timeout = 180 | ||
48 | |||
49 | if os.name == "nt": | ||
50 | tmp = os.getenv ("TEMP") | ||
51 | else: | ||
52 | tmp = "/tmp" | ||
53 | |||
54 | def cleanup (): | ||
55 | shutil.rmtree (os.path.join (tmp, "c_bootstrap_server"), True) | ||
56 | shutil.rmtree (os.path.join (tmp, "c_nat_client"), True) | ||
57 | |||
58 | |||
59 | def success_disconnect_cont (check): | ||
60 | print 'Peers disconnected successfully' | ||
61 | global success | ||
62 | success = True; | ||
63 | |||
64 | |||
65 | def fail_disconnect_cont (check): | ||
66 | global success | ||
67 | success = False; | ||
68 | print 'Peers failed to disconnect' | ||
69 | check.evaluate(True) | ||
70 | |||
71 | def check_disconnect (): | ||
72 | global server | ||
73 | global nat_client | ||
74 | test.p ('Shutting down nat client') | ||
75 | nat_client.stop () | ||
76 | check = Check (test) | ||
77 | check.add (StatisticsCondition (server, 'transport', '# peers connected',0)) | ||
78 | check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',0)) | ||
79 | check.add (StatisticsCondition (server, 'core', '# peers connected',0)) | ||
80 | check.add (StatisticsCondition (server, 'topology', '# peers connected',0)) | ||
81 | check.add (StatisticsCondition (server, 'dht', '# peers connected',0)) | ||
82 | check.add (StatisticsCondition (server, 'fs', '# peers connected',0)) | ||
83 | check.run_blocking (check_timeout, success_disconnect_cont, fail_disconnect_cont) | ||
84 | |||
85 | |||
86 | def success_connect_cont (check): | ||
87 | print 'Peers connected successfully' | ||
88 | check_disconnect () | ||
89 | |||
90 | |||
91 | def fail_connect_cont (check): | ||
92 | global success | ||
93 | success= False | ||
94 | print 'Peers failed to connected!' | ||
95 | check.evaluate(True) | ||
96 | |||
97 | |||
98 | def check_connect (): | ||
99 | global server | ||
100 | global nat_client | ||
101 | check = Check (test) | ||
102 | check.add (StatisticsCondition (nat_client, 'transport', '# peers connected',1)) | ||
103 | check.add (StatisticsCondition (nat_client, 'core', '# neighbour entries allocated',1)) | ||
104 | check.add (StatisticsCondition (nat_client, 'core', '# peers connected',1)) | ||
105 | check.add (StatisticsCondition (nat_client, 'topology', '# peers connected',1)) | ||
106 | check.add (StatisticsCondition (nat_client, 'dht', '# peers connected',1)) | ||
107 | check.add (StatisticsCondition (nat_client, 'fs', '# peers connected',1)) | ||
108 | |||
109 | check.add (StatisticsCondition (server, 'transport', '# peers connected',1)) | ||
110 | check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',1)) | ||
111 | check.add (StatisticsCondition (server, 'core', '# peers connected',1)) | ||
112 | check.add (StatisticsCondition (server, 'topology', '# peers connected',1)) | ||
113 | check.add (StatisticsCondition (server, 'dht', '# peers connected',1)) | ||
114 | check.add (StatisticsCondition (server, 'fs', '# peers connected',1)) | ||
115 | |||
116 | check.run_blocking (check_timeout, success_connect_cont, fail_connect_cont) | ||
117 | |||
118 | # | ||
119 | # Test execution | ||
120 | # | ||
121 | |||
122 | def SigHandler(signum = None, frame = None): | ||
123 | global success | ||
124 | global server | ||
125 | global nat_client | ||
126 | |||
127 | print 'Test was aborted!' | ||
128 | if (None != server): | ||
129 | server.stop () | ||
130 | if (None != nat_client): | ||
131 | nat_client.stop () | ||
132 | cleanup () | ||
133 | sys.exit(success) | ||
134 | |||
135 | def run (): | ||
136 | global success | ||
137 | global test | ||
138 | global server | ||
139 | global nat_client | ||
140 | |||
141 | server = None | ||
142 | nat_client = None | ||
143 | success = False | ||
144 | |||
145 | for sig in [signal.SIGTERM, signal.SIGINT, signal.SIGHUP, signal.SIGQUIT]: | ||
146 | signal.signal(sig, SigHandler) | ||
147 | |||
148 | test = Test ('test_integration_bootstrap_and_connect.py', verbose) | ||
149 | cleanup () | ||
150 | |||
151 | server = Peer(test, './confs/c_bootstrap_server.conf'); | ||
152 | nat_client = Peer(test, './confs/c_nat_client.conf'); | ||
153 | |||
154 | if (True != server.start()): | ||
155 | print 'Failed to start server' | ||
156 | if (None != server): | ||
157 | server.stop () | ||
158 | cleanup () | ||
159 | sys.exit(success) | ||
160 | if (True != nat_client.start()): | ||
161 | print 'Failed to start nat_client' | ||
162 | if (None != server): | ||
163 | server.stop () | ||
164 | if (None != nat_client): | ||
165 | nat_client.stop () | ||
166 | cleanup () | ||
167 | sys.exit(success) | ||
168 | |||
169 | if ((nat_client.started == True) and (server.started == True)): | ||
170 | test.p ('Peers started, running check') | ||
171 | time.sleep(5) | ||
172 | check_connect () | ||
173 | server.stop () | ||
174 | nat_client.stop () | ||
175 | |||
176 | cleanup () | ||
177 | |||
178 | if (success == False): | ||
179 | print ('Test failed') | ||
180 | return False | ||
181 | else: | ||
182 | return True | ||
183 | |||
184 | try: | ||
185 | run () | ||
186 | except (KeyboardInterrupt, SystemExit): | ||
187 | print 'Test interrupted' | ||
188 | server.stop () | ||
189 | nat_client.stop () | ||
190 | cleanup () | ||
191 | if (success == False): | ||
192 | sys.exit(1) | ||
193 | else: | ||
194 | sys.exit(0) | ||
195 | |||
196 | |||
197 | |||
198 | \ No newline at end of file | ||