diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-02-16 16:18:20 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-02-16 16:18:20 +0000 |
commit | 6a595ff6a8277dc716e268c2f3f389d60b0d5471 (patch) | |
tree | 7bedcb96b9a3a1fd593f7da4d1c2efcc9c8d9e41 | |
parent | f63b2a234432a37789ea2694b1bd9494242ae8f6 (diff) |
- changes to integration
7 files changed, 151 insertions, 58 deletions
diff --git a/src/integration-tests/gnunet_pyexpect.py.in b/src/integration-tests/gnunet_pyexpect.py.in new file mode 100644 index 000000000..9e5c83fa3 --- /dev/null +++ b/src/integration-tests/gnunet_pyexpect.py.in @@ -0,0 +1,83 @@ +#!@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.
+#
+# Testcase for gnunet-peerinfo
+from __future__ import print_function
+import os
+import re
+import subprocess
+import sys
+import shutil
+import time
+
+class pexpect (object):
+ def __init__ (self):
+ super (pexpect, self).__init__ ()
+
+ def spawn (self, stdin, arglist, *pargs, **kwargs):
+ env = kwargs.pop ('env', None)
+ if env is None:
+ env = os.environ.copy ()
+ # This messes up some testcases, disable log redirection
+ env.pop ('GNUNET_FORCE_LOGFILE', None)
+ self.proc = subprocess.Popen (arglist, *pargs, env=env, **kwargs)
+ if self.proc is None:
+ print ("Failed to spawn a process {0}".format (arglist))
+ sys.exit (1)
+ if stdin is not None:
+ self.stdo, self.stde = self.proc.communicate (stdin)
+ else:
+ self.stdo, self.stde = self.proc.communicate ()
+ return self.proc
+
+ def expect (self, s, r, flags=0):
+ stream = self.stdo if s == 'stdout' else self.stde
+ if isinstance (r, str):
+ if r == "EOF":
+ if len (stream) == 0:
+ return True
+ else:
+ print ("Failed to find `{1}' in {0}, which is `{2}' ({3})".format (s, r, stream, len (stream)))
+ sys.exit (2)
+ raise ValueError ("Argument `r' should be an instance of re.RegexObject or a special string, but is `{0}'".format (r))
+ m = r.search (stream, flags)
+ if not m:
+ print ("Failed to find `{1}' in {0}, which is is `{2}'".format (s, r.pattern, stream))
+ sys.exit (2)
+ stream = stream[m.end ():]
+ if s == 'stdout':
+ self.stdo = stream
+ else:
+ self.stde = stream
+ return m
+
+ def read (self, s, size=-1):
+ stream = self.stdo if s == 'stdout' else self.stde
+ result = ""
+ if size < 0:
+ result = stream
+ new_stream = ""
+ else:
+ result = stream[0:size]
+ new_stream = stream[size:]
+ if s == 'stdout':
+ self.stdo = new_stream
+ else:
+ self.stde = new_stream
+ return result
diff --git a/src/integration-tests/gnunet_testing.py.in b/src/integration-tests/gnunet_testing.py.in index 9d4a32877..cbafb0e31 100644 --- a/src/integration-tests/gnunet_testing.py.in +++ b/src/integration-tests/gnunet_testing.py.in @@ -1,4 +1,4 @@ -#!@PYTHON@ +#!/usr/bin/python # This file is part of GNUnet. # (C) 2010 Christian Grothoff (and other contributing authors) # @@ -19,12 +19,11 @@ # # Functions for integration testing import os -import re import subprocess import sys import shutil import time - +from gnunet_pyexpect import pexpect class Check: def __init__(self, test): @@ -56,11 +55,11 @@ class Check: neg_cont (self) else: pos_cont (self) - def eval(self, failed_only): + def evaluate (self, failed_only): pos = 0 neg = 0 for c in self.conditions: - if (False == c.eval (failed_only)): + if (False == c.evaluate (failed_only)): neg += 1 else: pos += 1 @@ -76,7 +75,7 @@ class Condition: self.type = type def check(self): return False; - def eval(self, failed_only): + def evaluate (self, failed_only): if ((self.fulfilled == False) and (failed_only == True)): print str(self.type) + 'condition for was ' + str(self.fulfilled) elif (failed_only == False): @@ -98,7 +97,7 @@ class FileExistCondition (Condition): return False else: return True - def eval(self, failed_only): + def evaluate (self, failed_only): if ((self.fulfilled == False) and (failed_only == True)): print str(self.type) + 'condition for file '+self.file+' was ' + str(self.fulfilled) elif (failed_only == False): @@ -124,11 +123,11 @@ class StatisticsCondition (Condition): return False else: return True - def eval(self, failed_only): - if (self.result == -1): - res = 'NaN' - else: - res = str(self.result) + def evaluate (self, failed_only): + if (self.result == -1): + res = 'NaN' + else: + res = str(self.result) if (self.fulfilled == False): fail = " FAIL!" op = " != " @@ -144,47 +143,50 @@ class StatisticsCondition (Condition): class Test: def __init__(self, testname, verbose): self.peers = list() - self.verbose = verbose; - self.name = testname; - srcdir = "../.." + self.verbose = verbose; + self.name = testname; + srcdir = "../.." gnunet_pyexpect_dir = os.path.join (srcdir, "contrib") if gnunet_pyexpect_dir not in sys.path: - sys.path.append (gnunet_pyexpect_dir) - from gnunet_pyexpect import pexpect + sys.path.append (gnunet_pyexpect_dir) self.gnunetarm = '' self.gnunetstatistics = '' if os.name == 'posix': - self.gnunetarm = 'gnunet-arm' - self.gnunetstatistics = 'gnunet-statistics' + self.gnunetarm = 'gnunet-arm' + self.gnunetstatistics = 'gnunet-statistics' + self.gnunetpeerinfo = 'gnunet-peerinfo' elif os.name == 'nt': - self.gnunetarm = 'gnunet-arm.exe' - self.gnunetstatistics = 'gnunet-statistics.exe' + self.gnunetarm = 'gnunet-arm.exe' + self.gnunetstatistics = 'gnunet-statistics.exe' + self.gnunetpeerinfo = 'gnunet-peerinfo.exe' if os.name == "nt": shutil.rmtree (os.path.join (os.getenv ("TEMP"), testname), True) else: shutil.rmtree ("/tmp/" + testname, True) - def add_peer (peer): - self.conditions.append(condition) + def add_peer (self, peer): + self.peers.append(peer) def p (self, msg): if (self.verbose == True): - print msg + print msg class Peer: def __init__(self, test, cfg_file): if (False == os.path.isfile(cfg_file)): print ("Peer cfg " + cfg_file + ": FILE NOT FOUND") + self.id = "" self.test = test self.started = False self.cfg = cfg_file def __del__(self): - if (self.started == True): - print 'ERROR! Peer using cfg ' + self.cfg + ' was not stopped' - if (ret == self.stop ()): - print 'ERROR! Peer using cfg ' + self.cfg + ' could not be stopped' - self.started == False - return ret - else: - return False + if (self.started == True): + print 'ERROR! Peer using cfg ' + self.cfg + ' was not stopped' + ret = self.stop () + if (False == ret): + print 'ERROR! Peer using cfg ' + self.cfg + ' could not be stopped' + self.started = False + return ret + else: + return False def start (self): self.test.p ("Starting peer using cfg " + self.cfg) try: @@ -194,11 +196,20 @@ class Peer: print "Can not start peer" self.started = False return False - self.started = True + self.started = True; + test = '' + try: + server = pexpect () + server.spawn (None, [self.test.gnunetpeerinfo, '-c', self.cfg ,'-s'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + test = server.read("stdout", 1024) + except OSError: + print "Can not get peer identity" + test = (test.split('`')[1]) + self.id = test.split('\'')[0] return True def stop (self): - if (self.started == False): - return False + if (self.started == False): + return False self.test.p ("Stopping peer using cfg " + self.cfg) try: server = subprocess.Popen ([self.test.gnunetarm, '-eq', '-c', self.cfg]) @@ -209,7 +220,6 @@ class Peer: self.started = False return True; def get_statistics_value (self, subsystem, name): - from gnunet_pyexpect import pexpect server = pexpect () server.spawn (None, [self.test.gnunetstatistics, '-c', self.cfg ,'-q','-n', name, '-s', subsystem ], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) #server.expect ("stdout", re.compile (r"")) diff --git a/src/integration-tests/test_integration_bootstrap_and_connect.py.in b/src/integration-tests/test_integration_bootstrap_and_connect.py.in index 7738c72d8..1492d479d 100755 --- a/src/integration-tests/test_integration_bootstrap_and_connect.py.in +++ b/src/integration-tests/test_integration_bootstrap_and_connect.py.in @@ -1,4 +1,4 @@ -#!@PYTHON@ +#!/usr/bin/python # This file is part of GNUnet. # (C) 2010 Christian Grothoff (and other contributing authors) # @@ -68,7 +68,7 @@ def success_cont (check): def fail_cont (check): global success success = False; - check.eval(True) + check.evaluate(True) def check (): check = Check (test) @@ -103,13 +103,13 @@ def run (): server = Peer(test, './confs/c_bootstrap_server.conf'); client = Peer(test, './confs/c_no_nat_client.conf'); - server.start(); - client.start(); + assert (True == server.start()); + assert (True == client.start()); if ((client.started == True) and (server.started == True)): - test.p ('Peers started, running check') - time.sleep(5) - check () + test.p ('Peers started, running check') + time.sleep(5) + check () server.stop () client.stop () @@ -122,12 +122,12 @@ def run (): return True try: - run () + run () except (KeyboardInterrupt, SystemExit): - print 'Test interrupted' - server.stop () - client.stop () - cleanup () + print 'Test interrupted' + server.stop () + client.stop () + cleanup () if (success == False): sys.exit(1) else: diff --git a/src/integration-tests/test_integration_clique.py.in b/src/integration-tests/test_integration_clique.py.in index 5cd8d9bb5..49a2c592c 100755 --- a/src/integration-tests/test_integration_clique.py.in +++ b/src/integration-tests/test_integration_clique.py.in @@ -63,7 +63,7 @@ def success_cont (check): def fail_cont (check): global success success= False; - check.eval(True) + check.evaluate(True) def check_disconnect_client (): @@ -87,7 +87,7 @@ def success_disconnect_server_cont (check): def fail_disconnect_server_cont (check): global success success= False; - check.eval(True) + check.evaluate(True) def check_disconnect_server (): @@ -116,7 +116,7 @@ def success_connect_cont (check): def fail_connect_cont (check): global success success= False; - check.eval(True) + check.evaluate(True) def check_connect (): diff --git a/src/integration-tests/test_integration_clique_nat.py.in b/src/integration-tests/test_integration_clique_nat.py.in index 0ea0a78cf..e8f771950 100755 --- a/src/integration-tests/test_integration_clique_nat.py.in +++ b/src/integration-tests/test_integration_clique_nat.py.in @@ -63,7 +63,7 @@ def success_cont (check): def fail_cont (check): global success success= False; - check.eval(True) + check.evaluate(True) def check_disconnect_client (): @@ -87,7 +87,7 @@ def success_disconnect_server_cont (check): def fail_disconnect_server_cont (check): global success success= False; - check.eval(True) + check.evaluate(False) def check_disconnect_server (): @@ -116,7 +116,7 @@ def success_connect_cont (check): def fail_connect_cont (check): global success success= False; - check.eval(True) + check.evaluate(False) def check_connect (): diff --git a/src/integration-tests/test_integration_disconnect.py.in b/src/integration-tests/test_integration_disconnect.py.in index 4c08289f5..5e137cfff 100755 --- a/src/integration-tests/test_integration_disconnect.py.in +++ b/src/integration-tests/test_integration_disconnect.py.in @@ -64,7 +64,7 @@ def success_disconnect_cont (check): def fail_disconnect_cont (check): global success success = False; - check.eval(True) + check.evaluate(True) def check_disconnect (): @@ -86,7 +86,7 @@ def success_connect_cont (check): def fail_connect_cont (check): global success success= False; - check.eval(True) + check.evaluate(True) def check_connect (): diff --git a/src/integration-tests/test_integration_restart.py.in b/src/integration-tests/test_integration_restart.py.in index 6a5c2ba4f..e2a72e729 100755 --- a/src/integration-tests/test_integration_restart.py.in +++ b/src/integration-tests/test_integration_restart.py.in @@ -68,7 +68,7 @@ def success_restart_cont (check): def fail_restart_cont (check): global success success = False; - check.eval(True) + check.evaluate(True) def success_connect_cont (check): @@ -101,7 +101,7 @@ def success_connect_cont (check): def fail_connect_cont (check): global success success= False; - check.eval(True) + check.evaluate(True) def check_connect (): |