summaryrefslogtreecommitdiff
path: root/scripts/IceGridAdmin.py
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2008-08-04 19:18:45 -0230
committerMatthew Newhook <matthew@zeroc.com>2008-08-04 19:18:45 -0230
commitd9c568300c2aed6ab736026ea116b3f1a72fbe43 (patch)
tree27191ba2b0d1ef43256561da01462b98c7bd696d /scripts/IceGridAdmin.py
parentMerge branch 'R3_3_branch' of ssh://cvs.zeroc.com/home/git/ice into R3_3_branch (diff)
downloadice-d9c568300c2aed6ab736026ea116b3f1a72fbe43.tar.bz2
ice-d9c568300c2aed6ab736026ea116b3f1a72fbe43.tar.xz
ice-d9c568300c2aed6ab736026ea116b3f1a72fbe43.zip
Numerous cleanups to the test suite and expect scripts.
Conflicts: cpp/test/Glacier2/staticFiltering/run.py
Diffstat (limited to 'scripts/IceGridAdmin.py')
-rw-r--r--scripts/IceGridAdmin.py274
1 files changed, 274 insertions, 0 deletions
diff --git a/scripts/IceGridAdmin.py b/scripts/IceGridAdmin.py
new file mode 100644
index 00000000000..f69f0b082e6
--- /dev/null
+++ b/scripts/IceGridAdmin.py
@@ -0,0 +1,274 @@
+#!/usr/bin/env python
+# **********************************************************************
+#
+# Copyright (c) 2003-2008 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.
+#
+# **********************************************************************
+
+import sys, os, TestUtil
+from threading import Thread
+
+#
+# Set nreplicas to a number N to test replication with N replicas.
+#
+#nreplicas=0
+nreplicas=1
+
+iceGridPort = 12010;
+
+nodeOptions = r' --Ice.Warn.Connections=0' + \
+ r' --IceGrid.Node.Endpoints=default' + \
+ r' --IceGrid.Node.WaitTime=30' + \
+ r' --Ice.ProgramName=icegridnode' + \
+ r' --IceGrid.Node.Trace.Replica=0' + \
+ r' --IceGrid.Node.Trace.Activator=0' + \
+ r' --IceGrid.Node.Trace.Adapter=0' + \
+ r' --IceGrid.Node.Trace.Server=0' + \
+ r' --IceGrid.Node.ThreadPool.SizeWarn=0' + \
+ r' --IceGrid.Node.PrintServersReady=node' + \
+ r' --Ice.NullHandleAbort' + \
+ r' --Ice.ThreadPool.Server.Size=0' + \
+ r' --Ice.ServerIdleTime=0'
+
+registryOptions = r' --Ice.Warn.Connections=0' + \
+ r' --IceGrid.Registry.PermissionsVerifier=IceGrid/NullPermissionsVerifier' + \
+ r' --IceGrid.Registry.AdminPermissionsVerifier=IceGrid/NullPermissionsVerifier' + \
+ r' --IceGrid.Registry.SSLPermissionsVerifier=IceGrid/NullSSLPermissionsVerifier' + \
+ r' --IceGrid.Registry.AdminSSLPermissionsVerifier=IceGrid/NullSSLPermissionsVerifier' + \
+ r' --IceGrid.Registry.Server.Endpoints=default' + \
+ r' --IceGrid.Registry.Internal.Endpoints=default' + \
+ r' --IceGrid.Registry.SessionManager.Endpoints=default' + \
+ r' --IceGrid.Registry.AdminSessionManager.Endpoints=default' + \
+ r' --IceGrid.Registry.Trace.Session=0' + \
+ r' --IceGrid.Registry.Trace.Application=0' + \
+ r' --IceGrid.Registry.Trace.Node=0' + \
+ r' --IceGrid.Registry.Trace.Replica=0' + \
+ r' --IceGrid.Registry.Trace.Adapter=0' + \
+ r' --IceGrid.Registry.Trace.Object=0' + \
+ r' --IceGrid.Registry.Trace.Server=0' + \
+ r' --IceGrid.Registry.Trace.Locator=0' + \
+ r' --Ice.ThreadPool.Server.Size=0 ' + \
+ r' --Ice.ThreadPool.Client.SizeWarn=0' + \
+ r' --IceGrid.Registry.Client.ThreadPool.SizeWarn=0' + \
+ r' --Ice.ServerIdleTime=0' + \
+ r' --IceGrid.Registry.DefaultTemplates=' + \
+ os.path.abspath(os.path.join(TestUtil.toplevel, "cpp", "config", "templates.xml"))
+
+def getDefaultLocatorProperty():
+
+ i = 0
+ property = '--Ice.Default.Locator="IceGrid/Locator';
+ objrefs = ""
+ while i < nreplicas + 1:
+ objrefs = objrefs + ':default -p ' + str(iceGridPort + i)
+ i = i + 1
+
+ return ' %s%s"' % (property, objrefs)
+
+def startIceGridRegistry(testdir, dynamicRegistration = False):
+
+ iceGrid = os.path.join(TestUtil.getCppBinDir(), "icegridregistry")
+
+ command = ' --nowarn ' + registryOptions
+ if dynamicRegistration:
+ command += r' --IceGrid.Registry.DynamicRegistration'
+
+ procs = []
+ i = 0
+ while i < (nreplicas + 1):
+
+ if i == 0:
+ name = "registry"
+ else:
+ name = "replica-" + str(i)
+
+ dataDir = os.path.join(testdir, "db", name)
+ if not os.path.exists(dataDir):
+ os.mkdir(dataDir)
+ else:
+ cleanDbDir(dataDir)
+
+ print "starting icegrid " + name + "...",
+ cmd = command + \
+ r' --Ice.ProgramName=' + name + \
+ r' --IceGrid.Registry.Client.Endpoints="default -p ' + str(iceGridPort + i) + ' -t 30000" ' + \
+ r' --IceGrid.Registry.Data=' + dataDir
+
+ if i > 0:
+ cmd += r' --IceGrid.Registry.ReplicaName=' + name + ' ' + getDefaultLocatorProperty()
+
+ driverConfig = TestUtil.DriverConfig("server")
+ driverConfig.lang = "cpp"
+ proc = TestUtil.startServer(iceGrid, cmd, driverConfig, count = 4)
+ procs.append(proc)
+ print "ok"
+
+ i = i + 1
+ return procs
+
+def shutdownIceGridRegistry(procs):
+
+ i = nreplicas
+ while i > 0:
+ print "shutting down icegrid replica-" + str(i) + "...",
+ iceGridAdmin("registry shutdown replica-" + str(i))
+ print "ok"
+ i = i - 1
+
+ print "shutting down icegrid registry...",
+ iceGridAdmin("registry shutdown")
+ print "ok"
+
+ for p in procs:
+ p.waitTestSuccess()
+
+def startIceGridNode(testdir):
+
+ iceGrid = os.path.join(TestUtil.getCppBinDir(), "icegridnode")
+
+ dataDir = os.path.join(testdir, "db", "node")
+ if not os.path.exists(dataDir):
+ os.mkdir(dataDir)
+ else:
+ cleanDbDir(dataDir)
+
+ #
+ # Create property overrides from command line options.
+ #
+ overrideOptions = '"'
+ for opt in TestUtil.getCommandLine("", TestUtil.DriverConfig("server")).split():
+ opt = opt.replace("--", "")
+ if opt.find("=") == -1:
+ opt += "=1"
+ overrideOptions += opt + " "
+ overrideOptions += ' Ice.ServerIdleTime=0 Ice.PrintProcessId=0 Ice.PrintAdapterReady=0"'
+
+ print "starting icegrid node...",
+ command = r' --nowarn ' + nodeOptions + getDefaultLocatorProperty() + \
+ r' --IceGrid.Node.Data=' + dataDir + \
+ r' --IceGrid.Node.Name=localnode' + \
+ r' --IceGrid.Node.PropertiesOverride=' + overrideOptions
+
+ driverConfig = TestUtil.DriverConfig("server")
+ driverConfig.lang = "cpp"
+ proc = TestUtil.startServer(iceGrid, command, driverConfig, adapter='node')
+
+ print "ok"
+
+ return proc
+
+def iceGridAdmin(cmd, ignoreFailure = False):
+
+ iceGridAdmin = os.path.join(TestUtil.getCppBinDir(), "icegridadmin")
+
+ user = r"admin1"
+ if cmd == "registry shutdown":
+ user = r"shutdown"
+ command = getDefaultLocatorProperty() + r" --IceGridAdmin.Username=" + user + " --IceGridAdmin.Password=test1 " + \
+ r' -e "' + cmd + '"'
+
+ driverConfig = TestUtil.DriverConfig("client")
+ driverConfig.lang = "cpp"
+ proc = TestUtil.startClient(iceGridAdmin, command, driverConfig)
+ status = proc.wait()
+ if not ignoreFailure and status:
+ print proc.buf
+ sys.exit(1)
+ return proc.buf
+
+def killNodeServers():
+
+ for server in iceGridAdmin("server list"):
+ server = server.strip()
+ iceGridAdmin("server disable " + server, True)
+ iceGridAdmin("server signal " + server + " SIGKILL", True)
+
+def iceGridTest(application, additionalOptions = "", applicationOptions = ""):
+
+ testdir = os.getcwd()
+ if not TestUtil.isWin32() and os.getuid() == 0:
+ print
+ print "*** can't run test as root ***"
+ print
+ return
+
+ if TestUtil.getDefaultMapping() == "java":
+ os.environ['CLASSPATH'] = os.path.join(os.getcwd(), "classes") + os.pathsep + os.environ.get("CLASSPATH", "")
+
+ client = TestUtil.getDefaultClientFile()
+ if TestUtil.getDefaultMapping() != "java":
+ client = os.path.join(testdir, client)
+
+ clientOptions = ' ' + getDefaultLocatorProperty() + ' ' + additionalOptions
+
+ registryProcs = startIceGridRegistry(testdir)
+ iceGridNodeProc = startIceGridNode(testdir)
+
+ if application != "":
+ print "adding application...",
+ iceGridAdmin('application add ' + os.path.join(testdir, application) + ' ' + \
+ '"test.dir=' + testdir + '" "ice.bindir=' + TestUtil.getCppBinDir() + '" ' + applicationOptions)
+ print "ok"
+
+ print "starting client...",
+ clientProc = TestUtil.startClient(client, clientOptions, TestUtil.DriverConfig("client"))
+ print "ok"
+
+ clientProc.waitTestSuccess()
+
+ if application != "":
+ print "remove application...",
+ iceGridAdmin("application remove Test")
+ print "ok"
+
+ print "shutting down icegrid node...",
+ iceGridAdmin("node shutdown localnode")
+ print "ok"
+ shutdownIceGridRegistry(registryProcs)
+ iceGridNodeProc.waitTestSuccess()
+
+def iceGridClientServerTest(additionalClientOptions, additionalServerOptions):
+
+ testdir = os.getcwd()
+ server = TestUtil.getDefaultServerFile()
+ client = TestUtil.getDefaultClientFile()
+ if TestUtil.getDefaultMapping() != "java":
+ server = os.path.join(testdir, server)
+ client = os.path.join(testdir, client)
+
+ if TestUtil.getDefaultMapping() == "java":
+ os.environ['CLASSPATH'] = os.path.join(os.getcwd(), "classes") + os.pathsep + os.environ.get("CLASSPATH", "")
+
+ clientOptions = getDefaultLocatorProperty() + ' ' + additionalClientOptions
+ serverOptions = getDefaultLocatorProperty() + ' ' + additionalServerOptions
+
+ registryProcs = startIceGridRegistry(testdir, True)
+
+ print "starting server...",
+ serverProc= TestUtil.startServer(server, serverOptions, TestUtil.DriverConfig("server"))
+ print "ok"
+
+ print "starting client...",
+ clientProc = TestUtil.startClient(client, clientOptions, TestUtil.DriverConfig("client"))
+ print "ok"
+
+ clientProc.waitTestSuccess()
+ serverProc.waitTestSuccess()
+
+ shutdownIceGridRegistry(registryProcs)
+
+def cleanDbDir(path):
+ for filename in [ os.path.join(path, f) for f in os.listdir(path) if f != ".gitignore"]:
+ if os.path.isdir(filename):
+ cleanDbDir(filename)
+ try:
+ os.rmdir(filename)
+ except OSError:
+ # This might fail if the directory is empty (because
+ # it itself contains a .gitignore file.
+ pass
+ else:
+ os.remove(filename)