From 00b211d05bf9ba8a82d120237963c5e84e57afeb Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Tue, 17 Dec 2013 15:32:54 +0000 Subject: restructuring configs + enabling additional plugins --- .../test_integration_reconnect.py.in | 225 +++++++++++++++++++++ 1 file changed, 225 insertions(+) create mode 100755 src/integration-tests/test_integration_reconnect.py.in (limited to 'src/integration-tests/test_integration_reconnect.py.in') diff --git a/src/integration-tests/test_integration_reconnect.py.in b/src/integration-tests/test_integration_reconnect.py.in new file mode 100755 index 000000000..62bd4bd98 --- /dev/null +++ b/src/integration-tests/test_integration_reconnect.py.in @@ -0,0 +1,225 @@ +#!@PYTHON@ +# This file is part of GNUnet. +# (C) 2010 Christian Grothoff (and other contributing authors) +# +# GNUnet is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation; either version 2, or (at your +# option) any later version. +# +# GNUnet is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNUnet; see the file COPYING. If not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# +import sys +import os +import subprocess +import re +import shutil +import time +import signal +from gnunet_testing import Peer +from gnunet_testing import Test +from gnunet_testing import Check +from gnunet_testing import Condition +from gnunet_testing import * + + +# +# This test tests if a fresh peer bootstraps from a hostlist server and then +# successfully connects to the server. When both peers are connected +# in transport, core, topology, fs, botth peers are shutdown and restarted +# +# Conditions for successful exit: +# Both peers have 1 connected peer in transport, core, topology, fs after restart + +#definitions + + +testname = "test_integration_restart" +verbose = True +check_timeout = 180 + +if os.name == "nt": + tmp = os.getenv ("TEMP") +else: + tmp = "/tmp" + +def cleanup (): + retries = 10 + path = os.path.join (tmp, "c_bootstrap_server") + test.p ("Removing " + path) + while ((os.path.exists(path)) and (retries > 0)): + shutil.rmtree ((path), False) + time.sleep (1) + retries -= 1 + if (os.path.exists(path)): + test.p ("Failed to remove " + path) + + + retries = 10 + path = os.path.join (tmp, "c_no_nat_client") + test.p ("Removing " + path) + while ((os.path.exists(path)) and (retries > 0)): + shutil.rmtree ((path), False) + time.sleep (1) + retries -= 1 + if (os.path.exists(path)): + test.p ("Failed to remove " + path) + +def success_restart_cont (check): + global success + print 'Peers connected successfully after restart' + server.stop () + client.stop () + success = True; + + +def fail_restart_cont (check): + global success + success = False; + print 'Peers failed to connect after restart' + check.evaluate(True) + + +def success_connect_cont (check): + print 'Peers connected successfully' + server.stop () + client.stop () + + time.sleep(5) + + test.p ('Restarting client & server') + server.start () + client.start () + + check = Check (test) + check.add (StatisticsCondition (client, 'transport', '# peers connected',1)) + check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',1)) + check.add (StatisticsCondition (client, 'core', '# peers connected',1)) + check.add (StatisticsCondition (client, 'topology', '# peers connected',1)) + check.add (StatisticsCondition (client, 'fs', '# peers connected',1)) + + check.add (StatisticsCondition (server, 'transport', '# peers connected',1)) + check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',1)) + check.add (StatisticsCondition (server, 'core', '# peers connected',1)) + check.add (StatisticsCondition (server, 'topology', '# peers connected',1)) + check.add (StatisticsCondition (server, 'fs', '# peers connected',1)) + + check.run_blocking (check_timeout, success_restart_cont, fail_restart_cont) + + +def fail_connect_cont (check): + global success + success= False; + print 'Peers failed to connect' + check.evaluate(True) + + +def check_connect (): + check = Check (test) + check.add (StatisticsCondition (client, 'transport', '# peers connected',1)) + check.add (StatisticsCondition (client, 'core', '# neighbour entries allocated',1)) + check.add (StatisticsCondition (client, 'core', '# peers connected',1)) + check.add (StatisticsCondition (client, 'topology', '# peers connected',1)) + check.add (StatisticsCondition (client, 'fs', '# peers connected',1)) + + check.add (StatisticsCondition (server, 'transport', '# peers connected',1)) + check.add (StatisticsCondition (server, 'core', '# neighbour entries allocated',1)) + check.add (StatisticsCondition (server, 'core', '# peers connected',1)) + check.add (StatisticsCondition (server, 'topology', '# peers connected',1)) + check.add (StatisticsCondition (server, 'fs', '# peers connected',1)) + + check.run_blocking (check_timeout, success_connect_cont, fail_connect_cont) + +# +# Test execution +# + + +def SigHandler(signum = None, frame = None): + global success + global server + global client + + print 'Test was aborted!' + if (None != server): + server.stop () + if (None != server): + client.stop () + cleanup () + sys.exit(success) + +def run (): + global success + global test + global server + global client + + success = False + server = None + client = None + + for sig in [signal.SIGTERM, signal.SIGINT, signal.SIGHUP, signal.SIGQUIT]: + signal.signal(sig, SigHandler) + + + test = Test ('test_integration_disconnect', verbose) + cleanup () + server = Peer(test, './confs/c_bootstrap_server.conf'); + server.start(); + + client = Peer(test, './confs/c_no_nat_client.conf'); + client.start(); + + + if (True != server.start()): + print 'Failed to start server' + if (None != server): + server.stop () + if (None != server): + client.stop () + cleanup () + sys.exit(success) + if (True != client.start()): + print 'Failed to start client' + if (None != server): + server.stop () + if (None != server): + client.stop () + cleanup () + sys.exit(success) + + check_connect () + + server.stop () + client.stop () + cleanup () + + if (success == False): + print ('Test failed') + return True + else: + return False + + +try: + run () +except (KeyboardInterrupt, SystemExit): + print 'Test interrupted' + server.stop () + client.stop () + cleanup () +if (success == False): + sys.exit(1) +else: + sys.exit(0) + + \ No newline at end of file -- cgit v1.2.3