diff options
author | Aidan Skinner <aidan@apache.org> | 2008-07-15 08:48:27 +0000 |
---|---|---|
committer | Aidan Skinner <aidan@apache.org> | 2008-07-15 08:48:27 +0000 |
commit | 8e5c7b2b92de0f7ab772606f24bd7a32501b6839 (patch) | |
tree | 443d89ab108aa2aafad3fa54e781f18f3ac6980a | |
parent | 2fd1b08b605d2664394ff5708c3cbaebd1dc21ef (diff) | |
download | qpid-python-8e5c7b2b92de0f7ab772606f24bd7a32501b6839.tar.gz |
Multi-version interop test script
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@676831 13f79535-47bb-0310-9956-ffa450edef68
-rwxr-xr-x | java/integrationtests/bin/interoptests.py | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/java/integrationtests/bin/interoptests.py b/java/integrationtests/bin/interoptests.py new file mode 100755 index 0000000000..210079383e --- /dev/null +++ b/java/integrationtests/bin/interoptests.py @@ -0,0 +1,173 @@ +#!/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. + +import glob, os, subprocess +from optparse import OptionParser +from subprocess import Popen + +interop_cases = ["InteropTestCase1DummyRun", "InteropTestCase2BasicP2P", "InteropTestCase3BasicPubSub", "InteropTestCase4P2PMessageSize", "InteropTestCase5PubSubMessageSize"] + +interop_command = "java -cp %s org.apache.qpid.test.framework.distributedtesting.Coordinator --xml -e interop -o . -n interop org.apache.qpid.interop.testcases.%s" + +# TODO: read this from the ant properties file +clientlibs = ["qpid-integrationtests-incubating-M3.jar", + "qpid-junit-toolkit-incubating-M3.jar", + "junit-3.8.1.jar", + "qpid-systests-incubating-M3.jar", + "qpid-junit-toolkit-incubating-M3.jar", + "geronimo-jms_1.1_spec-1.0.jar", + "log4j-1.2.12.jar"] + +def main(): + parser = OptionParser() + parser.add_option("-t", "--testlib", dest="testlib", action="store", + type="string", + help="The directory containing the test classes to run") + parser.add_option("-b", "--brokers", dest="brokers", action="store", + type="string", + help="The directory containing the unpacked brokers to test") + parser.add_option("-j", "--java", dest="java", action="store", + type="string", + help="The directory containing the java client to test") + parser.add_option("-d", "--dotnet", dest="dotnet", action="store", + type="string", + help="The directory containing the .Net client to test") + parser.add_option("-c", "--cpp", dest="cpp", action="store", + type="string", + help="The directory containing the C++ client to test") + (options, args) = parser.parse_args() + + # check available brokers + if (options.brokers == None or + not os.path.exists(options.brokers) or + not os.path.isdir(options.brokers)): + parser.error("Broker directory must be specified and must exist") + + # check available clients + if (options.java == None or + not os.path.exists(options.java) or + not os.path.isdir(options.java)): + parser.error("Java client directory must be specified and must exist") + + # check available tests + if (options.testlib == None or + not os.path.exists(options.testlib) or + not os.path.isdir(options.testlib)): + parser.error("Test directory must be specified and must exist") + + # check dotnet test client + if (options.testlib == None or + not os.path.exists(options.dotnet) or + not os.path.exists(options.dotnet+"/TestClient.exe")): + parser.error(".Net test directory must be specified and must contain TestClient.exe") + + # Get list of available broker and client versions + brokers = glob.glob(options.brokers+"/qpid-[0-9].[0-9].[0-9].[0-9]") + java_clients = glob.glob(options.java+"/qpid-[0-9].[0-9].[0-9].[0-9]*") + + if (not len(brokers) > 0): + parser.error("Broker directory did not contain any brokers!") + + if (not len(java_clients) > 0): + parser.error("Broker directory did not contain any brokers!") + + for broker in brokers: + if (os.path.isdir(broker)): + for client in java_clients: + if (os.path.isdir(client)): + test(options.testlib, broker, client, options.dotnet) + +def start_dotnet(dotnetpath): + return Popen(["%s/TestClient.exe" % os.path.abspath(dotnetpath), + "-bamqp://guest:guest@clientid/?brokerlist=\'tcp://localhost:5672\'"], + stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + +def start_java(javapath): + # Setup classpath + classpath = "" + for lib in clientlibs: + classpath = classpath + testlibdir+"/"+lib+";" + + classpath = classpath + clientpath+"/lib/qpid-incubating.jar" + + # Add qpid common since the tests need that, classpath hatefulness + classpath = classpath + ";"+testlibdir+"/qpid-common-incubating-M3.jar" + + return Popen(["java", "-cp","\""+classpath+"\"", + "org.apache.qpid.test.framework.distributedtesting.TestClient"], + stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + +def start_cpp(cpppath): + pass + +def run_tests(): + for testcase in interop_cases: + cmd = " ".join(["java", "-cp","\""+classpath+"\"", "org.apache.qpid.test.framework.distributedtesting.Coordinator", + "--xml", "-e", "interop", "-o", ".", "-n", "interop", ("org.apache.qpid.interop.testcases.%s" % testcase)]) + fd = os.popen(cmd, "r") + output = fd.read() + fd.close() + +def test(testlibdir, brokerpath, javapath, dotnetpath, cpppath): + print ("Testing broker in %s\nclient in %s" % (brokerpath, javapath)) + print ("Logging too %s" % ("/tmp/qpid-interop-tests/%s-%s" % + (os.path.basename(brokerpath), os.path.basename(javapath)))) + os.environ["QPID_HOME"] = brokerpath + os.environ["QPID_WORK"] = ("/tmp/qpid-interop-tests/%s-%s" % + (os.path.basename(brokerpath), os.path.basename(javapath))) + + brokerp, javacp, dotnetp, cppp, coordinatorp = (None, None, None, None, None) + + try: + # Start broker + brokerp = Popen(brokerpath+"/bin/qpid-server", + stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + print ("Started broker, pid %s" % brokerp.pid) + + cppp = start_cpp(cpppath) + print ("Started C++ client, pid %s" % cppp.pid) + + dotnetp = start_dotnet(dotnetpath) + print ("Started .Net client, pid %s" % dotnetp.pid) + + javacp = start_java(javapath) + print ("Started client, pid %s" % javacp.pid) + + run_tests() + + finally: + # Shutdown broker and clients + if javacp != None: + os.kill(javacp.pid, 9) + if dotnetp != None: + os.kill(dotnetp.pid, 9) + if coordinatorp != None: + os.kill(coordinatorp.pid, 9) + if brokerp != None: + os.kill(brokerp.pid, 9) + + # Start coordinator + + +if __name__ == "__main__": + main() |