From 09336a459e6a014540e977029d94a3627caae6fb 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
---
opendj-sdk/opends/tests/system-tests/phases/shared/functions/opendsadm.xml | 206 ++++--------------------
opendj-sdk/opends/tests/system-tests/phases/shared/functions/utils.xml | 241 ++++++++++++++++++++++++++++++
opendj-sdk/opends/tests/system-tests/clients/restartDs/restartDs.xml | 4
3 files changed, 281 insertions(+), 170 deletions(-)
diff --git a/opendj-sdk/opends/tests/system-tests/clients/restartDs/restartDs.xml b/opendj-sdk/opends/tests/system-tests/clients/restartDs/restartDs.xml
index f387064..82629f1 100755
--- a/opendj-sdk/opends/tests/system-tests/clients/restartDs/restartDs.xml
+++ b/opendj-sdk/opends/tests/system-tests/clients/restartDs/restartDs.xml
@@ -97,7 +97,7 @@
}
</call>
<script>
- errNum += STAXResult[0]
+ errNum += STAXResult[0][0]
</script>
<!-- ==== Start DS ==== -->
@@ -108,7 +108,7 @@
}
</call>
<script>
- errNum += STAXResult[0]
+ errNum += STAXResult[0][0]
</script>
</sequence>
diff --git a/opendj-sdk/opends/tests/system-tests/phases/shared/functions/opendsadm.xml b/opendj-sdk/opends/tests/system-tests/phases/shared/functions/opendsadm.xml
index 2432bcd..cb3366c 100755
--- a/opendj-sdk/opends/tests/system-tests/phases/shared/functions/opendsadm.xml
+++ b/opendj-sdk/opends/tests/system-tests/phases/shared/functions/opendsadm.xml
@@ -147,33 +147,17 @@
STAFCmdParams=' '.join(STAFCmdParamsList)
</script>
- <call function="'writeStartTagOperation'">
- { 'tagName' : 'SetUpDsWithScript',
- 'fileFd' : fileFd }
+ <call function="'runCommand'">
+ { 'name' : 'SetUpOpenDSWithScript',
+ 'location' : location,
+ 'command' : STAFCmd,
+ 'arguments' : STAFCmdParams,
+ 'path' : dsPath,
+ 'fileFd' : fileFd
+ }
</call>
- <call function="'writeMessage'">
- { 'content' : 'Setup product : %s %s' % (STAFCmd, STAFCmdParams) ,
- 'fileFd' : fileFd }
- </call>
-
- <process name="'%s : Setup DS' % location">
- <location>'%s' % location</location>
- <command>'%s' % STAFCmd</command>
- <parms>'%s' % STAFCmdParams</parms>
- <workdir>'%s' % dsPath</workdir>
- <envs>
- ['PATH=/bin:/usr/bin:%s' % dsPath]
- </envs>
- <console use="'same'"/>
- <stderr mode="'stdout'"/>
- <returnstdout/>
- </process>
- <call function="'checkRC'">
- { 'returncode' : RC ,
- 'result' : STAXResult,
- 'fileFd' : fileFd }
- </call>
- <call function="'writeEndTagOperation'">{'fileFd' : fileFd}</call>
+
+ <return>STAXResult</return>
</sequence>
</function>
@@ -258,51 +242,22 @@
if dsBuildInfo:
STAFCmdParamsList.append('-F')
-
+
STAFCmdParams=' '.join(STAFCmdParamsList)
</script>
-
- <call function="'writeStartTagOperation'">
- { 'tagName' : 'StartDsWithScript',
- 'fileFd' : fileFd }
- </call>
-
- <call function="'writeMessage'">
- { 'fileFd' : fileFd,
- 'content' : '%s %s' % (STAFCmd, STAFCmdParams)
- }
- </call>
-
- <process name="'%s: Start DS' % location">
- <location>'%s' % location</location>
- <command>'%s' % STAFCmd</command>
- <parms>'%s' % STAFCmdParams</parms>
- <workdir>'%s' % dsBinPath</workdir>
- <envs>
- ['PATH=/bin:/usr/bin:%s' % dsBinPath]
- </envs>
- <console use="'same'"/>
- <stderr mode="'stdout'"/>
- <returnstdout/>
- </process>
-
- <script>
- startRC=RC
- startResult=STAXResult
- </script>
-
- <call function="'checkRC'">
- { 'returncode' : startRC ,
- 'result' : startResult,
- 'fileFd' : fileFd
+ <call function="'runCommand'">
+ { 'name' : 'StartDsWithScript',
+ 'location' : location,
+ 'command' : STAFCmd,
+ 'arguments' : STAFCmdParams,
+ 'path' : dsBinPath,
+ 'fileFd' : fileFd
}
</call>
-
- <call function="'writeEndTagOperation'">{'fileFd' : fileFd }</call>
-
- <return>[startRC,startResult]</return>
-
+
+ <return>STAXResult</return>
+
</sequence>
</function>
@@ -527,81 +482,17 @@
STAFCmdParams=' '.join(STAFCmdParamsList)
</script>
-
- <!-- check if bin file exists -->
- <call function="'isFile'">
- {
- 'location' : location,
- 'fileName' : '%s' % STAFCmd
- }
- </call>
- <script>
- STAFCmdExist = STAXResult
- </script>
-
- <call function="'writeStartTagOperation'">
- { 'tagName' : 'StopDsWithScript',
- 'fileFd' : fileFd }
+ <call function="'runCommand'">
+ { 'name' : 'StopDsWithScript',
+ 'location' : location,
+ 'command' : STAFCmd,
+ 'arguments' : STAFCmdParams,
+ 'path' : dsBinPath,
+ 'fileFd' : fileFd
+ }
</call>
- <!-- if jarfile does not exist, build it, may have problem if several builds are run at the same time... -->
- <if expr="STAFCmdExist == TRUE">
- <sequence>
- <if expr="fileFd == ''">
- <sequence>
- <message>'%s : Stop instance if started' % dsHost</message>
- <message>'%s %s' % (STAFCmd, STAFCmdParams)</message>
- </sequence>
- <else>
- <sequence>
- <call function="'writeMessage'">
- { 'content' : 'Stop instance on %s' % dsHost,
- 'fileFd' : fileFd }
- </call>
- <call function="'writeMessage'">
- { 'content' : 'Run command : %s %s' % (STAFCmd,STAFCmdParams),
- 'fileFd' : fileFd }
- </call>
- </sequence>
- </else>
- </if>
- <process name="'%s: Stop DS' % location">
- <location>'%s' % (location)</location>
- <command>'%s' % (STAFCmd)</command>
- <parms>'%s' % (STAFCmdParams)</parms>
- <workdir>'%s' % dsBinPath</workdir>
- <envs>
- ['PATH=/bin:/usr/bin:%s' % dsBinPath]
- </envs>
- <stderr mode="'stdout'"/>
- <returnstdout/>
- </process>
- <script>
- stopRC=RC
- stopResult=STAXResult
- </script>
- <call function="'checkRC'">
- { 'returncode' : stopRC ,
- 'result' : stopResult,
- 'fileFd' : fileFd }
- </call>
- </sequence>
- <else>
- <if expr="fileFd == ''">
- <message>'WARNING : file does not exist on %s : %s/%s' % (location,dsBinPath,STAFCmd)</message>
- <else>
- <call function="'writeMessage'">
- { 'content' : 'WARNING : file does not exist on %s : %s/%s' % (location,dsBinPath,STAFCmd),
- 'fileFd' : fileFd }
- </call>
- </else>
- </if>
- </else>
- </if>
-
- <call function="'writeEndTagOperation'">{'fileFd' : fileFd }</call>
-
- <return> [stopRC,stopResult]</return>
+ <return>STAXResult</return>
</sequence>
</function>
@@ -656,36 +547,17 @@
STAFCmdParams=' '.join(STAFCmdParamsList)
</script>
- <call function="'writeStartTagOperation'">
- { 'tagName' : 'makeLdif',
- 'fileFd' : fileFd }
- </call>
- <call function="'writeMessage'">
- { 'fileFd' : fileFd,
- 'content' : '%s %s' % (STAFCmd, STAFCmdParams)
- }
- </call>
-
- <process name="'Generate ldif'">
- <location>'%s' % location</location>
- <command>'%s' % STAFCmd</command>
- <parms>'%s' % STAFCmdParams</parms>
- <workdir>'%s' % dsBinPath</workdir>
- <envs>
- ['PATH=/bin:/usr/bin:%s' % dsBinPath]
- </envs>
- <stderr mode="'stdout'"/>
- <returnstdout/>
- </process>
-
- <call function="'checkRC'">
- { 'returncode' : RC ,
- 'result' : STAXResult,
- 'fileFd' : fileFd }
+ <call function="'runCommand'">
+ { 'name' : 'MakeLdif',
+ 'location' : location,
+ 'command' : STAFCmd,
+ 'arguments' : STAFCmdParams,
+ 'path' : dsBinPath,
+ 'fileFd' : fileFd
+ }
</call>
- <call function="'writeEndTagOperation'">{'fileFd' : fileFd}</call>
-
+ <return>STAXResult</return>
</sequence>
</function>
diff --git a/opendj-sdk/opends/tests/system-tests/phases/shared/functions/utils.xml b/opendj-sdk/opends/tests/system-tests/phases/shared/functions/utils.xml
index 2282ad2..eca823d 100755
--- a/opendj-sdk/opends/tests/system-tests/phases/shared/functions/utils.xml
+++ b/opendj-sdk/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