summaryrefslogtreecommitdiff
path: root/cppe/config/TestUtil.py
diff options
context:
space:
mode:
Diffstat (limited to 'cppe/config/TestUtil.py')
-rw-r--r--cppe/config/TestUtil.py345
1 files changed, 345 insertions, 0 deletions
diff --git a/cppe/config/TestUtil.py b/cppe/config/TestUtil.py
new file mode 100644
index 00000000000..e310ec1c21b
--- /dev/null
+++ b/cppe/config/TestUtil.py
@@ -0,0 +1,345 @@
+#!/usr/bin/env python
+# **********************************************************************
+#
+# Copyright (c) 2003-2005 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"
+
+#
+# Don't change anything below this line!
+#
+
+import sys, os, re
+
+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
+ 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".
+ if sys.platform[:6] == "cygwin":
+ return 1
+ else:
+ return 0
+
+def isWin32():
+
+ if sys.platform == "win32" or isCygwin():
+ return 1
+ else:
+ return 0
+
+def isWin9x():
+
+ if isWin32():
+ if os.environ.has_key("OS") and os.environ["OS"] == "Windows_NT":
+ return 0
+ return 1
+ else:
+ return 0
+
+def isSolaris():
+
+ if sys.platform == "sunos5":
+ return 1
+ else:
+ return 0
+
+def isHpUx():
+
+ if sys.platform == "hp-ux11":
+ return 1
+ else:
+ return 0
+
+def isAIX():
+ if sys.platform in ['aix4', 'aix5']:
+ return 1
+ else:
+ return 0
+
+def isDarwin():
+
+ if sys.platform == "darwin":
+ return 1
+ else:
+ return 0
+
+serverPids = []
+def killServers():
+
+ global serverPids
+
+ if isCygwin():
+ print "killServers(): not implemented for cygwin python."
+ return
+
+ for pid in serverPids:
+
+ if isWin32():
+ try:
+ import win32api
+ handle = win32api.OpenProcess(1, 0, pid)
+ win32api.TerminateProcess(handle, 0)
+ 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 = []
+
+def getServerPid(serverPipe):
+
+ output = serverPipe.readline().strip()
+
+ if not output:
+ print "failed!"
+ killServers()
+ sys.exit(1)
+
+ serverPids.append(int(output))
+
+def getAdapterReady(serverPipe):
+
+ output = serverPipe.readline().strip()
+
+ if not output:
+ print "failed!"
+ killServers()
+ sys.exit(1)
+
+def waitServiceReady(pipe, token):
+
+ while 1:
+
+ output = pipe.readline().strip()
+
+ if not output:
+ print "failed!"
+ sys.exit(1)
+
+ if output == token + " ready":
+ break
+
+def printOutputFromPipe(pipe):
+
+ while 1:
+
+ c = pipe.read(1)
+
+ if c == "":
+ break
+
+ os.write(1, c)
+
+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_LIBRRARY_PATH", "")
+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:create"
+ clientProtocol = plugin + " --Ice.Default.Protocol=ssl" + \
+ " --IceSSL.Client.CertPath=" + os.path.join(toplevel, "certs") + \
+ " --IceSSL.Client.Config=client_sslconfig.xml"
+ serverProtocol = plugin + " --Ice.Default.Protocol=ssl" + \
+ " --IceSSL.Server.CertPath=" + os.path.join(toplevel, "certs") + \
+ " --IceSSL.Server.Config=server_sslconfig.xml"
+ clientServerProtocol = plugin + " --Ice.Default.Protocol=ssl" + \
+ " --IceSSL.Client.CertPath=" + os.path.join(toplevel, "certs") + \
+ " --IceSSL.Client.Config=sslconfig.xml" + \
+ " --IceSSL.Server.CertPath=" + os.path.join(toplevel, "certs") + \
+ " --IceSSL.Server.Config=sslconfig.xml"
+else:
+ clientProtocol = ""
+ serverProtocol = ""
+ clientServerProtocol = ""
+
+if compress:
+ clientProtocol += " --Ice.Override.Compress"
+ serverProtocol += " --Ice.Override.Compress"
+ clientServerProtocol += " --Ice.Override.Compress"
+
+if threadPerConnection:
+ clientProtocol += " --Ice.ThreadPerConnection"
+ serverProtocol += " --Ice.ThreadPerConnection"
+ clientServerProtocol += " --Ice.ThreadPerConnection"
+
+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" + \
+ " --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 + "...",
+ serverPipe = os.popen(server + serverOptions + additionalServerOptions + " 2>&1")
+ getServerPid(serverPipe)
+ getAdapterReady(serverPipe)
+ print "ok"
+
+ print "starting " + clientName + "...",
+ clientPipe = os.popen(client + clientOptions + additionalClientOptions + " 2>&1")
+ print "ok"
+
+ printOutputFromPipe(clientPipe)
+
+ clientStatus = clientPipe.close()
+ serverStatus = serverPipe.close()
+
+ if clientStatus or serverStatus:
+ killServers()
+ 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...",
+ serverPipe = os.popen(server + clientServerOptions + additionalServerOptions + " 2>&1")
+ getServerPid(serverPipe)
+ getAdapterReady(serverPipe)
+ print "ok"
+
+ print "starting client...",
+ clientPipe = os.popen(client + clientServerOptions + additionalClientOptions + " 2>&1")
+ getServerPid(clientPipe)
+ getAdapterReady(clientPipe)
+ print "ok"
+
+ printOutputFromPipe(clientPipe)
+
+ clientStatus = clientPipe.close()
+ serverStatus = serverPipe.close()
+
+ if clientStatus or serverStatus:
+ killServers()
+ 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...",
+ collocatedPipe = os.popen(collocated + collocatedOptions + additionalOptions + " 2>&1")
+ print "ok"
+
+ printOutputFromPipe(collocatedPipe)
+
+ collocatedStatus = collocatedPipe.close()
+
+ if collocatedStatus:
+ killServers()
+ sys.exit(1)
+
+def collocatedTest(name):
+
+ collocatedTestWithOptions(name, "")
+
+def cleanDbDir(path):
+
+ files = os.listdir(path)
+
+ for filename in files:
+ if filename != "CVS" and filename != ".dummy":
+ fullpath = os.path.join(path, filename);
+ os.remove(fullpath)