summaryrefslogtreecommitdiff
path: root/cs/config/TestUtil.py
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2004-04-08 00:56:34 +0000
committerMichi Henning <michi@zeroc.com>2004-04-08 00:56:34 +0000
commit174b86bff0dccadb83a890b47f51e0316ffcdd1d (patch)
treecca0c832955eed053dd0d502be1b4632c0bb6a4a /cs/config/TestUtil.py
parentfacet changes (diff)
downloadice-174b86bff0dccadb83a890b47f51e0316ffcdd1d.tar.bz2
ice-174b86bff0dccadb83a890b47f51e0316ffcdd1d.tar.xz
ice-174b86bff0dccadb83a890b47f51e0316ffcdd1d.zip
*** empty log message ***
Diffstat (limited to 'cs/config/TestUtil.py')
-rw-r--r--cs/config/TestUtil.py278
1 files changed, 278 insertions, 0 deletions
diff --git a/cs/config/TestUtil.py b/cs/config/TestUtil.py
new file mode 100644
index 00000000000..911034b6f12
--- /dev/null
+++ b/cs/config/TestUtil.py
@@ -0,0 +1,278 @@
+#!/usr/bin/env python
+# **********************************************************************
+#
+# Copyright (c) 2003
+# ZeroC, Inc.
+# Billerica, MA, USA
+#
+# All Rights Reserved.
+#
+# Ice is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License version 2 as published by
+# the Free Software Foundation.
+#
+# **********************************************************************
+
+#
+# Set protocol to "ssl" in case you want to run the tests with the SSL
+# protocol. Otherwise TCP is used.
+#
+
+protocol = ""
+#protocol = "ssl" // TODO: Not implemented yet
+
+#
+# Set compressed to 1 in case you want to run the tests with
+# protocol compression.
+#
+
+compress = 0
+#compress = 1 // TODO: Not implemented yet
+
+#
+# Set the host to the host name the test servers are running on. If
+# not set, Ice will try to find out the IP address for the
+# hostname. If you DNS isn't set up propertly, you should therefore
+# use "localhost".
+#
+
+#host = "someotherhost"
+host = "localhost"
+
+#
+# Don't change anything below this line!
+#
+
+import sys, os, re
+
+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
+
+serverPids = []
+def killServers():
+
+ global serverPids
+
+ for pid in serverPids:
+ if isCygwin():
+ print "killServers(): not implemented for cygwin python."
+ sys.exit(1)
+ elif 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 True:
+
+ output = pipe.readline().strip()
+
+ if not output:
+ print "failed!"
+ sys.exit(1)
+
+ if output == token + " ready":
+ break
+
+def printOutputFromPipe(pipe):
+
+ while True:
+
+ line = pipe.readline()
+
+ if not line:
+ break
+
+ os.write(1, line)
+
+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", "")
+
+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 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)
+ getServerPid(serverPipe)
+ getAdapterReady(serverPipe)
+ print "ok"
+
+ print "starting " + clientName + "...",
+ clientPipe = os.popen(client + clientOptions + " " + additionalClientOptions)
+ 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)
+ getServerPid(serverPipe)
+ getAdapterReady(serverPipe)
+ print "ok"
+
+ print "starting client...",
+ clientPipe = os.popen(client + clientServerOptions + " " + additionalClientOptions)
+ 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)
+ 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)