diff options
Diffstat (limited to 'src/integration-tests/test_integration_reconnect.py.in')
-rwxr-xr-x | src/integration-tests/test_integration_reconnect.py.in | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/src/integration-tests/test_integration_reconnect.py.in b/src/integration-tests/test_integration_reconnect.py.in deleted file mode 100755 index 97dc94502..000000000 --- a/src/integration-tests/test_integration_reconnect.py.in +++ /dev/null | |||
@@ -1,237 +0,0 @@ | |||
1 | #!@PYTHONEXE@ | ||
2 | # This file is part of GNUnet. | ||
3 | # (C) 2010, 2017 Christian Grothoff (and other contributing authors) | ||
4 | # | ||
5 | # GNUnet is free software: you can redistribute it and/or modify it | ||
6 | # under the terms of the GNU Affero General Public License as published | ||
7 | # by the Free Software Foundation, either version 3 of the License, | ||
8 | # or (at your 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 | # Affero General Public License for more details. | ||
14 | # | ||
15 | # You should have received a copy of the GNU Affero General Public License | ||
16 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
17 | # | ||
18 | # SPDX-License-Identifier: AGPL3.0-or-later | ||
19 | # | ||
20 | # | ||
21 | |||
22 | import sys | ||
23 | import os | ||
24 | import subprocess | ||
25 | import re | ||
26 | import shutil | ||
27 | import time | ||
28 | import signal | ||
29 | from gnunet_testing import Peer | ||
30 | from gnunet_testing import Test | ||
31 | from gnunet_testing import Check | ||
32 | from gnunet_testing import Condition | ||
33 | from gnunet_testing import * | ||
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 | testname = "test_integration_restart" | ||
46 | verbose = True | ||
47 | check_timeout = 180 | ||
48 | |||
49 | if os.name == "nt": | ||
50 | tmp = os.getenv("TEMP") | ||
51 | signals = [signal.SIGTERM, signal.SIGINT] | ||
52 | else: | ||
53 | tmp = "/tmp" | ||
54 | signals = [signal.SIGTERM, signal.SIGINT, signal.SIGHUP, signal.SIGQUIT] | ||
55 | |||
56 | |||
57 | def cleanup_onerror(function, path, excinfo): | ||
58 | import stat | ||
59 | if not os.path.exists(path): | ||
60 | pass | ||
61 | elif not os.access(path, os.W_OK): | ||
62 | # Is the error an access error ? | ||
63 | os.chmod(path, stat.S_IWUSR) | ||
64 | function(path) | ||
65 | else: | ||
66 | raise | ||
67 | |||
68 | |||
69 | def cleanup(): | ||
70 | retries = 10 | ||
71 | path = os.path.join(tmp, "c_bootstrap_server") | ||
72 | test.p("Removing " + path) | ||
73 | while ((os.path.exists(path)) and (retries > 0)): | ||
74 | shutil.rmtree((path), False, cleanup_onerror) | ||
75 | time.sleep(1) | ||
76 | retries -= 1 | ||
77 | if (os.path.exists(path)): | ||
78 | test.p("Failed to remove " + path) | ||
79 | |||
80 | retries = 10 | ||
81 | path = os.path.join(tmp, "c_no_nat_client") | ||
82 | test.p("Removing " + path) | ||
83 | while ((os.path.exists(path)) and (retries > 0)): | ||
84 | shutil.rmtree((path), False, cleanup_onerror) | ||
85 | time.sleep(1) | ||
86 | retries -= 1 | ||
87 | if (os.path.exists(path)): | ||
88 | test.p("Failed to remove " + path) | ||
89 | |||
90 | |||
91 | def success_restart_cont(check): | ||
92 | global success | ||
93 | print('Peers connected successfully after restart') | ||
94 | server.stop() | ||
95 | client.stop() | ||
96 | success = True | ||
97 | |||
98 | |||
99 | def fail_restart_cont(check): | ||
100 | global success | ||
101 | success = False | ||
102 | print('Peers failed to connect after restart') | ||
103 | check.evaluate(True) | ||
104 | |||
105 | |||
106 | def success_connect_cont(check): | ||
107 | print('Peers connected successfully') | ||
108 | server.stop() | ||
109 | client.stop() | ||
110 | |||
111 | time.sleep(5) | ||
112 | |||
113 | test.p('Restarting client & server') | ||
114 | server.start() | ||
115 | client.start() | ||
116 | |||
117 | check = Check(test) | ||
118 | check.add(StatisticsCondition(client, 'transport', '# peers connected', 1)) | ||
119 | check.add(StatisticsCondition(client, 'core', '# peers connected', 1)) | ||
120 | check.add(StatisticsCondition(client, 'topology', '# peers connected', 1)) | ||
121 | check.add(StatisticsCondition(client, 'fs', '# peers connected', 1)) | ||
122 | |||
123 | check.add(StatisticsCondition(server, 'transport', '# peers connected', 1)) | ||
124 | check.add(StatisticsCondition(server, 'core', '# peers connected', 1)) | ||
125 | check.add(StatisticsCondition(server, 'topology', '# peers connected', 1)) | ||
126 | check.add(StatisticsCondition(server, 'fs', '# peers connected', 1)) | ||
127 | |||
128 | check.run_blocking(check_timeout, success_restart_cont, fail_restart_cont) | ||
129 | |||
130 | |||
131 | def fail_connect_cont(check): | ||
132 | global success | ||
133 | success = False | ||
134 | print('Peers failed to connect') | ||
135 | check.evaluate(True) | ||
136 | |||
137 | |||
138 | def check_connect(): | ||
139 | check = Check(test) | ||
140 | check.add(StatisticsCondition(client, 'transport', '# peers connected', 1)) | ||
141 | check.add(StatisticsCondition(client, 'core', '# peers connected', 1)) | ||
142 | check.add(StatisticsCondition(client, 'topology', '# peers connected', 1)) | ||
143 | check.add(StatisticsCondition(client, 'fs', '# peers connected', 1)) | ||
144 | |||
145 | check.add(StatisticsCondition(server, 'transport', '# peers connected', 1)) | ||
146 | check.add(StatisticsCondition(server, 'core', '# peers connected', 1)) | ||
147 | check.add(StatisticsCondition(server, 'topology', '# peers connected', 1)) | ||
148 | check.add(StatisticsCondition(server, 'fs', '# peers connected', 1)) | ||
149 | |||
150 | check.run_blocking(check_timeout, success_connect_cont, fail_connect_cont) | ||
151 | |||
152 | |||
153 | # | ||
154 | # Test execution | ||
155 | # | ||
156 | |||
157 | |||
158 | def SigHandler(signum=None, frame=None): | ||
159 | global success | ||
160 | global server | ||
161 | global client | ||
162 | |||
163 | print('Test was aborted!') | ||
164 | if (None != server): | ||
165 | server.stop() | ||
166 | if (None != client): | ||
167 | client.stop() | ||
168 | cleanup() | ||
169 | sys.exit(success) | ||
170 | |||
171 | |||
172 | def run(): | ||
173 | global success | ||
174 | global test | ||
175 | global server | ||
176 | global client | ||
177 | |||
178 | success = False | ||
179 | server = None | ||
180 | client = None | ||
181 | |||
182 | for sig in signals: | ||
183 | signal.signal(sig, SigHandler) | ||
184 | |||
185 | test = Test('test_integration_disconnect', verbose) | ||
186 | cleanup() | ||
187 | server = Peer(test, './confs/c_bootstrap_server.conf') | ||
188 | server.start() | ||
189 | |||
190 | client = Peer(test, './confs/c_no_nat_client.conf') | ||
191 | client.start() | ||
192 | |||
193 | if (True != server.start()): | ||
194 | print('Failed to start server') | ||
195 | if (None != server): | ||
196 | server.stop() | ||
197 | if (None != server): | ||
198 | client.stop() | ||
199 | cleanup() | ||
200 | sys.exit(success) | ||
201 | |||
202 | # Give the server time to start | ||
203 | time.sleep(5) | ||
204 | |||
205 | if (True != client.start()): | ||
206 | print('Failed to start client') | ||
207 | if (None != server): | ||
208 | server.stop() | ||
209 | if (None != server): | ||
210 | client.stop() | ||
211 | cleanup() | ||
212 | sys.exit(success) | ||
213 | |||
214 | check_connect() | ||
215 | |||
216 | server.stop() | ||
217 | client.stop() | ||
218 | cleanup() | ||
219 | |||
220 | if (success == False): | ||
221 | print('Test failed') | ||
222 | return True | ||
223 | else: | ||
224 | return False | ||
225 | |||
226 | |||
227 | try: | ||
228 | run() | ||
229 | except (KeyboardInterrupt, SystemExit): | ||
230 | print('Test interrupted') | ||
231 | server.stop() | ||
232 | client.stop() | ||
233 | cleanup() | ||
234 | if (success == False): | ||
235 | sys.exit(1) | ||
236 | else: | ||
237 | sys.exit(0) | ||