blob: bf5b147133a882c9b1c38769fa4d6924288dcd3c [file] [log] [blame]
#!/usr/bin/env python
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
from __future__ import print_function
import sys, optparse
from subprocess import Popen,PIPE
def run_test(cmd):
try:
process = Popen(cmd)
except OSError:
assert False, "Unable to execute command '%s', is it in your PATH?" % cmd[0]
return process.wait()
def main(argv=None):
"""
Run a subset of the Proton tests for an extended period of time.
"""
# tests is a list of test configurations. Each configuration is
# represented as a two-element tuple. Tuple[0] is the pattern passed to
# proton-test that identifies the test case. Tuple[1] is a list of maps.
# Each map contains the parameters for one test. A test (of 'pattern') is
# executed for each map in Tuple[1]
parser = optparse.OptionParser()
parser.add_option("-i", "--iterations", action="store", type="int", default=1,
help="# of times to repeat each test.")
parser.add_option("-v", "--verbose", action="store_true",
help="print extra detail to stdout")
opts, extra = parser.parse_args(args=argv)
iterations = opts.iterations
verbose = opts.verbose
tests = [
("proton_tests.soak.MessengerTests.test_oneway_*",
# 104,297 * 7 = 730,079 msgs transferred per iteration
[{ "iterations": iterations,
"send_count": 104297,
"target_count": 7 }]),
("proton_tests.soak.MessengerTests.test_echo_*",
# 102,811 * 5 * 2 (send+reply) = 1,028,110 msgs transferred per iteration
[{"iterations": iterations,
"send_count": 102811,
"target_count": 5,
"send_batch": 3187}]),
("proton_tests.soak.MessengerTests.test_relay_*",
# 102,197 * 4 * 3 (send+reply+forward)= 1,226,364 msgs transferred per iteration
[{"iterations": iterations,
"send_count": 102197,
"target_count": 4,
"send_batch": 829,
"forward_count": 7}]),
("proton_tests.soak.MessengerTests.test_star_topology_*",
# 2 ports * 3 senders = 6 connections per iteration
# 6 connections * 7 targets = 42 links per iteration
# 42 links * 35419 msg * 2 (send/reply) = 2,975,196 msgs per iteration
[{"iterations": iterations,
"port_count": 2,
"sender_count": 3,
"target_count": 7,
"send_count": 35419,
"send_batch": 311}]),
#
# Scale up the number of connections and links
#
("proton_tests.soak.MessengerTests.test_star_topology_C",
# 10 ports * 10 senders = 100 connections per iteration
# 100 connections * 11 targets = 1100 links per iteration
# 1100 links * 311 msg * 2 (send/reply) = 684,200 msgs per iteration
[{"iterations": iterations,
"port_count": 10,
"sender_count": 10,
"target_count": 11,
"send_count": 311,
"send_batch": 3}]),
("proton_tests.soak.MessengerTests.test_star_topology_C_SSL",
# 10 ports * 10 senders = 100 connections per iteration
# 100 connections * 11 targets = 1100 links per iteration
# 1100 links * 30 msg * 2 (send/reply) = 66000 msgs per iteration
[{"iterations": iterations,
"port_count": 10,
"sender_count": 10,
"target_count": 11,
"send_count": 30,
"send_batch": 3}])
]
for test in tests:
pattern = test[0]
param_list = test[1]
for test_params in param_list:
command = ["proton-test"]
for (k, v) in test_params.iteritems():
command.append( "-D%s=%s" % (k,v) )
if verbose:
command.append( "-Dverbose" )
command.append( pattern )
if verbose:
print("command='%s'" % str(command))
run_test(command)
return 0
if __name__ == "__main__":
sys.exit(main())