summaryrefslogtreecommitdiffstats
path: root/extras/distributed-testing/distributed-test-runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'extras/distributed-testing/distributed-test-runner.py')
-rwxr-xr-xextras/distributed-testing/distributed-test-runner.py43
1 files changed, 30 insertions, 13 deletions
diff --git a/extras/distributed-testing/distributed-test-runner.py b/extras/distributed-testing/distributed-test-runner.py
index 68418fabfaf..5a07e2feab1 100755
--- a/extras/distributed-testing/distributed-test-runner.py
+++ b/extras/distributed-testing/distributed-test-runner.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python2
+#!/usr/bin/python3
from __future__ import absolute_import
from __future__ import division
@@ -28,29 +28,40 @@ CLIENT_TIMEOUT_S = 60
PATCH_FILE_UID = str(uuid.uuid4())
SSH_TIMEOUT_S = 10
MAX_ATTEMPTS = 3
+ADDRESS_FAMILY = 'IPv4'
+
+
+def socket_instance(address_family):
+ if address_family.upper() == 'ipv4'.upper():
+ return socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ elif address_family.upper() == 'ipv6'.upper():
+ return socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
+ else:
+ Log.error("Invalid IP address family")
+ sys.exit(1)
def patch_file():
return "/tmp/%s-patch.tar.gz" % PATCH_FILE_UID
# ..............................................................................
-# SimpleXMLRPCServer IPv6 Wrapper
+# SimpleXMLRPCServer IPvX Wrapper
# ..............................................................................
-class IPv6SimpleXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer):
+class GeneralXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer):
def __init__(self, addr):
SimpleXMLRPCServer.SimpleXMLRPCServer.__init__(self, addr)
def server_bind(self):
if self.socket:
self.socket.close()
- self.socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
+ self.socket = socket_instance(args.address_family)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
SimpleXMLRPCServer.SimpleXMLRPCServer.server_bind(self)
-class IPv6HTTPConnection(httplib.HTTPConnection):
+class HTTPConnection(httplib.HTTPConnection):
def __init__(self, host):
self.host = host
httplib.HTTPConnection.__init__(self, host)
@@ -62,12 +73,12 @@ class IPv6HTTPConnection(httplib.HTTPConnection):
self.sock.settimeout(old_timeout)
-class IPv6Transport(xmlrpclib.Transport):
+class IPTransport(xmlrpclib.Transport):
def __init__(self, *args, **kwargs):
xmlrpclib.Transport.__init__(self, *args, **kwargs)
def make_connection(self, host):
- return IPv6HTTPConnection(host)
+ return HTTPConnection(host)
# ..............................................................................
@@ -236,7 +247,7 @@ class TestServer:
def init(self):
Log.debug("Starting xmlrpc server on port %s" % self.port)
- self.rpc = IPv6SimpleXMLRPCServer(("", self.port))
+ self.rpc = GeneralXMLRPCServer(("", self.port))
self.rpc.register_instance(Handlers(self.scratchdir))
def serve(self):
@@ -372,14 +383,17 @@ class Handlers:
return self.shell.call("make install") == 0
@synchronized
- def prove(self, id, test, timeout, valgrind=False, asan_noleaks=True):
+ def prove(self, id, test, timeout, valgrind="no", asan_noleaks=True):
assert id == self.client_id
self.shell.cd(self.gluster_root)
env = "DEBUG=1 "
- if valgrind:
+ if valgrind == "memcheck" or valgrind == "yes":
cmd = "valgrind"
cmd += " --tool=memcheck --leak-check=full --track-origins=yes"
cmd += " --show-leak-kinds=all -v prove -v"
+ elif valgrind == "drd":
+ cmd = "valgrind"
+ cmd += " --tool=drd -v prove -v"
elif asan_noleaks:
cmd = "prove -v"
env += "ASAN_OPTIONS=detect_leaks=0 "
@@ -419,7 +433,7 @@ class RPCConnection((threading.Thread)):
def _connect(self):
url = "http://%s:%s" % (self.host, self.port)
- self.proxy = xmlrpclib.ServerProxy(url, transport=IPv6Transport())
+ self.proxy = xmlrpclib.ServerProxy(url, transport=IPTransport())
return self.proxy.hello(self.cb.id)
def disconnect(self):
@@ -816,8 +830,9 @@ parser.add_argument("--port", help="server port to listen",
type=int, default=DEFAULT_PORT)
# test role
parser.add_argument("--tester", help="start tester", action="store_true")
-parser.add_argument("--valgrind", help="run tests under valgrind",
- action="store_true")
+parser.add_argument("--valgrind[=memcheck,drd]",
+ help="run tests with valgrind tool 'memcheck' or 'drd'",
+ default="no")
parser.add_argument("--asan", help="test with asan enabled",
action="store_true")
parser.add_argument("--asan-noleaks", help="test with asan but no mem leaks",
@@ -836,6 +851,8 @@ parser.add_argument("--test-timeout",
default=TEST_TIMEOUT_S)
# general
parser.add_argument("-v", help="verbose", action="store_true")
+parser.add_argument("--address_family", help="IPv6 or IPv4 to use",
+ default=ADDRESS_FAMILY)
args = parser.parse_args()