Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions test/result.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Apache Thrift - integration test suite</title>
<link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.0/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf-8" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript" charset="utf-8" src="http://cdn.datatables.net/1.10.0/js/jquery.dataTables.js"></script>
<script>
var test_data;

$(document).ready( function () {
$.getJSON('results.json', function(testData) {
testTable = $('#test_results').DataTable( {
data: testData,
"columnDefs": [
{
"render": function ( data, type, row ) {
return data +' ('+ '<a href="'+row[5].Client+'">Client</a>,<a href="'+row[5].Server+'">Server</a>'+')';
},
"targets": 4
}
]
});
$('#test_results_filter label input')
.focus()
.val('failure');
});
});
</script>
</head>
<body>
<h2>Apache Thrift - integration test suite: Results</h2>
<table id="test_results" class="display">
<thead>
<tr>
<th>Server</th>
<th>Client</th>
<th>Protocol</th>
<th>Transport</th>
<th>Result (log)</th>
</tr>
</thead>
</table>
</body>
</html>
191 changes: 132 additions & 59 deletions test/test.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import os
import signal
import json
import platform
import shutil
import threading
from optparse import OptionParser
Expand All @@ -46,18 +47,30 @@
def relfile(fname):
return os.path.join(os.path.dirname(__file__), fname)

def runServiceTest(test_name, server_executable, server_extra_args, client_executable, client_extra_args, protocol, transport, port, use_zlib, use_ssl):
def getSocketArgs(socket_type):
if socket_type == 'ip':
return ""
elif socket_type == 'ip-ssl':
return "--ssl"
elif socket_type == 'domain':
return "--domain-socket=/tmp/ThriftTest.thrift"

def runServiceTest(test_name, server_executable, server_extra_args, client_executable, client_extra_args, server_protocol, client_protocol, transport, port, use_zlib, socket_type):
# Build command line arguments
server_args = [relfile(server_executable)]
cli_args = [relfile(client_executable)]
server_args.append('--protocol=%s' % server_protocol)
cli_args.append('--protocol=%s' % client_protocol)

