From 91078f991818e505b3396b38e79d12acb3d4ba1c Mon Sep 17 00:00:00 2001
From: andrug <andrug@localhost>
Date: Mon, 31 Mar 2008 13:49:09 +0000
Subject: [PATCH] add runCmd function
---
opends/tests/system-tests/phases/shared/functions/utils.xml | 241 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 240 insertions(+), 1 deletions(-)
diff --git a/opends/tests/system-tests/phases/shared/functions/utils.xml b/opends/tests/system-tests/phases/shared/functions/utils.xml
index 2282ad2..eca823d 100755
--- a/opends/tests/system-tests/phases/shared/functions/utils.xml
+++ b/opends/tests/system-tests/phases/shared/functions/utils.xml
@@ -654,5 +654,244 @@
<return>date</return>
</sequence>
</function>
-
+
+
+ <function name="runCommand" scope="local">
+ <function-description>
+ A general wrapper to run a command without having to write a dedicated
+ function for it
+ </function-description>
+ <function-map-args>
+ <function-arg-def name="command" type="required">
+ <function-arg-description>
+ the command to run
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="path" type="required">
+ <function-arg-description>
+ the path where the command is to be run from
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="arguments" type="optional" default="''">
+ <function-arg-description>
+ the path where the command is to be found
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="env"
+ type="optional">
+ <function-arg-description>
+ the environment variables to set. The default set here should just
+ work for OpenDS commands
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="location"
+ type="optional"
+ default="STAXServiceMachine">
+ <function-arg-description>
+ Which machine should the command be executed on
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="name"
+ default="'Running %s' % command"
+ type="optional">
+ <function-arg-description>
+ The name to give the process (only matters in the STAX Monitor really)
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="stripOutput" default="'true'" type="optional">
+ <function-arg-description>
+ A boolean (use True or False here, case matters) to enable disable
+ stripping the output of a command
+ TODO: consider allowing passing a function name to enable custom
+ output manipulation (overkill?)
+ </function-arg-description>
+ <function-arg-property name="type" value="enum">
+ <function-arg-property-description>
+ This argument can only have boolean values
+ </function-arg-property-description>
+ <function-arg-property-data type="choice" value="'true'"/>
+ <function-arg-property-data type="choice" value="'false'"/>
+ </function-arg-property>
+ </function-arg-def>
+ <function-arg-def name="timerDuration"
+ type="optional"
+ default="'5m'">
+ <function-arg-description>
+ The duration that the process is allowed to run
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="outputFile" type="optional" default="'None'">
+ <function-arg-description>
+ Output file containing the command output
+ </function-arg-description>
+ <function-arg-property name="type" value="file"/>
+ </function-arg-def>
+ <function-arg-def name="outputPath"
+ type="optional"
+ default="LOG_TMP_DIR">
+ <function-arg-description>
+ Path containing the outputFile
+ </function-arg-description>
+ <function-arg-property name="type" value="filepath"/>
+ </function-arg-def>
+ <function-arg-def name="expectedRC" type="optional" default="0">
+ <function-arg-description>
+ Expected return code value. Default value is 0.
+ Wildcard 'noCheck' to not check the RC
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="logStderr" type="optional" default="'true'">
+ <function-arg-description>
+ If true, stderr for the command is redirect to stdout.
+ </function-arg-description>
+ <function-arg-property name="type" value="enum">
+ <function-arg-property-description>
+ This argument can only have boolean values
+ </function-arg-property-description>
+ <function-arg-property-data type="choice" value="'true'"/>
+ <function-arg-property-data type="choice" value="'false'"/>
+ </function-arg-property>
+ </function-arg-def>
+ <function-arg-def name="fileFd" type="required">
+ <function-arg-description>
+ output file descriptor
+ </function-arg-description>
+ </function-arg-def>
+ </function-map-args>
+ <sequence>
+ <script>
+ import random
+ import java.util.Date
+ random.seed(java.util.Date().getTime())
+ _id = '%s#%d' % (strftime('%Y-%m-%d %H:%M:%S',localtime()),random.randint(0,999))
+
+ if not env:
+ #if isWindows:
+ # env=['PATH=C:\Windows;C:\Windows\system32;%s' % path, 'JAVA_HOME=%s' % JAVA_HOME]
+ #else:
+ env=['PATH=/bin:/usr/bin:%s' % path, 'JAVA_HOME=%s' % JAVA_HOME]
+ </script>
+ <call function="'writeStartTagOperation'">
+ { 'tagName' : name,
+ 'fileFd' : fileFd }
+ </call>
+
+ <!-- check if command exists -->
+ <call function="'isFile'">
+ {
+ 'location' : location,
+ 'fileName' : command
+ }
+ </call>
+ <script>
+ STAFCmdExist = STAXResult
+ </script>
+ <if expr="STAFCmdExist == TRUE">
+ <sequence>
+ <call function="'writeMessage'">
+ { 'content' : 'Running cmd: %s' % command,
+ 'fileFd' : fileFd }
+ </call>
+
+ <!-- If 'logStderr' is True then redirect sdterr to sdtout -->
+ <if expr="logStderr == 'true'">
+ <process name="name">
+ <location>location</location>
+ <command>command</command>
+ <parms>arguments</parms>
+ <workdir>path</workdir>
+ <envs>env</envs>
+ <console use="'same'"/>
+ <stdout if="outputFile != 'None'" mode="'replace'">
+ '%s/%s' % (outputPath, outputFile)
+ </stdout>
+ <stderr mode="'stdout'"/>
+ <returnstdout/>
+ </process>
+ <else>
+ <process name="name">
+ <location>location</location>
+ <command>command</command>
+ <parms>arguments</parms>
+ <workdir>path</workdir>
+ <envs>env</envs>
+ <console use="'same'"/>
+ <stdout if="outputFile != 'None'" mode="'replace'">
+ '%s/%s' % (outputPath, outputFile)
+ </stdout>
+ <returnstdout/>
+ </process>
+ </else>
+ </if>
+
+ <!-- The problem here is that STAXResult can either be a
+ string, list or a map object -->
+ <script>
+ try:
+ cmdOutput=STAXResult[0][1]
+ cmdRC = RC
+ except:
+ cmdOutput=STAXResult
+ cmdRC = RC
+
+ cmdResult=STAXResult
+ </script>
+
+ <if expr="expectedRC != 'noCheck'">
+ <call function="'checkRC'">
+ { 'returncode' : cmdRC,
+ 'result' : cmdOutput,
+ 'expected' : [expectedRC],
+ 'fileFd' : fileFd
+ }
+ </call>
+ </if>
+ <!--
+ <script>
+ def dig(var):
+ try:
+ if var.__class__==[].__class__:
+ for i in range(len(var)):
+ var[i]=dig(var[i])
+ return var
+ else:
+ if var.__class__==''.__class__:
+ return re.compile(r'EMMA:.*\n').sub('',var)
+ else:
+ return var
+ except TypeError:
+ return 'could not evaluate the following component: %s' % var
+
+ if stripOutput == 'true':
+ cmdResult=dig(cmdResult)
+ </script>
+ -->
+ </sequence>
+ <else>
+ <sequence>
+ <call function="'writeMessage'">
+ {
+ 'content' : 'ERROR : file does not exist on %s : %s'\
+ % (location,command),
+ 'fileFd' : fileFd
+ }
+ </call>
+ <script>
+ ERR_NUM[0] += 1
+ </script>
+ </sequence>
+ </else>
+ </if>
+ <call function="'writeEndTagOperation'">{'fileFd' : fileFd}</call>
+ <return>
+ cmdResult
+ </return>
+ </sequence>
+ </function>
+
+
+
+
+
+
</stax>
--
Gitblit v1.10.0