From b7e6ddbc774e90cf71059050d8de7e652e6f0467 Mon Sep 17 00:00:00 2001
From: al_xipe <al_xipe@localhost>
Date: Tue, 24 Jul 2007 12:24:18 +0000
Subject: [PATCH] 1. allow to bypass proxy check in functional tests wrapper 2. add modify index test cases 3. add the rebuild-index CLI wrapper in utils.xml 4. add the ability in runFunction to set a test case status upon failure to reflect an exception being thrown or things like that
---
opendj-sdk/opends/tests/functional-tests/testcases/indexes/indexes.xml | 195 ++++++++++++++++++++++++++++++++------
opendj-sdk/opends/tests/functional-tests/shared/functions/utils.xml | 45 +++++++++
opendj-sdk/opends/tests/functional-tests/shared/functions/tools.xml | 49 ++++++++-
3 files changed, 253 insertions(+), 36 deletions(-)
diff --git a/opendj-sdk/opends/tests/functional-tests/shared/functions/tools.xml b/opendj-sdk/opends/tests/functional-tests/shared/functions/tools.xml
index 8064f71..1841505 100644
--- a/opendj-sdk/opends/tests/functional-tests/shared/functions/tools.xml
+++ b/opendj-sdk/opends/tests/functional-tests/shared/functions/tools.xml
@@ -423,9 +423,48 @@
-
-
-
-
-
+ <function name="CLI_rebuild-index">
+ <function-prolog>
+ This wraps the rebuild-index tool to make it easy to use from STAX
+ </function-prolog>
+ <function-map-args>
+ <function-arg-def name="baseDN" type="required">
+ <function-arg-description>
+ Specify a back-end supporting indexing and triggers a rebuild of all
+ indexes in the scope of the provided baseDN
+ </function-arg-description>
+ </function-arg-def>
+ <function-arg-def name="attributes" type="required">
+ <function-arg-description>
+ Specify a list of attributes to trigger index rebuild on
+ </function-arg-description>
+ </function-arg-def>
+ </function-map-args>
+
+ <sequence>
+ <script>
+ _cmd='%s/rebuild-index%s' % (dsBinPath,fileExt)
+ _args=' -b %s -i %s' % ( baseDN, ' '.join(attributes) )
+ </script>
+ <message log="1" level="'info'">
+ '%s %s' % (_cmd,_args)
+ </message>
+
+ <process name="'rebuild-index'">
+ <location>'%s' % location</location>
+ <command>'%s' % _cmd</command>
+ <parms>'%s' % _args</parms>
+ <workdir>'%s' % dsBinPath</workdir>
+ <envs>
+ ['PATH=/bin:/usr/bin:%s' % dsBinPath, 'JAVA_HOME=%s' % JAVA_HOME]
+ </envs>
+ <console use="'same'"/>
+ <stderr mode="'stdout'"/>
+ <returnstdout/>
+ </process>
+
+ <return>STAXResult</return>
+ </sequence>
+ </function>
+
</stax>
diff --git a/opendj-sdk/opends/tests/functional-tests/shared/functions/utils.xml b/opendj-sdk/opends/tests/functional-tests/shared/functions/utils.xml
index 3b26f61..117b202 100755
--- a/opendj-sdk/opends/tests/functional-tests/shared/functions/utils.xml
+++ b/opendj-sdk/opends/tests/functional-tests/shared/functions/utils.xml
@@ -844,6 +844,33 @@
True or False should be used for this argument.
</function-arg-description>
</function-arg-def>
+
+ <function-arg-def name="functionFailureTC" type="optional">
+ <function-arg-description>
+ If this argument is provided, a testcase will be created with
+ this argument's value for name and set to fail only upon failure
+ </function-arg-description>
+ </function-arg-def>
+
+ <function-arg-def name="functionSignal" type="optional">
+ <function-arg-description>
+ If this argument is provided, a signal will be raised upon unsuccesful
+ execution of the function to run
+ </function-arg-description>
+ </function-arg-def>
+
+ <function-arg-def name="functionCallBack" type="optional">
+ <function-arg-description>
+ If this argument is provided then functionCallBack will be called
+ after the execution of function name.
+ </function-arg-description>
+ </function-arg-def>
+
+ <function-arg-def name="functionCallBackArguments" type="optional">
+ <function-arg-description>
+ This allows to specify arguments for the call back function
+ </function-arg-description>
+ </function-arg-def>
</function-map-args>
<sequence>
<script>
@@ -870,6 +897,10 @@
_doSetTCStatus=False
if functionSetsTCStatus:
_doSetTCStatus=True
+
+ _createFailureTC=False
+ if functionFailureTC:
+ _createFailureTC=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>
@@ -906,6 +937,20 @@
</if>
</if>
+ <!-- this section handles the optional case when we need to set a
+ test case status to fail to reflect the failure in the test report.
+ -->
+ <if expr="_createFailureTC == True" >
+ <if expr="_functionRC != expectedRC" >
+ <testcase name="'!!! %s [%s]' % (functionFailureTC,functionName)">
+ <tcstatus result="'fail'" />
+ </testcase>
+ </if>
+ </if>
+
+ <!-- TODO: implement the signal raising mechanism -->
+ <!-- TODO: implement the call back function mechanism -->
+
<!-- bubble the function return code up one level -->
<return>_functionRC</return>
</sequence>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/indexes/indexes.xml b/opendj-sdk/opends/tests/functional-tests/testcases/indexes/indexes.xml
index ca17c47..a01f0c6 100644
--- a/opendj-sdk/opends/tests/functional-tests/testcases/indexes/indexes.xml
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/indexes/indexes.xml
@@ -28,36 +28,169 @@
<stax>
<defaultcall function="indexes" />
<function name="indexes">
- <sequence>
- <script>
- CurrentTestPath={'group':'indexes','suite':'indexes'}
- envAlreadyLoaded='true'
- </script>
- <try>
- <iterate in="['testGroup_Preamble','testSuite_Preamble','indexes_setup','indexes_search']" var="testStep">
- <call function="testStep" />
- </iterate>
- <catch exception="'STAXException.Topology.CreationException'">
- <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="['indexes_cleanup','testSuite_Postamble','testGroup_Postamble']" var="testStep">
- <call function="'%s' % testStep" />
- </iterate>
- </finally>
- </try>
- </sequence>
+ <block name="'indexes'">
+ <sequence>
+ <script>
+ CurrentTestPath={'group':'indexes','suite':'indexes'}
+ envAlreadyLoaded='true'
+ _setupSteps=['testGroup_Preamble','testSuite_Preamble','indexes_setup']
+ _testSteps=['indexes_search','indexes_modify']
+ </script>
+ <!---
+ #@TestSuiteName Indexes
+ #@TestSuitePurpose test the database index feature from ldap
+ #@TestSuiteGroup indexes
+ #@TestScript indexes.xml
+ -->
+
+ <try>
+ <!-- the pre-requisites are in a separate ite -->
+ <sequence>
+ <iterate in="_setupSteps" var="_setupStep">
+ <call function="_setupStep" />
+ </iterate>
+ <iterate in="_testSteps" var="_testStep" indexvar="_testStepNumber">
+ <call function="_testStep" />
+ </iterate>
+ </sequence>
+ <catch exception="'STAXException.Topology.CreationException'">
+ <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="['indexes_cleanup','testSuite_Postamble','testGroup_Postamble']" var="_cleanupStep">
+ <call function="'%s' % _cleanupStep" />
+ </iterate>
+ </finally>
+ </try>
+ </sequence>
+ </block>
</function>
- <function name="indexes_search" >
- <sequence>
- <message log="1" level="'info'">
- 'starting the search tests'
- </message>
+ <function name="indexes_search" scope="local">
+ <!---
+ This set of tests loop through a set of search filters to verify that
+ the default indexes behave as expected
+ #@TestMarker indexes
+ #@TestName indexes_search
+ #@TestIssue TODO: look up the issue in issue tracker
+ #@TestPurpose harden the default indexes
+ #@TestPreamble none
+ #@TestStep iterate through file search.filters
+ #@TestPostamble none
+ #@TestResult Success if entry are indexed correctly
+ -->
+ <block name="'indexes_search'">
+ <sequence>
+ <message log="1" level="'info'">
+ 'starting the search tests'
+ </message>
+ <call function="'loopThroughFilters'">
+ { 'filters' : 'search' }
+ </call>
+ </sequence>
+ </block>
+ </function>
+
+ <function name="indexes_modify" scope="local">
+ <!--
+ This test alters the uid default index so that it does subString search
+ and then verifies that it worked
+ #@TestMarker indexes
+ #@TestName indexes_search
+ #@TestIssue TODO: look up the issue in issue tracker
+ #@TestPurpose harden the default indexes
+ #@TestPreamble none
+ #@TestStep iterate through file search.filters
+ #@TestPostamble none
+ #@TestResult Success if entry are indexed correctly
+ -->
+ <block name="'indexes_modify'">
+ <sequence>
+ <try>
+ <sequence>
+ <call function="'loopThroughFilters'">
+ { 'filters' : 'before-modify' }
+ </call>
+ <call function="'runFunction'">
+ { 'functionName' : 'modifyAnAttribute',
+ 'functionException' : 'LDAP.ModifyException',
+ 'functionFailureTC' : 'Indexes - Modify' ,
+ 'functionMessage' : 'Adding substring index to attribute uid' ,
+ 'functionArguments' : { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : DIRECTORY_INSTANCE_DN ,
+ 'dsInstancePswd' : DIRECTORY_INSTANCE_PSWD ,
+ 'DNToModify' : 'ds-cfg-index-attribute=uid,cn=Index,ds-cfg-backend-id=userRoot,cn=Backends,cn=config' ,
+ 'attributeName' : 'ds-cfg-index-type' ,
+ 'newAttributeValue' : 'substring' ,
+ 'changetype' : 'add' }
+ }
+ </call>
+
+ <call function="'runFunction'">
+ { 'functionName' : 'StopDsWithScript' ,
+ 'functionException' : 'CLI.stop-ds' ,
+ 'functionFailureTC' : 'Indexes - Modify' ,
+ 'functionArguments' : { 'location' : STAF_LOCAL_HOSTNAME ,
+ 'dsHost' : DIRECTORY_INSTANCE_HOST,
+ 'dsPort' : DIRECTORY_INSTANCE_PORT,
+ 'dsBindDN' : DIRECTORY_INSTANCE_DN ,
+ 'dsBindPwd' : DIRECTORY_INSTANCE_PSWD }
+ }
+ </call>
+ <call function="'runFunction'">
+ { 'functionName' : 'CLI_rebuild-index' ,
+ 'functionException' : 'CLI.RebuildIndex' ,
+ 'functionFailureTC' : 'Indexes - Modify' ,
+ 'functionArguments' : { 'baseDN' : DIRECTORY_INSTANCE_SFX ,
+ 'attributes' : [ 'uid' ] }
+ }
+ </call>
+ <call function="'runFunction'">
+ { 'functionName' : 'StartDsWithScript',
+ 'functionException' : 'CLI.start-ds' ,
+ 'functionFailureTC' : 'Indexes - Modify' ,
+ 'functionArguments' : { 'location' : STAF_LOCAL_HOSTNAME }
+ }
+ </call>
+ <call function="'loopThroughFilters'">
+ { 'filters' : 'after-modify' }
+ </call>
+ </sequence>
+ <catch exception="'STAXException.LDAP.ModifyException'">
+ <message log="1" level="'fatal'">'Fatal Error: Failed to alter index for attribute uid'</message>
+ </catch>
+ <catch exception="'STAXException.CLI.RebuildIndex'">
+ <message log="1" level="'fatal'">'Fatal Error: Failed to rebuild index for attribute uid'</message>
+ </catch>
+ </try>
+ </sequence>
+ </block>
+ </function>
+
+ <!--
+ <function name="indexes_add" scope="local">
+ </function>
+
+ <function name="indexes_rebuild" scope="local">
+ </function>
+
+ <function name="indexes_delete" scope="local">
+ </function>
+
+ <function name="indexes_verify" scope="local">
+ </function>
+ -->
+
+ <function name="loopThroughFilters" scope="local">
+ <function-map-args>
+ <function-arg-def name="filters" type="required" />
+ </function-map-args>
+ <sequence>
<script>
class indexTest:
"Describes an index test with indexed attribute, filter to test with and expected behaviour"
@@ -103,7 +236,7 @@
indexTests = []
- f = open('%s/testcases/indexes/search.filters' % TESTS_DIR,'r')
+ f = open('%s/testcases/indexes/%s.filters' % (TESTS_DIR,filters),'r')
for line in f.readlines():
if line.startswith('#'):
continue
@@ -111,20 +244,20 @@
testLine = line.split(' ')
indexTests.append(indexTest(testLine[0], testLine[1], testLine[2], testLine[3], testLine[4]))
- iteration=0
+ indexTestNumber=0
previousTestName=''
testNumber=0
</script>
<iterate var="test" in="indexTests">
<sequence>
<script>
- iteration=iteration+1
+ indexTestNumber=indexTestNumber+1
if previousTestName != test.getName():
previousTestName=test.getName()
testNumber=0
</script>
- <testcase name="'Indexes: 1.Search: %03d-%03d.%s: %s%02d' % ( len(indexTests)-iteration, iteration, test.getAttribute(), test.getName(), testNumber)" >
+ <testcase name="'Indexes: %d.%s: %03d-%03d.%s: %s%02d' % ( len(_testSteps)-_testStepNumber, filters, len(indexTests)-indexTestNumber, indexTestNumber, test.getAttribute(), test.getName(), testNumber)" >
<sequence>
<call function="'testCase_Preamble'" />
<message log="1" level="'trace'">
--
Gitblit v1.10.0