for which in (server_args, cli_args):
which.append('--protocol=%s' % protocol) # accel, binary or compact
which.append('--transport=%s' % transport)
which.append('--port=%d' % port) # default to 9090
if use_zlib:
which.append('--zlib')
if use_ssl:
if socket_type == 'ip-ssl':
which.append('--ssl')
elif socket_type == 'domain':
which.append('--domain-socket=/tmp/ThriftTest.thrift')
# if options.verbose == 0:
# which.append('-q')
# if options.verbose == 2:
Expand All @@ -68,47 +81,53 @@ def runServiceTest(test_name, server_executable, server_extra_args, client_execu
server_log=open("log/" + test_name + "_server.log","a")
client_log=open("log/" + test_name + "_client.log","a")

if options.verbose > 0:
print 'Testing server: %s' % (' '.join(server_args))
serverproc = subprocess.Popen(server_args, stdout=server_log, stderr=server_log)
else:
serverproc = subprocess.Popen(server_args, stdout=server_log, stderr=server_log)

try:
if options.verbose > 0:
print 'Testing server: %s' % (' '.join(server_args))
serverproc = subprocess.Popen(server_args, stdout=server_log, stderr=server_log)
else:
serverproc = subprocess.Popen(server_args, stdout=server_log, stderr=server_log)
except OSError as e:
return "OS error({0}): {1}".format(e.errno, e.strerror)

def ensureServerAlive():
if serverproc.poll() is not None:
print ('FAIL: Server process (%s) failed with retcode %d'
% (' '.join(server_args), serverproc.returncode))
raise Exception('Server subprocess died, args: %s'
% (' '.join(server_args)))
return 'Server subprocess died, args: %s' % (' '.join(server_args))

# Wait for the server to start accepting connections on the given port.
sock = socket.socket()
sleep_time = 0.1 # Seconds
max_attempts = 100
try:
attempt = 0
while sock.connect_ex(('127.0.0.1', port)) != 0:
attempt += 1
if attempt >= max_attempts:
raise Exception("TestServer not ready on port %d after %.2f seconds"
% (port, sleep_time * attempt))
ensureServerAlive()
time.sleep(sleep_time)

if socket_type != 'domain':
while sock.connect_ex(('127.0.0.1', port)) != 0:
attempt += 1
if attempt >= max_attempts:
return "TestServer not ready on port %d after %.2f seconds" % (port, sleep_time * attempt)
ensureServerAlive()
time.sleep(sleep_time)
finally:
sock.close()

try:
o = []
def target():
if options.verbose > 0:
print 'Testing client: %s' % (' '.join(cli_args))
process = subprocess.Popen(cli_args, stdout=client_log, stderr=client_log)
o.append(process)
process.communicate()
else:
process = subprocess.Popen(cli_args, stdout=client_log, stderr=client_log)
o.append(process)
process.communicate()
try:
if options.verbose > 0:
print 'Testing client: %s' % (' '.join(cli_args))
process = subprocess.Popen(cli_args, stdout=client_log, stderr=client_log)
o.append(process)
process.communicate()
else:
process = subprocess.Popen(cli_args, stdout=client_log, stderr=client_log)
o.append(process)
process.communicate()
except OSError as e:
return "OS error({0}): {1}".format(e.errno, e.strerror)
except:
return "Unexpected error:", sys.exc_info()[0]
thread = threading.Thread(target=target)
thread.start()

Expand All @@ -117,6 +136,8 @@ def target():
print 'Terminating process'
o[0].terminate()
thread.join()
if(len(o)==0):
return "Client subprocess failed, args: %s" % (' '.join(cli_args))
ret = o[0].returncode
if ret != 0:
return "Client subprocess failed, retcode=%d, args: %s" % (ret, ' '.join(cli_args))
Expand All @@ -139,15 +160,18 @@ def target():

test_count = 0
failed = 0

platform = platform.system()
if os.path.exists('log'): shutil.rmtree('log')
os.makedirs('log')
if os.path.exists('results.json'): os.remove('results.json')
results_json = open("results.json","a")
results_json.write("[\n")

with open('tests.json') as data_file:
with open('tests.json') as data_file:
data = json.load(data_file)

#subprocess.call("export NODE_PATH=../lib/nodejs/test:../lib/nodejs/lib:${NODE_PATH}")

count = 0
for server in data["server"]:
server_executable = server["executable"]
server_extra_args = ""
Expand All @@ -158,30 +182,79 @@ def target():
for transport in server["transports"]:
for sock in server["sockets"]:
for client in data["client"]:
client_executable = client["executable"]
client_extra_args = ""
client_lib = client["lib"]
if "extra_args" in client:
client_extra_args = client["extra_args"]
if protocol in client["protocols"]:
if transport in client["transports"]:
if sock in client["sockets"]:
test_name = server_lib + "_" + client_lib + "_" + protocol + "_" + transport + "_" + sock
ssl = 0
if sock == 'ip-ssl':
ssl = 1
ret = runServiceTest(test_name, server_executable, server_extra_args, client_executable, client_extra_args, protocol, transport, 9090, 0, ssl)
if ret != None:
failed += 1
print "Error: %s" % ret
print "Using"
print (' Server: %s --protocol=%s --transport=%s %s'
% (server_executable, protocol, transport, ' '.join(server_extra_args)))
print (' Client: %s --protocol=%s --transport=%s %s'
% (client_executable, protocol, transport, ''.join(client_extra_args)))


test_count += 1

print '%s failed of %s tests in total' % (failed, test_count)

if platform in server["platform"] and platform in client["platform"]:
client_executable = client["executable"]
client_extra_args = ""
client_lib = client["lib"]
if "extra_args" in client:
client_extra_args = client["extra_args"]
if protocol in client["protocols"]:
if transport in client["transports"]:
if sock in client["sockets"]:
if count != 0:
results_json.write(",\n")
count = 1
results_json.write("\t[\n\t\t\"" + server_lib + "\",\n\t\t\"" + client_lib + "\",\n\t\t\"" + protocol + "\",\n\t\t\"" + transport + "-" + sock + "\",\n" )
test_name = server_lib + "_" + client_lib + "_" + protocol + "_" + transport + "_" + sock
ret = runServiceTest(test_name, server_executable, server_extra_args, client_executable, client_extra_args, protocol, protocol, transport, 9090, 0, sock)
if ret != None:
failed += 1
print "Error: %s" % ret
print "Using"
print (' Server: %s --protocol=%s --transport=%s %s %s'
% (server_executable, protocol, transport, getSocketArgs(sock), ' '.join(server_extra_args)))
print (' Client: %s --protocol=%s --transport=%s %s %s'
% (client_executable, protocol, transport, getSocketArgs(sock), ''.join(client_extra_args)))
results_json.write("\t\t\"failure\",\n")
else:
results_json.write("\t\t\"success\",\n")
results_json.write("\t\t{\n\t\t\t\"Client\":\"log/" + test_name + "_client.log\",\n\t\t\t\"Server\":\"log/" + test_name + "_server.log\"\n\t\t}\n\t]")
test_count += 1
if protocol == 'binary' and 'accel' in client["protocols"]:
if transport in client["transports"]:
if sock in client["sockets"]:
if count != 0:
results_json.write(",\n")
count = 1
results_json.write("\t[\n\t\t\"" + server_lib + "\",\n\t\t\"" + client_lib + "\",\n\t\t\"accel-binary\",\n\t\t\"" + transport + "-" + sock + "\",\n" )
test_name = server_lib + "_" + client_lib + "_accel-binary_" + transport + "_" + sock
ret = runServiceTest(test_name, server_executable, server_extra_args, client_executable, client_extra_args, protocol, 'accel', transport, 9090, 0, sock)
if ret != None:
failed += 1
print "Error: %s" % ret
print "Using"
print (' Server: %s --protocol=%s --transport=%s %s %s'
% (server_executable, protocol, transport, getSocketArgs(sock), ' '.join(server_extra_args)))
print (' Client: %s --protocol=%s --transport=%s %s %s'
% (client_executable, protocol, transport , getSocketArgs(sock), ''.join(client_extra_args)))
results_json.write("\t\t\"failure\",\n")
else:
results_json.write("\t\t\"success\",\n")
results_json.write("\t\t{\n\t\t\t\"Client\":\"log/" + test_name + "_client.log\",\n\t\t\t\"Server\":\"log/" + test_name + "_server.log\"\n\t\t}\n\t]")
test_count += 1
if protocol == 'accel' and 'binary' in client["protocols"]:
if transport in client["transports"]:
if sock in client["sockets"]:
if count != 0:
results_json.write(",\n")
count = 1
results_json.write("\t[\n\t\t\"" + server_lib + "\",\n\t\t\"" + client_lib + "\",\n\t\t\"binary-accel\",\n\t\t\"" + transport + "-" + sock + "\",\n" )
test_name = server_lib + "_" + client_lib + "_binary-accel_" + transport + "_" + sock
ret = runServiceTest(test_name, server_executable, server_extra_args, client_executable, client_extra_args, protocol, 'binary', transport, 9090, 0, sock)
if ret != None:
failed += 1
print "Error: %s" % ret
print "Using"
print (' Server: %s --protocol=%s --transport=%s %s %s'
% (server_executable, protocol, transport + sock, getSocketArgs(sock), ' '.join(server_extra_args)))
print (' Client: %s --protocol=%s --transport=%s %s %s'
% (client_executable, protocol, transport + sock, getSocketArgs(sock), ''.join(client_extra_args)))
results_json.write("\t\t\"failure\",\n")
else:
results_json.write("\t\t\"success\",\n")
results_json.write("\t\t{\n\t\t\t\"Client\":\"log/" + test_name + "_client.log\",\n\t\t\t\"Server\":\"log/" + test_name + "_server.log\"\n\t\t}\n\t]")
test_count += 1
results_json.write("\n]")
results_json.flush()
results_json.close()
print '%s failed of %s tests in total' % (failed, test_count)
30 changes: 28 additions & 2 deletions test/tests.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
"sockets": [
"ip",
"ip-ssl"
],
"platform": [
"Linux"
]
},
{
Expand All @@ -36,7 +39,11 @@
],
"sockets": [
"ip",
"ip-ssl"
"ip-ssl",
"domain"
],
"platform": [
"Linux"
]
},
{
Expand All @@ -55,6 +62,9 @@
"sockets": [
"ip",
"ip-ssl"
],
"platform": [
"Linux"
]
},
{
Expand All @@ -73,6 +83,9 @@
],
"sockets": [
"ip"
],
"platform": [
"Linux"
]
}
],
Expand All @@ -96,6 +109,9 @@
"sockets": [
"ip",
"ip-ssl"
],
"platform": [
"Linux"
]
},
{
Expand All @@ -114,7 +130,11 @@
],
"sockets": [
"ip",
"ip-ssl"
"ip-ssl",
"domain"
],
"platform": [
"Linux"
]
},
{
Expand All @@ -133,6 +153,9 @@
],
"sockets": [
"ip"
],
"platform": [
"Linux"
]
},
{
Expand All @@ -151,6 +174,9 @@
"sockets": [
"ip",
"ip-ssl"
],
"platform": [
"Linux"
]
}
]
Expand Down