indexes.xml revision d81978a0815d5b8a75633c35e3e1f8708d36f017
1N/A<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1N/A<!DOCTYPE stax SYSTEM "/shared/stax.dtd">
1N/A<!--
1N/A ! CDDL HEADER START
1N/A !
1N/A ! The contents of this file are subject to the terms of the
1N/A ! Common Development and Distribution License, Version 1.0 only
1N/A ! (the "License"). You may not use this file except in compliance
1N/A ! with the License.
1N/A !
1N/A ! You can obtain a copy of the license at
1N/A ! trunk/opends/resource/legal-notices/OpenDS.LICENSE
1N/A ! or https://OpenDS.dev.java.net/OpenDS.LICENSE.
1N/A ! See the License for the specific language governing permissions
1N/A ! and limitations under the License.
1N/A !
1N/A ! When distributing Covered Code, include this CDDL HEADER in each
1N/A ! 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
!
! Copyright 2007-2008 Sun Microsystems, Inc.
! -->
<stax>
<defaultcall function="main_indexes" />
<function name="main_indexes">
<function-list-args>
<function-required-arg name="STAXParentID"/>
</function-list-args>
<block name="'indexes'">
<sequence>
<!--- Load the job environment for the test group execution -->
<import machine="STAF_LOCAL_HOSTNAME"
file="'%s/environment.xml' % TESTS_FUNCTIONS_DIR" />
<call function="'loadJobEnvironment'">
{ 'parent' : STAXParentID }
</call>
<script>
CurrentTestPath={'group':'indexes','suite':'indexes'}
envAlreadyLoaded='true'
_setupSteps=['testGroup_Preamble','testSuite_Preamble',
'indexes_setup']
_testSteps=['indexes_search', 'indexes_dynamic_modify',
'indexes_dynamic_add', 'indexes_remove', 'indexes_add']
_cleanupSteps=['indexes_cleanup','testSuite_Postamble',
'testGroup_Postamble']
</script>
<!---
#@TestSuiteName Indexes
#@TestSuitePurpose test the database index feature from ldap
#@TestSuiteGroup indexes
#@TestScript indexes.xml
-->
<try>
<!-- the pre-requisites are in a separate iteration -->
<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="_cleanupSteps" var="_cleanupStep">
<call function="_cleanupStep" />
</iterate>
</finally>
</try>
</sequence>
</block>
</function>
<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="'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="'Modify'">
<sequence>
<try>
<sequence>
<call function="'loopThroughFilters'">
{ 'filters' : 'before-modify' }
</call>
<call function="'runFunction'">
{ 'functionName' : 'modifyIndex',
'functionException' : 'LDAP.ModifyException',
'functionFailureTC' : '%s: %s: %s' % (CurrentTestPath['group'],
CurrentTestPath['suite'],
STAXCurrentBlock ) ,
'functionMessage' : 'Adding substring index to attribute uid',
'functionArguments' : { 'operation' : 'add',
'indexAttribute' : 'uid',
'indexProperty' : 'index-type',
'indexPropertyValue' : 'substring'
}
}
</call>
<call function="'runFunction'">
{ 'functionName' : 'StopDsWithScript',
'functionException' : 'CLI.stop-ds',
'functionFailureTC' : 'Indexes - Modify' ,
'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' : '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_REMOTE_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_dynamic_modify" scope="local">
<!--
This test alters dynamically the uid default index so that it does
subString search and then verifies that it worked
#@TestMarker indexes
#@TestName indexes_dynamic_modify
#@TestIssue 1480
#@TestPurpose harden the default indexes
#@TestPreamble none
#@TestStep iterate through file search.filters
#@TestPostamble none
#@TestResult Success if entry are indexed correctly
-->
<block name="'Modify'">
<sequence>
<try>
<sequence>
<call function="'loopThroughFilters'">
{ 'filters' : 'before-modify' }
</call>
<call function="'runFunction'">
{ 'functionName' : 'modifyIndex',
'functionException' : 'LDAP.ModifyException',
'functionFailureTC' : '%s: %s: %s' % (CurrentTestPath['group'],
CurrentTestPath['suite'],
STAXCurrentBlock ) ,
'functionMessage' : 'Adding substring index to attribute uid',
'functionArguments' : { 'operation' : 'add',
'indexAttribute' : 'uid',
'indexProperty' : 'index-type',
'indexPropertyValue' : 'substring'
}
}
</call>
<call function="'runFunction'">
{ 'functionName' : 'rebuildIndexTask' ,
'functionException' : 'CLI.RebuildIndex' ,
'functionFailureTC' : 'Indexes - Dynamic Modify' ,
'functionArguments' :
{ 'location' : STAF_REMOTE_HOSTNAME,
'dsInstanceHost' : DIRECTORY_INSTANCE_HOST,
'dsInstancePort' : DIRECTORY_INSTANCE_PORT,
'dsInstanceDn' : DIRECTORY_INSTANCE_DN,
'dsInstancePswd' : DIRECTORY_INSTANCE_PSWD,
'taskID' : 'rebuild uid index task',
'baseDN' : DIRECTORY_INSTANCE_SFX ,
'attributes' : [ 'uid' ]
}
}
</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">
<!--
This test adds a new presence and equality index for l attribute
and then verifies that it worked
#@TestMarker indexes
#@TestName indexes_add
#@TestIssue TODO: look up the issue in issue tracker
#@TestPurpose check if the user can add her own indexes
#@TestPreamble none
#@TestStep iterate through filters prior to adding indexes
#@TestStep add the indexes
#@TestStep iterate through filters after to adding indexes
#@TestPostamble none
#@TestResult Success if entry are indexed correctly
-->
<block name="'Add'">
<sequence>
<try>
<sequence>
<call function="'loopThroughFilters'">
{ 'filters' : 'before-add' }
</call>
<call function="'runFunction'">
{ 'functionName' : 'addIndex',
'functionException' : 'LDAP.AddIndexException',
'functionFailureTC' : 'Indexes - Add',
'functionMessage' : 'Adding presence and equality index to \
attribute l',
'functionArguments' : { 'indexAttribute' : 'l',
'indexTypes' : [ 'presence',
'equality' ]
}
}
</call>
<call function="'runFunction'">
{ 'functionName' : 'StopDsWithScript',
'functionException' : 'CLI.stop-ds',
'functionFailureTC' : '%s: %s: %s' % (CurrentTestPath['group'],
CurrentTestPath['suite'],
STAXCurrentBlock ) ,
'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' : 'CLI_rebuild-index' ,
'functionException' : 'CLI.RebuildIndex' ,
'functionFailureTC' : 'Indexes - Modify' ,
'functionArguments' : { 'baseDN' : DIRECTORY_INSTANCE_SFX ,
'attributes' : [ 'l' ]
}
}
</call>
<call function="'runFunction'">
{ 'functionName' : 'StartDsWithScript',
'functionException' : 'CLI.start-ds',
'functionFailureTC' : '%s: %s: ' ,
'functionArguments' : { 'location' : STAF_REMOTE_HOSTNAME }
}
</call>
<call function="'loopThroughFilters'">
{ 'filters' : 'after-add' }
</call>
</sequence>
<catch exception="'STAXException.LDAP.AddIndexException'">
<message log="1" level="'fatal'">
'Fatal Error: Failed to add index for attribute l'
</message>
</catch>
<catch exception="'STAXException.CLI.RebuildIndex'">
<message log="1" level="'fatal'">
'Fatal Error: Failed to rebuild index for attribute l'
</message>
</catch>
</try>
</sequence>
</block>
</function>
<function name="indexes_dynamic_add" scope="local">
<!--
This test adds dynamically a new presence and equality index for l
attribute and then verifies that it worked
#@TestMarker indexes
#@TestName indexes_dynamic_add
#@TestIssue 1480
#@TestPurpose check if the user can add her own indexes
dynamically
#@TestPreamble none
#@TestStep iterate through filters prior to adding indexes
#@TestStep add the indexes
#@TestStep iterate through filters after to adding indexes
#@TestPostamble none
#@TestResult Success if entry are indexed correctly
-->
<block name="'Add'">
<sequence>
<try>
<sequence>
<call function="'loopThroughFilters'">
{ 'filters' : 'before-add' }
</call>
<call function="'runFunction'">
{ 'functionName' : 'addIndex',
'functionException' : 'LDAP.AddIndexException',
'functionFailureTC' : 'Indexes - Add',
'functionMessage' : 'Adding presence and equality index to \
attribute l',
'functionArguments' : { 'indexAttribute' : 'l',
'indexTypes' : [ 'presence',
'equality' ]
}
}
</call>
<call function="'runFunction'">
{ 'functionName' : 'rebuildIndexTask' ,
'functionException' : 'CLI.RebuildIndex' ,
'functionFailureTC' : 'Indexes - Dynamic Add' ,
'functionArguments' :
{ 'location' : STAF_REMOTE_HOSTNAME,
'dsInstanceHost' : DIRECTORY_INSTANCE_HOST,
'dsInstancePort' : DIRECTORY_INSTANCE_PORT,
'dsInstanceDn' : DIRECTORY_INSTANCE_DN,
'dsInstancePswd' : DIRECTORY_INSTANCE_PSWD,
'taskID' : 'rebuild l index task',
'baseDN' : DIRECTORY_INSTANCE_SFX ,
'attributes' : [ 'l' ]
}
}
</call>
<call function="'loopThroughFilters'">
{ 'filters' : 'after-add' }
</call>
</sequence>
<catch exception="'STAXException.LDAP.AddIndexException'">
<message log="1" level="'fatal'">
'Fatal Error: Failed to add index for attribute l'
</message>
</catch>
<catch exception="'STAXException.CLI.RebuildIndex'">
<message log="1" level="'fatal'">
'Fatal Error: Failed to rebuild index for attribute l'
</message>
</catch>
</try>
</sequence>
</block>
</function>
<function name="indexes_remove" scope="local">
<!--
This test does a bunch of searches on the
and then verifies that it worked
#@TestMarker indexes
#@TestName indexes_remove
#@TestIssue TODO: look up the issue in issue tracker
#@TestPurpose Check if the user can remove indexes
#@TestPreamble none
#@TestStep iterate through filters prior to removing index
#@TestStep remove index
#@TestStep iterate through filters after to removing index
#@TestPostamble none
#@TestResult Success if entry are indexed as expected
-->
<block name="'Remove'">
<sequence>
<try>
<sequence>
<call function="'loopThroughFilters'">
{ 'filters' : 'before-remove' }
</call>
<call function="'runFunction'">
{ 'functionName' : 'removeIndex',
'functionException' : 'LDAP.RemoveIndexException',
'functionFailureTC' : '%s: %s: %s' % (CurrentTestPath['group'],
CurrentTestPath['suite'],
STAXCurrentBlock),
'functionMessage' : 'Removing index on attribute l' ,
'functionArguments' : { 'indexAttribute' : 'l' }
}
</call>
<call function="'loopThroughFilters'">
{ 'filters' : 'after-remove' }
</call>
</sequence>
<catch exception="'STAXException.LDAP.RemoveIndexException'">
<message log="1" level="'fatal'">
'Fatal Error: Failed to remove index for attribute l'
</message>
</catch>
</try>
</sequence>
</block>
</function>
<function name="indexes_entry_limit">
<!--
This test does a bunch of searches on the
and then verifies that it worked
#@TestMarker indexes
#@TestName indexes_remove
#@TestIssue TODO: look up the issue in issue tracker
#@TestPurpose Check if the user can remove indexes
#@TestPreamble none
#@TestStep iterate through filters prior to removing index
#@TestStep remove index
#@TestStep iterate through filters after to removing index
#@TestPostamble none
#@TestResult Success if entry are indexed as expected
-->
<block name="'Entry_Limit'">
<sequence>
<try>
<sequence>
<call function="'loopThroughFilters'">
{ 'filters' : 'before-entry-limit' }
</call>
<call function="'runFunction'">
{ 'functionName' : 'modifyIndex',
'functionException' : 'LDAP.ModifyIndexException',
'functionFailureTC' : '%s: %s: %s' % (CurrentTestPath['group'],
CurrentTestPath['suite'],
STAXCurrentBlock),
'functionMessage' : 'Modify index entry limit on attribute \
uid' ,
'functionArguments' : { 'operation' : 'set',
'indexAttribute' : 'uid',
'indexProperty' : 'index-entry-limit',
'indexPropertyValue' : '3'
}
}
</call>
<call function="'loopThroughFilters'">
{ 'filters' : 'after-entry-limit' }
</call>
</sequence>
<catch exception="'STAXException.LDAP.RemoveIndexException'">
<message log="1" level="'fatal'">
'Fatal Error: Failed to remove index for attribute l'
</message>
</catch>
</try>
</sequence>
</block>
</function>
<function name="indexes_vlv_add">
<!--
This test does a bunch of searches on the
and then verifies that it worked
#@TestMarker indexes
#@TestName indexes_vlv_add
#@TestIssue TODO: look up the issue in issue tracker
#@TestPurpose Check if the user can remove indexes
#@TestPreamble none
#@TestStep iterate through filters prior to removing index
#@TestStep remove index
#@TestStep iterate through filters after to removing index
#@TestPostamble none
#@TestResult Success if entry are indexed as expected
-->
<block name="'Entry_Limit'">
<sequence>
<try>
<sequence>
<call function="'loopThroughFilters'">
{ 'filters' : 'before-entry-limit' }
</call>
<call function="'runFunction'">
{ 'functionName' : 'modifyIndex',
'functionException' : 'LDAP.ModifyIndexException',
'functionFailureTC' : '%s: %s: %s' % (CurrentTestPath['group'],
CurrentTestPath['suite'],
STAXCurrentBlock),
'functionMessage' : 'Modify index entry limit on attribute \
uid' ,
'functionArguments' : { 'operation' : 'set',
'indexAttribute' : 'uid',
'indexProperty' : 'index-entry-limit' ,
'indexPropertyValue' : '3'
}
}
</call>
<call function="'loopThroughFilters'">
{ 'filters' : 'after-entry-limit' }
</call>
</sequence>
<catch exception="'STAXException.LDAP.RemoveIndexException'">
<message log="1" level="'fatal'">
'Fatal Error: Failed to remove index for attribute l'
</message>
</catch>
</try>
</sequence>
</block>
</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"
def __init__(self, attribute,testName,filter,expectedValue,isIndexed):
self.attribute = attribute
self.name = testName
self.filter = filter
self.rc = expectedValue
self.isIndexed=re.compile(r'[\r\n]').sub('',isIndexed)
self.status='fail'
def getAttribute(self):
return self.attribute
def getName(self):
return self.name
def getFilter(self):
return self.filter
def getRC(self):
return self.rc
def getSearchString(self):
if self.isIndexed.startswith('NOT'):
return 'NOT'
else:
return 'INDEX:%s' % (self.attribute)
def pass(self):
self.status='pass'
def getStatus(self):
return self.status
def desc(self):
description = 'test:: name=[%s]\n' % self.name
description += 'test:: attribute=[%s]\n' % self.attribute
description += 'test:: filter=[%s]\n' % self.filter
description += 'test:: rc=[%s]\n' % self.rc
description += 'test:: indexed=[%s]\n' % self.isIndexed
return description
indexTests = []
f = open('%s/testcases/indexes/%s.filters' % (TESTS_DIR,filters),'r')
for line in f.readlines():
if line.startswith('#'):
continue
else:
testLine = line.split(' ')
indexTests.append(indexTest(testLine[0], testLine[1], testLine[2],
testLine[3], testLine[4]))
f.close()
indexTestNumber=0
previousTestName=''
testNumber=0
</script>
<iterate var="test" in="indexTests">
<sequence>
<script>
indexTestNumber=indexTestNumber+1
if previousTestName != test.getName():
previousTestName=test.getName()
testNumber=0
</script>
<testcase name="'%s: %d.%s: %03d-%03d.%s: %s%02d'
% ( CurrentTestPath['group'], len(_testSteps)-_testStepNumber,
filters, len(indexTests)-indexTestNumber, indexTestNumber,
test.getAttribute(), test.getName(), testNumber)" >
<sequence>
<call function="'testCase_Preamble'" />
<message log="1" level="'trace'">
'Searching attribute [%s] with filter[%s]' \
% (test.getAttribute(),test.getFilter())
</message>
<call function="'SearchObject'">
{ 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST,
'dsInstancePort' : DIRECTORY_INSTANCE_PORT,
'dsInstanceDn' : DIRECTORY_INSTANCE_DN,
'dsInstancePswd' : DIRECTORY_INSTANCE_PSWD,
'dsBaseDN' : 'ou=People,dc=example,%s' \
% DIRECTORY_INSTANCE_SFX ,
'dsFilter' : '%s' % test.getFilter(),
'attributes' : 'debugsearchindex',
'expectedRC' : 'noCheck'
}
</call>
<script>
searchReturnCode, searchResultString = STAXResult[0]
# chop off the first line that contains the dn
searchResultString = re.compile(r'^dn:.*\n?').sub('',
searchResultString)
# join multiple lines into a single one
searchResultString = re.compile(r'[ \t]*\r?\n[ \t]*').sub('',
searchResultString)
srt=searchResultString.split('[')[1]
if (str(searchReturnCode) == str(test.getRC())) and \
srt.startswith(test.getSearchString()):
test.pass()
</script>
<message level="'trace'">
'%s\nsearchReturnCode=[%s]\nldapsearch return \
string=[%s]\nchunk to parse=[%s]\nstring looked for=[%s]' \
% (test.desc(), searchReturnCode, searchResultString, srt,
test.getSearchString())
</message>
<tcstatus result="test.getStatus()" />
<call function="'testCase_Postamble'" />
<script>
testNumber=testNumber+1
</script>
</sequence>
</testcase>
</sequence>
</iterate>
</sequence>
</function>
<!-- Setup the instance for indexes tests -->
<function name="indexes_setup">
<sequence>
<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 tests -->
<function name="indexes_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>
</stax>