summaryrefslogtreecommitdiff
path: root/cpp/config/TestUtil.py
diff options
context:
space:
mode:
authorBrent Eagles <brent@zeroc.com>2007-11-07 14:59:34 -0330
committerBrent Eagles <brent@zeroc.com>2007-11-07 14:59:34 -0330
commit676286717393ad5a1dfecac80022ce85cd503711 (patch)
treefbf5f846218fcac6de115bea01fe1572d309d0c2 /cpp/config/TestUtil.py
parent- Fixing bug 2522 for Python. This involved adding the C++ class (diff)
downloadice-676286717393ad5a1dfecac80022ce85cd503711.tar.bz2
ice-676286717393ad5a1dfecac80022ce85cd503711.tar.xz
ice-676286717393ad5a1dfecac80022ce85cd503711.zip
- Moved cpp/slice to slice
- Merged all TestUtil.py modules to config/TestUtil.py - Moved all certs to config/certs - Updated test scripts to refer to new TestUtil.py module and use new interfaces - Updated build systems to refer to new slice location - Moved cpp/install to distribution - Moved and merged all IceGridAdmin.py modules to config. - Modified build system to deal with new build logic. That is there are 3 basic ways to find the slice translators and runtime: ICE_HOME, an RPM install and the source distribution. Automatically detecting Ice in a default install location is now problematic and no longer done.
Diffstat (limited to 'cpp/config/TestUtil.py')
-rw-r--r--cpp/config/TestUtil.py539
1 files changed, 0 insertions, 539 deletions
diff --git a/cpp/config/TestUtil.py b/cpp/config/TestUtil.py
deleted file mode 100644
index d06d328c52a..00000000000
--- a/cpp/config/TestUtil.py
+++ /dev/null
@@ -1,539 +0,0 @@
-#!/usr/bin/env python
-
-# **********************************************************************
-#
-# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
-#
-# This copy of Ice is licensed to you under the terms described in the
-# ICE_LICENSE file included in this distribution.
-#
-# **********************************************************************
-
-#
-# Set protocol to "ssl" in case you want to run the tests with the
-# SSL protocol. Otherwise TCP is used.
-#
-protocol = ""
-#protocol = "ssl"
-
-#
-# Set compressed to 1 in case you want to run the tests with
-# protocol compression.
-#
-compress = 0
-#compress = 1
-
-#
-# Set threadPerConnection to 1 in case you want to run the tests in
-# thread per connection mode.
-#
-
-threadPerConnection = 0
-#threadPerConnection = 1
-
-#
-# If you don't set "host" below, then the Ice library will try to find
-# out the IP address of this host. For the Ice test suite, it's best
-# to set the IP address explicitly to 127.0.0.1. This avoid problems
-# with incorrect DNS or hostname setups.
-#
-host = "127.0.0.1"
-
-#
-# To print the commands that are being run.
-#
-debug = 0
-#debug = 1
-
-#
-# Don't change anything below this line!
-#
-import sys, os, re, errno, getopt, time
-from threading import Thread
-
-def usage():
- print "usage: " + sys.argv[0] + " --debug --protocol ssl|tcp --compress --host host --threadPerConnection"
- sys.exit(2)
-try:
- opts, args = getopt.getopt(sys.argv[1:], "", ["debug", "protocol=", "compress", "host=", "threadPerConnection"])
-except getopt.GetoptError:
- usage()
-
-for o, a in opts:
- if o == "--debug":
- debug = 1
- if o == "--protocol":
- if a not in ( "tcp", "ssl"):
- usage()
- protocol = a
- if o == "--compress":
- compress = 1
- if o == "--threadPerConnection":
- threadPerConnection = 1
- if o == "--host":
- host = a
-
-def getIceVersion():
-
- config = open(os.path.join(toplevel, "include", "IceUtil", "Config.h"), "r")
- return re.search("ICE_STRING_VERSION \"([0-9\.]*)\"", config.read()).group(1)
-
-def getIceSoVersion():
-
- config = open(os.path.join(toplevel, "include", "IceUtil", "Config.h"), "r")
- intVersion = int(re.search("ICE_INT_VERSION ([0-9]*)", config.read()).group(1))
- majorVersion = intVersion / 10000
- minorVersion = intVersion / 100 - 100 * majorVersion
- patchVersion = intVersion % 100
- if patchVersion > 50:
- if patchVersion >= 52:
- return '%db%d' % (majorVersion * 10 + minorVersion, patchVersion - 50)
- else:
- return '%db' % (majorVersion * 10 + minorVersion)
- else:
- return '%d' % (majorVersion * 10 + minorVersion)
-
-def isCygwin():
-
- # The substring on sys.platform is required because some cygwin
- # versions return variations like "cygwin_nt-4.01".
- return sys.platform[:6] == "cygwin"
-
-def isWin32():
-
- return sys.platform == "win32" or isCygwin()
-
-
-def isWin9x():
-
- if isWin32():
- return not (os.environ.has_key("OS") and os.environ["OS"] == "Windows_NT")
- else:
- return 0
-
-def isSolaris():
-
- return sys.platform == "sunos5"
-
-def isHpUx():
-
- return sys.platform == "hp-ux11"
-
-def isAIX():
- return sys.platform in ['aix4', 'aix5']
-
-def isDarwin():
-
- return sys.platform == "darwin"
-
-def closePipe(pipe):
- try:
- status = pipe.close()
- except IOError, ex:
- # TODO: There's a waitpid problem on CentOS, so we have to ignore ECHILD.
- if ex.errno == errno.ECHILD:
- status = 0
- # This happens with the test/IceGrid/simple test on AIX
- elif ex.errno == 0:
- status = 0
- else:
- raise
- return status
-
-class ReaderThread(Thread):
- def __init__(self, pipe):
- self.pipe = pipe
- Thread.__init__(self)
-
- def run(self):
-
- try:
- while 1:
- line = self.pipe.readline()
- if not line: break
- # Suppress "adapter ready" messages. Under windows the eol isn't \n.
- if not line.endswith(" ready\n") and not line.endswith(" ready\r\n"):
- sys.stdout.flush()
- print line,
- except IOError:
- pass
-
- #print "TERMINATED: " + str(self.pipe)
- self.status = closePipe(self.pipe)
-
- def getPipe(self):
- return self.pipe
-
- def getStatus(self):
- return self.status
-
-serverPids = []
-serverThreads = []
-allServerThreads = []
-
-def joinServers():
- global serverThreads
- global allServerThreads
- for t in serverThreads:
- t.join()
- allServerThreads.append(t)
- serverThreads = []
-
-# This joins with all servers and if any of them failed then
-# it returns the failure status.
-def serverStatus():
- global allServerThreads
- joinServers()
- for t in allServerThreads:
- status = t.getStatus()
- if status:
- return status
- return 0
-
-# This joins with a specific server (the one started with the given pipe)
-# returns its exit status. If the server cannot be found an exception
-# is raised.
-def specificServerStatus(pipe, timeout = None):
- global serverThreads
- for t in serverThreads:
- if t.getPipe() == pipe:
- serverThreads.remove(t)
- if isWin32() and timeout != None:
- #
- # BUGFIX: On Windows x64 with python 2.5 join with
- # a timeout doesn't work (it hangs for the duration
- # of the timeout if the thread is alive at the time
- # of the join call).
- #
- while timeout >= 0 and t.isAlive():
- time.sleep(1)
- timeout -= 1
- if not t.isAlive():
- t.join()
- else:
- t.join(timeout)
- if t.isAlive():
- raise "server with pipe " + str(pipe) + " did not exit within the timeout period."
- status = t.getStatus()
- return status
- raise "can't find server with pipe: " + str(pipe)
-
-def killServers():
-
- global serverPids
- global serverThreads
-
- for pid in serverPids:
-
- if isWin32():
- try:
- import win32api
- handle = win32api.OpenProcess(1, 0, pid)
- win32api.TerminateProcess(handle, 0)
- except ImportError, ex:
- print "Sorry: you must install the win32all package for killServers to work."
- return
- except:
- pass # Ignore errors, such as non-existing processes.
- else:
- try:
- os.kill(pid, 9)
- except:
- pass # Ignore errors, such as non-existing processes.
-
- serverPids = []
-
- #
- # Now join with all the threads
- #
- joinServers()
-
-def getServerPid(pipe):
- global serverPids
- global serverThreads
-
- while 1:
- output = pipe.readline().strip()
- if not output:
- print "failed!"
- killServers()
- sys.exit(1)
- if output.startswith("warning: "):
- continue
- break
-
- try:
- serverPids.append(int(output))
- except ValueError:
- print "Output is not a PID: " + output
- raise
-
-def ignorePid(pipe):
-
- while 1:
- output = pipe.readline().strip()
- if not output:
- print "failed!"
- killServers()
- sys.exit(1)
- if output.startswith("warning: "):
- continue
- break
-
-def getAdapterReady(pipe, createThread = True, count = 1):
- global serverThreads
-
- while count > 0:
- output = pipe.readline().strip()
- count = count - 1
-
- if not output:
- print "failed!"
- killServers()
- sys.exit(1)
-
- # Start a thread for this server.
- if createThread:
- serverThread = ReaderThread(pipe)
- serverThread.start()
- serverThreads.append(serverThread)
-
-def getIceBox(testdir):
-
- #
- # Get and return the path of the IceBox executable
- #
-
- iceBox = ""
- if isWin32():
- #
- # Read the build.txt file from the test directory to figure out
- # how the IceBox service was built ("debug" vs. "release") and
- # decide which icebox executable to use.
- #
- build = open(os.path.join(testdir, "build.txt"), "r")
- type = build.read().strip()
- if type == "debug":
- iceBox = os.path.join(toplevel, "bin", "iceboxd.exe")
- elif type == "release":
- iceBox = os.path.join(toplevel, "bin", "icebox.exe")
- else:
- iceBox = os.path.join(toplevel, "bin", "icebox")
-
- if iceBox == "" or not os.path.exists(iceBox):
- print "couldn't find icebox executable to run the test"
- sys.exit(0)
-
- return iceBox;
-
-def waitServiceReady(pipe, token, createThread = True):
- global serverThreads
-
- while 1:
- output = pipe.readline().strip()
- if not output:
- print "failed!"
- sys.exit(1)
- if output == token + " ready":
- break
-
- # Start a thread for this server.
- if createThread:
- serverThread = ReaderThread(pipe)
- serverThread.start()
- serverThreads.append(serverThread)
-
-def printOutputFromPipe(pipe):
-
- while 1:
- c = pipe.read(1)
- if c == "":
- break
- os.write(1, c)
-
-def addLdPath(path):
- if isWin32():
- if isCygwin():
- os.environ["PATH"] = path + ":" + os.getenv("PATH", "")
- else:
- os.environ["PATH"] = path + ";" + os.getenv("PATH", "")
- elif isAIX():
- os.environ["LIBPATH"] = path + ":" + os.getenv("LIBPATH", "")
- else:
- os.environ["LD_LIBRARY_PATH"] = path + ":" + os.getenv("LD_LIBRARY_PATH", "")
- os.environ["LD_LIBRARY_PATH_64"] = path + ":" + os.getenv("LD_LIBRARY_PATH_64", "")
-
-for toplevel in [".", "..", "../..", "../../..", "../../../.."]:
- toplevel = os.path.normpath(toplevel)
- if os.path.exists(os.path.join(toplevel, "config", "TestUtil.py")):
- break
-else:
- raise "can't find toplevel directory!"
-
-if isWin32():
- if isCygwin():
- os.environ["PATH"] = os.path.join(toplevel, "bin") + ":" + os.getenv("PATH", "")
- else:
- os.environ["PATH"] = os.path.join(toplevel, "bin") + ";" + os.getenv("PATH", "")
-elif isHpUx():
- os.environ["SHLIB_PATH"] = os.path.join(toplevel, "lib") + ":" + os.getenv("SHLIB_PATH", "")
-elif isDarwin():
- os.environ["DYLD_LIBRARY_PATH"] = os.path.join(toplevel, "lib") + ":" + os.getenv("DYLD_LIBRARY_PATH", "")
- os.environ["DYLD_BIND_AT_LAUNCH"] = "1"
-elif isAIX():
- os.environ["LIBPATH"] = os.path.join(toplevel, "lib") + ":" + os.getenv("LIBPATH", "")
-else:
- os.environ["LD_LIBRARY_PATH"] = os.path.join(toplevel, "lib") + ":" + os.getenv("LD_LIBRARY_PATH", "")
- os.environ["LD_LIBRARY_PATH_64"] = os.path.join(toplevel, "lib") + ":" + os.getenv("LD_LIBRARY_PATH_64", "")
-
-if protocol == "ssl":
- plugin = " --Ice.Plugin.IceSSL=IceSSL:createIceSSL"
- clientProtocol = plugin + " --Ice.Default.Protocol=ssl" + \
- " --IceSSL.DefaultDir=" + os.path.join(toplevel, "certs") + \
- " --IceSSL.CertFile=c_rsa1024_pub.pem" + \
- " --IceSSL.KeyFile=c_rsa1024_priv.pem" + \
- " --IceSSL.CertAuthFile=cacert.pem"
- serverProtocol = plugin + " --Ice.Default.Protocol=ssl" + \
- " --IceSSL.DefaultDir=" + os.path.join(toplevel, "certs") + \
- " --IceSSL.CertFile=s_rsa1024_pub.pem" + \
- " --IceSSL.KeyFile=s_rsa1024_priv.pem" + \
- " --IceSSL.CertAuthFile=cacert.pem"
- clientServerProtocol = clientProtocol
-else:
- clientProtocol = ""
- serverProtocol = ""
- clientServerProtocol = ""
-
-if compress:
- clientProtocol += " --Ice.Override.Compress"
- serverProtocol += " --Ice.Override.Compress"
- clientServerProtocol += " --Ice.Override.Compress"
-
-if host != "":
- defaultHost = " --Ice.Default.Host=" + host
-else:
- defaultHost = ""
-
-commonClientOptions = " --Ice.NullHandleAbort --Ice.Warn.Connections"
-
-commonServerOptions = " --Ice.PrintProcessId --Ice.PrintAdapterReady --Ice.NullHandleAbort" + \
- " --Ice.Warn.Connections --Ice.ServerIdleTime=30"
-
-if threadPerConnection:
- commonClientOptions += " --Ice.ThreadPerConnection"
- commonServerOptions += " --Ice.ThreadPerConnection"
-else:
- commonServerOptions += " --Ice.ThreadPool.Server.Size=1 --Ice.ThreadPool.Server.SizeMax=3" + \
- " --Ice.ThreadPool.Server.SizeWarn=0"
-
-clientOptions = clientProtocol + defaultHost + commonClientOptions
-serverOptions = serverProtocol + defaultHost + commonServerOptions
-clientServerOptions = clientServerProtocol + defaultHost + commonServerOptions
-collocatedOptions = clientServerProtocol + defaultHost
-
-def clientServerTestWithOptionsAndNames(name, additionalServerOptions, additionalClientOptions, \
- serverName, clientName):
-
- testdir = os.path.join(toplevel, "test", name)
- server = os.path.join(testdir, serverName)
- client = os.path.join(testdir, clientName)
-
- print "starting " + serverName + "...",
- serverCmd = server + serverOptions + additionalServerOptions
- if debug:
- print "(" + serverCmd + ")",
- serverPipe = os.popen(serverCmd + " 2>&1")
- getServerPid(serverPipe)
- getAdapterReady(serverPipe)
- print "ok"
-
- print "starting " + clientName + "...",
- clientCmd = client + clientOptions + additionalClientOptions
- if debug:
- print "(" + clientCmd + ")",
- clientPipe = os.popen(clientCmd + " 2>&1")
- print "ok"
-
- printOutputFromPipe(clientPipe)
-
- clientStatus = closePipe(clientPipe)
- if clientStatus:
- killServers()
-
- joinServers()
-
- if clientStatus or serverStatus():
- sys.exit(1)
-
-def clientServerTestWithOptions(name, additionalServerOptions, additionalClientOptions):
-
- clientServerTestWithOptionsAndNames(name, additionalServerOptions, additionalClientOptions, "server", "client")
-
-def clientServerTest(name):
-
- clientServerTestWithOptions(name, "", "")
-
-def mixedClientServerTestWithOptions(name, additionalServerOptions, additionalClientOptions):
-
- testdir = os.path.join(toplevel, "test", name)
- server = os.path.join(testdir, "server")
- client = os.path.join(testdir, "client")
-
- print "starting server...",
- serverCmd = server + clientServerOptions + additionalServerOptions
- if debug:
- print "(" + serverCmd + ")",
- serverPipe = os.popen(serverCmd + " 2>&1")
- getServerPid(serverPipe)
- getAdapterReady(serverPipe)
- print "ok"
-
- print "starting client...",
- clientCmd = client + clientServerOptions + additionalClientOptions
- if debug:
- print "(" + clientCmd + ")",
- clientPipe = os.popen(clientCmd + " 2>&1")
- ignorePid(clientPipe)
- getAdapterReady(clientPipe, False)
- print "ok"
-
- printOutputFromPipe(clientPipe)
-
- clientStatus = closePipe(clientPipe)
-
- if clientStatus:
- killServers()
-
- if clientStatus or serverStatus():
- sys.exit(1)
-
-def mixedClientServerTest(name):
-
- mixedClientServerTestWithOptions(name, "", "")
-
-def collocatedTestWithOptions(name, additionalOptions):
-
- testdir = os.path.join(toplevel, "test", name)
- collocated = os.path.join(testdir, "collocated")
-
- print "starting collocated...",
- command = collocated + collocatedOptions + additionalOptions
- if debug:
- print "(" + command + ")",
- collocatedPipe = os.popen(command + " 2>&1")
- print "ok"
-
- printOutputFromPipe(collocatedPipe)
-
- collocatedStatus = closePipe(collocatedPipe)
-
- if collocatedStatus:
- sys.exit(1)
-
-def collocatedTest(name):
-
- collocatedTestWithOptions(name, "")
-
-def cleanDbDir(path):
- for filename in [ os.path.join(path, f) for f in os.listdir(path) if f != ".gitignore" and f != "DB_CONFIG" ]:
- os.remove(filename)