From e54ded494a8fb2aac74f7afd40a153d6c59f0c4a Mon Sep 17 00:00:00 2001
From: al_xipe <al_xipe@localhost>
Date: Tue, 17 Jul 2007 21:12:54 +0000
Subject: [PATCH] Added STAX functional test sample/tutorial test suite

---
 opendj-sdk/opends/tests/functional-tests/staf-installer/staf-installer.properties |    2 
 opendj-sdk/opends/tests/functional-tests/testcases/sample/sample.xml              |  274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 275 insertions(+), 1 deletions(-)

diff --git a/opendj-sdk/opends/tests/functional-tests/staf-installer/staf-installer.properties b/opendj-sdk/opends/tests/functional-tests/staf-installer/staf-installer.properties
index 740eb18..07d8bb9 100644
--- a/opendj-sdk/opends/tests/functional-tests/staf-installer/staf-installer.properties
+++ b/opendj-sdk/opends/tests/functional-tests/staf-installer/staf-installer.properties
@@ -76,7 +76,7 @@
 # Tests section - bottom
 
 # test plan customization - top  <property name="test.plan.file" value="${basedir}/testcases/run-custom-suites.dat" />
-test.plan.list=main_security,main_aci,main_privileges,main_backends,main_core,main_schema,main_replication,indexes,main_groups
+test.plan.list=sample,main_security,main_aci,main_privileges,main_backends,main_core,main_schema,main_replication,indexes,main_groups
 test.plan.dir=testcases
 test.plan.custom=${test.plan.dir}/run-custom-suites.dat
 test.plan.default=${test.plan.dir}/run-default-suites.dat
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/sample/sample.xml b/opendj-sdk/opends/tests/functional-tests/testcases/sample/sample.xml
new file mode 100644
index 0000000..073fba4
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/sample/sample.xml
@@ -0,0 +1,274 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../shared/stax.dtd">
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! Common Development and Distribution License, Version 1.0 only
+ ! (the "License").  You may not use this file except in compliance
+ ! with the License.
+ !
+ ! You can obtain a copy of the license at
+ ! trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ ! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ ! See the License for the specific language governing permissions
+ ! and limitations under the License.
+ !
+ ! When distributing Covered Code, include this CDDL HEADER in each
+ ! file and include the License file at
+ ! trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
+ ! add the following below this CDDL HEADER, with the fields enclosed
+ ! by brackets "[]" replaced with your own identifying information:
+ !      Portions Copyright [yyyy] [name of copyright owner]
+ !
+ ! CDDL HEADER END
+ !
+ !      Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ ! -->
+<stax>
+  <defaultcall function="sample" />
+  <function name="sample">
+    <sequence>
+      <script>
+        CurrentTestPath={ 'group' : 'sample', 'suite' : 'sample' }
+        envAlreadyLoaded='true'
+      </script>
+      
+      <!---
+        #@TestSuiteName             Sample
+        #@TestSuitePurpose          Illustrate how to easily contribute functional tests
+        #@TestSuiteGroup            Sample
+        #@TestScript                aci_add_entry.xml
+      -->
+      
+      <!-- Try/catch/finally structure are a handy way to alter the execution
+           flow of a suite in front of unexpected conditions
+       -->
+      <try>
+        <!-- this is an example of how to loop through a list of functions to 
+             run instead of duplicating calls 
+         -->
+        <iterate in="['testGroup_Preamble','testSuite_Preamble','sample_setup','sample_test']" var="testStep">
+          <!-- the sequence tag is superfluous here since there is only a 
+               single instruction to execute within the iterate block 
+           -->
+          <call function="'%s' % testStep" />
+        </iterate>
+        <catch exception="'STAFException.Topology.CreationException'">
+          <!-- it is a good idea to make sure that the messages getting
+               sent to the gui also make their way in the logs for easier 
+               after-the-fact log mining. Use log="1" wherever it makes sense
+               Setting the log level to an appropriate value will also make 
+               troubleshooting and debugging easier.
+               Level values can be (among others):
+                . fatal
+                . error
+                . warning
+                . info
+                . trace
+                . debug
+           -->
+          <message log="1" level="'fatal'">'Could not create the topology. Bailing out.'</message>
+        </catch>
+        <catch exception="'STAXException.Topology.StartException'">
+          <message log="1" level="'fatal'">'Could not start at least one server in the topology. Bailing out.'</message>
+        </catch>
+        <finally>
+          <iterate in="['sample_cleanup','testSuite_Postamble','testGroup_Postamble']" var="testStep">
+            <call function="'%s' % testStep" />
+          </iterate>
+        </finally>
+      </try>
+    </sequence>
+  </function>
+  
+  <!-- the test -->
+  <function name="sample_test">
+    <!---
+      Place test-specific test information here.
+      The tag, TestMarker, must be the same as the tag, TestSuiteName.
+      #@TestMarker                Sample
+      #@TestName                  sample_test
+      #@TestIssue                 xyz
+      #@TestPurpose               Illustrate how to issue a query on OpenDS
+      #@TestPreamble              none
+      #@TestStep                  Fetch all the entries in the server
+      #@TestPostamble             none
+      #@TestResult                Success if OpenDS returns 0
+    -->
+    <testcase name="'%s' % STAXCurrentFunction">
+      <sequence>
+        <call function="'testCase_Preamble'" />
+        <call function="'SearchObject'">
+        { 'dsInstanceHost'   : DIRECTORY_INSTANCE_HOST ,
+          'dsInstancePort'   : DIRECTORY_INSTANCE_PORT ,
+          'dsInstanceDn'     : DIRECTORY_INSTANCE_DN   ,
+          'dsInstancePswd'   : DIRECTORY_INSTANCE_PSWD ,
+          'dsBaseDN'         : DIRECTORY_INSTANCE_SFX  ,
+          'dsFilter'         : 'objectclass=*'         }
+        </call>
+        <call function="'testCase_Postamble'" />
+      </sequence>
+    </testcase>
+  </function>
+  
+  <!-- Setup the instance for sample test -->
+  <function name="sample_setup">
+    <sequence>
+      <message>'That is the right setup being called here'</message>
+      <call function="'runFunction'">
+        { 'functionName'      : 'createTopology'                              ,
+          'functionMessage'   : 'Create DS topology as described in config.py',
+          'functionException' : 'Topology.CreationException'                  ,
+          'functionArguments' : { 'initialiseInstance' : True }
+        }
+      </call>
+      <call function="'runFunction'">
+        { 'functionName'      : 'StartDSWithScript'                                      ,
+          'functionMessage'   : 'Start DS to run on port %s' % (DIRECTORY_INSTANCE_PORT) ,
+          'functionArguments' : { 'location' : STAF_REMOTE_HOSTNAME }
+        }
+      </call>
+      <call function="'runFunction'">
+        { 'functionName'      : 'isAlive'                             ,
+          'functionMessage'   : 'Checking if the server is available' ,
+          'functionException' : 'Topology.StartException'             ,
+          'functionArguments' : { 'noOfLoops'        : 5    ,
+                                  'noOfMilliSeconds' : 2000 }
+        }
+      </call>
+    </sequence>
+  </function>
+  
+  <!-- cleanup after the test -->
+  <function name="sample_cleanup">
+    <sequence>
+      <call function="'runFunction'">
+        { 'functionName'      : 'StopDsWithScript' ,
+          'functionMessage'   : 'Stop DS running on port %s' % (DIRECTORY_INSTANCE_PORT),
+          'functionArguments' : { 'location'  : STAF_REMOTE_HOSTNAME    ,
+                                  'dsHost'    : DIRECTORY_INSTANCE_HOST ,
+                                  'dsPort'    : DIRECTORY_INSTANCE_PORT ,
+                                  'dsBindDN'  : DIRECTORY_INSTANCE_DN   ,
+                                  'dsBindPwd' : DIRECTORY_INSTANCE_PSWD }
+        }
+      </call>
+      <call function="'runFunction'">
+        { 'functionName'    : 'removeTopology',
+          'functionMessage' : 'Remove DS topology created for the Test Suite'
+        }
+      </call>
+    </sequence>
+  </function>
+  
+  <function name="runFunction" scope="local">
+    <function-map-args>
+      <function-arg-def name="functionName" type="required">
+        <function-arg-description>
+          Name of the function to run
+        </function-arg-description>
+      </function-arg-def>
+
+      <function-arg-def name="functionArguments" type="optional">
+        <function-arg-description>
+          Arguments to be passed on to the called function.
+          This can be a map or a list of arguments, whatever the called function
+          expects will be carried on here.
+          . for a map, pass the arguments like this:
+            { 'argumentA' : 'argumentAvalue' ,
+              'argumentB' : 1 ,
+              ...
+            }
+          . for a list, pass the arguments like this:
+            [ 'argumentAvalue, 1, ... ]
+        </function-arg-description>
+      </function-arg-def>
+
+      <function-arg-def name="expectedRC" type="optional" default="0">
+        <function-arg-description>
+          The expected return code of the function to run.
+          This is then passed onto the checkRC function.
+          It is also used to throw an exception if the argument 
+          functionException is provided and set the test case status if the
+          argument functionSetsTCStatus is provided
+        </function-arg-description>
+        <function-arg-property name="type" value="integer"/>
+      </function-arg-def>
+
+      <function-arg-def name="functionException" type="optional">
+        <function-arg-description>
+          The exception to throw if the return code differs from the expected 
+          RC. The exception is appended to STAXException.
+        </function-arg-description>
+      </function-arg-def>
+      
+      <function-arg-def name="functionMessage" type="optional">
+        <function-arg-description>
+          An optional message to display before running the function
+        </function-arg-description>
+      </function-arg-def>
+      
+      <function-arg-def name="functionSetsTCStatus" type="optional">
+        <function-arg-description>
+          Whether the function to run sets the testcase status or not.
+          If this is set, the test case status is set according to whether
+          or not the function meets the expected return code.
+          True or False should be used for this argument.
+        </function-arg-description>
+      </function-arg-def>
+    </function-map-args>
+    <sequence>
+      <script>
+        throwException=False
+        if functionException:
+          throwException=True
+
+        displayMessage=False
+        if functionMessage:
+          displayMessage=True
+
+        tcStatus='fail'
+        doSetTCStatus=False
+        if functionSetsTCStatus:
+          doSetTCStatus=True
+      </script>
+      <message log="1" level="'info'" if="displayMessage == True">'%s' % functionMessage</message>
+      <message log="1" level="'debug'">'runFunction: %s: called with parameters [%s]' % (functionName,functionArguments)</message>
+      <call function="'%s' % functionName">functionArguments</call>
+      <message log="1" level="'debug'">'runFunction: %s: returned [%s]' % (functionName,RC)</message>
+      <script>
+        functionRC = RC
+      </script>
+      <call function="'checkRC'" >
+        { 'returncode' : RC ,
+          'result'     : STAXResult,
+          'expected'   : expectedRC
+        }
+      </call>
+
+      <!-- this section handles the optional case when we need to set the 
+           test case status
+       -->
+      <if expr="doSetTCStatus == True">
+        <sequence>
+          <if expr="functionRC == expectedRC">
+            <script>tcStatus='pass'</script>
+          </if>
+          <tcstatus result="tcStatus" />
+        </sequence>
+      </if>
+
+      <!-- this section handles the optional case when we need to throw an
+           exception upon unexpected function return code
+       -->
+      <if expr="throwException == True" >
+        <if expr="functionRC != expectedRC" >
+          <throw exception="'STAXException.%s' % functionException" />
+        </if>
+      </if>
+      
+      <!-- bubble the function return code up one level -->
+      <return>functionRC</return>
+    </sequence>
+  </function>
+</stax>

--
Gitblit v1.10.0