From a5d79535f9e4b07ad85e3670615c7f6216aed464 Mon Sep 17 00:00:00 2001
From: andrug <andrug@localhost>
Date: Tue, 03 Jul 2007 13:46:55 +0000
Subject: [PATCH] new testsuite
---
opendj-sdk/opends/tests/functional-tests/testcases/groups/mytest.xml | 175 +++
opendj-sdk/opends/tests/functional-tests/testcases/groups/group_dynamic.xml | 484 ++++++++
opendj-sdk/opends/tests/functional-tests/testcases/groups/group_static_uniquemember.xml | 767 +++++++++++++
opendj-sdk/opends/tests/functional-tests/testcases/groups/group_virtual_static.xml | 744 +++++++++++++
opendj-sdk/opends/tests/functional-tests/testcases/groups/groups.xml | 80 +
opendj-sdk/opends/tests/functional-tests/testcases/groups/group_cleanup.xml | 103 +
opendj-sdk/opends/tests/functional-tests/testcases/groups/.mytest.xml.swp | 0
opendj-sdk/opends/tests/functional-tests/testcases/groups/group_setup.xml | 121 ++
opendj-sdk/opends/tests/functional-tests/testcases/groups/group_static_member.xml | 770 +++++++++++++
opendj-sdk/opends/tests/functional-tests/testcases/groups/group_lib.xml | 85 +
10 files changed, 3,329 insertions(+), 0 deletions(-)
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/.mytest.xml.swp b/opendj-sdk/opends/tests/functional-tests/testcases/groups/.mytest.xml.swp
new file mode 100644
index 0000000..f9f5ab7
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/.mytest.xml.swp
Binary files differ
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_cleanup.xml b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_cleanup.xml
new file mode 100644
index 0000000..52278ce
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_cleanup.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "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 2007 Sun Microsystems, Inc.
+ ! -->
+<stax>
+
+ <defaultcall function="group_cleanup"/>
+
+ <function name="group_cleanup">
+ <function-map-args>
+ <function-arg-def name="stopDS" type="optional" default="True">
+ <function-arg-description>
+ Optional stop the Directory Server
+ </function-arg-description>
+ <function-arg-property name="type" value="boolean"/>
+ </function-arg-def>
+ </function-map-args>
+
+ <sequence>
+
+ <block name="'cleanup'">
+
+ <sequence>
+
+ <if expr="stopDS == True">
+ <block name="'Block DS Process Stop'">
+ <!--- Stop DS -->
+ <sequence>
+ <message>
+ '------ Stop DS running on port %s' % (DIRECTORY_INSTANCE_PORT)
+ </message>
+
+ <call function="'StopDsWithScript'">
+ { 'location' : STAF_REMOTE_HOSTNAME,
+ 'dsHost' : DIRECTORY_INSTANCE_HOST,
+ 'dsPort' : DIRECTORY_INSTANCE_PORT,
+ 'dsBindDN' : DIRECTORY_INSTANCE_DN,
+ 'dsBindPwd' : DIRECTORY_INSTANCE_PSWD }
+ </call>
+
+ <call function="'checkRC'">
+ { 'returncode' : RC ,
+ 'result' : STAXResult }
+ </call>
+
+ </sequence>
+ <!--- End Block DS Process Stop -->
+ </block>
+ </if>
+
+
+
+ <block name="'Block Remove DS Topology'">
+ <!-- Remove the topology created for the test suite -->
+ <sequence>
+
+ <message>
+ '------ Remove DS topology created for the Test Suite'
+ </message>
+
+ <call function="'removeTopology'"/>
+
+ <call function="'checkRC'">
+ { 'returncode' : RC ,
+ 'result' : STAXResult }
+ </call>
+
+ </sequence>
+ <!-- End Block Remove DS Topology-->
+ </block>
+
+
+ </sequence>
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_dynamic.xml b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_dynamic.xml
new file mode 100644
index 0000000..2f6dfbc
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_dynamic.xml
@@ -0,0 +1,484 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../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="main_dynamicgroup"/>
+
+ <function name="main_dynamicgroup">
+
+ <sequence>
+
+ <block name="'dynamicgroup'">
+
+ <sequence>
+
+ <script>
+ applicationDn='uid=my_application,dc=groups,dc=com'
+ applicationPswd='pw_my_application'
+ dynamicGroupDn='cn=my_dynamicgroup1,dc=groups,dc=com'
+ newDynamicGroup='my_newDynamicGroup'
+ newDynamicGroupDn='cn=%s,dc=groups,dc=com' % (newDynamicGroup)
+ newDynamicGroupPswd='pw_%s' % (newDynamicGroup)
+ user0='user_00'
+ user0Dn='uid=%s,ou=dynamic,dc=groups,dc=com' % (user0)
+ user0Pswd='pw_00'
+ user1='user_01'
+ user1Dn='uid=%s,ou=dynamic,dc=groups,dc=com' % (user1)
+ user1Pswd='pw_01'
+ user2='user_02'
+ user2Dn='uid=%s,ou=dynamic,dc=groups,dc=com' % (user2)
+ user2Pswd='pw_02'
+ user2Add='user_22'
+ user2AddDn='uid=%s,ou=dynamic,dc=groups,dc=com' % (user2Add)
+ user2AddPswd='pw_22'
+ user2AddRenamed='%s_bis' % (user2Add)
+ user2AddRenamedDn='uid=%s,ou=dynamic,dc=groups,dc=com' % (user2AddRenamed)
+ </script>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='groups'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <!--- Test Suite information
+ #@TestSuiteName Group test suite
+ #@TestSuitePurpose Test this feature
+ #@TestSuiteID Groups Tests
+ #@TestSuiteGroup Dynamic Group
+ #@TestGroup Dynamic Group
+ #@TestScript group_dynamic.xml
+ #@TestHTMLLink http://opends.dev.java.net/
+ -->
+
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_setup.xml' % (TESTS_DIR)"/>
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_lib.xml' % (TESTS_DIR)"/>
+
+ <call function="'group_setup'"> { 'startDS' : True } </call>
+
+
+ <!--- Test Case information
+ #@TestMarker Dynamic Group Tests
+ #@TestName Group: Dynamic: add a dynamic group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Dynamic: add a dynamic group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <script>
+ listAttr = []
+ listAttr.append('cn:%s' % newDynamicGroup)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:groupofurls')
+ listAttr.append('description:this is the description of %s' % newDynamicGroup)
+ listAttr.append('memberurl:ldap:///ou=dynamic,dc=groups,dc=com??sub?(uid=*0*)')
+ </script>
+ <message>
+ '++++ Application add group entry %s' % newDynamicGroupDn
+ </message>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : newDynamicGroupDn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application do a search to check the entry has been created'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newDynamicGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uniquemember' }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user0Dn ,
+ 'string2find' : newDynamicGroupDn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!--- Test Case information
+ #@TestMarker Dynamic Group Tests
+ #@TestName Group: Dynamic: delete a dynamic group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Dynamic: delete a dynamic group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Delete the group entry %s' % newDynamicGroupDn
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newDynamicGroupDn,
+ }
+ </call>
+ <message>
+ '++++ Check the group entry %s no more exist' % newDynamicGroup
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newDynamicGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'expected' : 32 }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user0Dn ,
+ 'string2find' : newDynamicGroupDn ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!--- Test Case information
+ #@TestMarker Dynamic Group Tests
+ #@TestName Group: Dynamic: no group user do a search
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Dynamic: no group user do a search'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ %s search itself (should PASS as not a member of dynamic group)' % user1
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user1Dn ,
+ 'dsInstancePswd' : user1Pswd ,
+ 'dsBaseDN' : user1Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'expected' : 0 }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user1Dn ,
+ 'string2find' : dynamicGroupDn ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Dynamic Group Tests
+ #@TestName Group: Dynamic: group user do a search
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Dynamic: group user do a search'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ %s search itself (should be refused as dynamic group does not have the permission)' % user2
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user2Dn ,
+ 'dsInstancePswd' : user2Pswd ,
+ 'dsBaseDN' : user2Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search return nothing'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dn' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user2Dn ,
+ 'string2find' : dynamicGroupDn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Dynamic Group Tests
+ #@TestName Group: Dynamic: application add entry that belong to a group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Dynamic: application add entry that belong to a group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Application add a new user %s / %s ' % (user2AddDn,user2AddPswd)
+ </message>
+ <script>
+ listAttr = []
+ listAttr.append('uid:%s' % user2Add)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:person')
+ listAttr.append('objectclass:inetOrgPerson')
+ listAttr.append('cn:%s' % user2Add)
+ listAttr.append('sn:sn of user %s' % user2Add)
+ listAttr.append('description:this is the description of %s' % user2Add)
+ listAttr.append('userPassword:%s' % user2AddPswd)
+ </script>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : user2AddDn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ %s search itself (should be refused as dynamic group does not have permission)' % user2Add
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user2AddDn ,
+ 'dsInstancePswd' : user2AddPswd ,
+ 'dsBaseDN' : user2AddDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search return nothing'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dn' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user2AddDn ,
+ 'string2find' : dynamicGroupDn ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Dynamic Group Tests
+ #@TestName Group: Dynamic: application rename entry that belong to a group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Dynamic: application rename entry that belong to a group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Application rename %s into %s ' % (user2Add,user2AddRenamed)
+ </message>
+
+ <call function="'modifyDn'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : user2AddDn ,
+ 'newRDN' : user2AddRenamed,
+ 'deleteOldRDN' : 1 }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ %s search itself (should be refused as dynamic group does not have permission)' % user2AddRenamed
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user2AddRenamedDn ,
+ 'dsInstancePswd' : user2AddPswd ,
+ 'dsBaseDN' : user2AddRenamedDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search return nothing'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dn' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user2AddRenamedDn ,
+ 'string2find' : dynamicGroupDn ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Dynamic Group Tests
+ #@TestName Group: Dynamic: application delete entry belonging to a group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Dynamic: application delete entry belonging to a group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Application delete user %s' % user2Add
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : user2AddDn
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check the entry %s no more exist' % user2Add
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : user2AddDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'dn',
+ 'expected' : 32 }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ %s do a search (should fail)' % user2Add
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user2AddDn ,
+ 'dsInstancePswd' : user2AddPswd ,
+ 'dsBaseDN' : user2AddDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'expected' : 49 }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+
+
+ <!-- *********************************************** -->
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'group_cleanup'"> { 'stopDS' : True } </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_lib.xml b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_lib.xml
new file mode 100644
index 0000000..6b22edc
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_lib.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../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>
+
+ <function name="CheckIsMemberOf">
+ <function-prolog>
+ check an entry got ismemberof attribute with a specific value
+ </function-prolog>
+ <function-map-args>
+ <function-arg-def name="baseDn" type="required">
+ <function-arg-description>
+ entry to search
+ </function-arg-description>
+ <function-arg-property name="type" value="string"/>
+ </function-arg-def>
+ <function-arg-def name="string2find" type="required">
+ <function-arg-description>
+ check if string appears in ldapsearch result
+ </function-arg-description>
+ <function-arg-property name="type" value="string"/>
+ </function-arg-def>
+ <function-arg-def name="nbExpected" type="optional" default="1">
+ <function-arg-description>
+ number of expected sub-string that must be in ldapsearch result
+ </function-arg-description>
+ <function-arg-property name="type" value="integer"/>
+ </function-arg-def>
+ </function-map-args>
+
+ <sequence>
+ <message>
+ '++++ %s searchs isMemberOf attribute for entry %s' % (DIRECTORY_INSTANCE_DN,baseDn)
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : DIRECTORY_INSTANCE_DN ,
+ 'dsInstancePswd' : DIRECTORY_INSTANCE_PSWD ,
+ 'dsBaseDN' : baseDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'isMemberOf',
+ 'expected' : 0 }
+ </call>
+
+ <message>
+ '++++ Check in ldapsearch result that string %s appears %s time(s)' % (string2find,nbExpected)
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : string2find ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : nbExpected
+ }
+ </call>
+
+ </sequence>
+ </function>
+
+
+</stax>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_setup.xml b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_setup.xml
new file mode 100644
index 0000000..0190091
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_setup.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../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 2007 Sun Microsystems, Inc.
+ ! -->
+
+<stax>
+
+ <defaultcall function="group_setup"/>
+
+ <function name="group_setup">
+ <function-map-args>
+ <function-arg-def name="startDS" type="optional" default="True">
+ <function-arg-description>
+ Optional start the Directory Server
+ </function-arg-description>
+ <function-arg-property name="type" value="boolean"/>
+ </function-arg-def>
+ <function-arg-def name="loadBackend" type="optional" default="True">
+ <function-arg-description>
+ Specifies whether the backend should be loaded with some data.
+ </function-arg-description>
+ <function-arg-property name="type" value="boolean"/>
+ </function-arg-def>
+ </function-map-args>
+
+
+ <sequence>
+
+ <block name="'setup'">
+ <sequence>
+
+ <block name="'Block Create DS Topology'">
+ <!-- Create the topology necessary to the test group/suite -->
+ <sequence>
+ <message>
+ '------ Create DS topology as described in config.py'
+ </message>
+ <call function="'createTopology'">
+ { 'initialiseInstance' : False }
+ </call>
+ <call function="'checkRC'">
+ { 'returncode' : RC ,
+ 'result' : STAXResult }
+ </call>
+
+ </sequence>
+ <!--- End Block Create DS Topology -->
+ </block>
+
+ <if expr="loadBackend == True">
+ <block name="'Block DS Load Data'">
+ <!-- Load the data needed by the test suite -->
+ <sequence>
+ <message>
+ '------ Load LDIF : groups.ldif'
+ </message>
+ <call function="'importLdif'">
+ { 'ldifFile' : '%s/groups/groups.ldif' % logsRemoteDataDir }
+ </call>
+ <call function="'checkRC'">
+ { 'returncode' : RC ,
+ 'result' : STAXResult }
+ </call>
+ </sequence>
+ <!--- End Block DS Load Data -->
+ </block>
+ </if>
+
+ <if expr="startDS == True">
+ <block name="'Block DS Process Active'">
+ <!--- Start DS -->
+ <sequence>
+ <message>
+ '------ Start DS to run on port %s' % (DIRECTORY_INSTANCE_PORT)
+ </message>
+ <!--- Start DS -->
+ <call function="'StartDsWithScript'">
+ { 'location' : STAF_REMOTE_HOSTNAME }
+ </call>
+ <call function="'checkRC'">
+ { 'returncode' : RC ,
+ 'result' : STAXResult }
+ </call>
+ <!--- Check that DS started -->
+ <call function="'isAlive'">
+ { 'noOfLoops' : 5 ,
+ 'noOfMilliSeconds' : 2000 }
+ </call>
+ </sequence>
+ <!--- End Block DS Process Active -->
+ </block>
+ </if>
+ </sequence>
+ </block>
+ </sequence>
+ </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_static_member.xml b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_static_member.xml
new file mode 100644
index 0000000..cefc36c
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_static_member.xml
@@ -0,0 +1,770 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../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="main_staticgroup_member"/>
+
+ <function name="main_staticgroup_member">
+
+ <sequence>
+
+ <block name="'staticgroup_member'">
+
+ <sequence>
+
+ <script>
+ applicationDn='uid=my_application,dc=groups,dc=com'
+ applicationPswd='pw_my_application'
+ staticGroup2Dn='cn=my_staticgroup2,dc=groups,dc=com'
+ newStaticGroup='my_newStaticGroup'
+ newStaticGroupDn='cn=%s,dc=groups,dc=com' % (newStaticGroup)
+ newStaticGroupPswd='pw_%s' % (newStaticGroup)
+ user1='user_01'
+ user1Dn='uid=%s,ou=static,dc=groups,dc=com' % (user1)
+ user1Pswd='pw_01'
+ user2='user_02'
+ user2Dn='uid=%s,ou=static,dc=groups,dc=com' % (user2)
+ user2Pswd='pw_02'
+ user11='user_11'
+ user11Dn='uid=%s,ou=static,dc=groups,dc=com' % (user11)
+ user11Pswd='pw_11'
+
+ </script>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='groups'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <!--- Test Suite information
+ #@TestSuiteName Static group test suite
+ #@TestSuitePurpose Test this feature
+ #@TestSuiteID Groups Tests
+ #@TestSuiteGroup staticgroup
+ #@TestGroup Groups
+ #@TestScript group_static.xml
+ #@TestHTMLLink http://opends.dev.java.net/
+ -->
+
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_setup.xml' % (TESTS_DIR)"/>
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_lib.xml' % (TESTS_DIR)"/>
+
+ <call function="'group_setup'"> { 'startDS' : True } </call>
+
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: member: add a static group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: add a static group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <script>
+ listAttr = []
+ listAttr.append('cn:%s' % newStaticGroup)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:groupofnames')
+ listAttr.append('description:this is the description of %s' % newStaticGroup)
+ listAttr.append('member:%s' % user11Dn)
+ </script>
+ <message>
+ '++++ Application add group entry %s' % newStaticGroup
+ </message>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : newStaticGroupDn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <message>
+ '++++ Application do a search to check the entry has been created'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'member' }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check the search return entry %s' % user11Dn
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user11Dn ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : newStaticGroupDn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: member: delete a static group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: delete a static group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Delete the group entry %s' % newStaticGroup
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn,
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check the group entry %s no more exist' % newStaticGroup
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'member',
+ 'expected' : 32 }
+ </call>
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : newStaticGroupDn ,
+ 'nbExpected' : 0
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: member: ldapsearch out of the group
+ #@TestID search in group
+ #@TestPurpose user of group search members of its group
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: ldapsearch out of the group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ user %s, not member of the group, do a search, should pass' % user11
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user11Dn ,
+ 'dsInstancePswd' : user11Pswd ,
+ 'dsBaseDN' : user11Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uid',
+ 'expected' : 0 }
+ </call>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uid' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 2
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: member: ldapsearch through group
+ #@TestID search in group
+ #@TestPurpose user of group search members of its group
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: ldapsearch through group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ user %s, member of the group do a search, should be denied has group have no permission' % user1
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user1Dn ,
+ 'dsInstancePswd' : user1Pswd ,
+ 'dsBaseDN' : user1Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uid',
+ 'expected' : 0 }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check the search return nothing'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dn' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user1Dn ,
+ 'string2find' : staticGroup2Dn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Group StaticGroup Tests
+ #@TestName Group: Static: member: application search in group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: application search in group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ '++++ Application do a search on static group, should work'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : staticGroup2Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'member' }
+ </call>
+ <script>
+ STAXReason = STAXResult[0][1]
+ </script>
+ <!-- ******************** -->
+ <message>
+ '++++ Check ldapsearch result return 10 entries'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'member' ,
+ 'mainString' : STAXReason ,
+ 'nbExpected' : 10
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Group StaticGroup Tests
+ #@TestName Group: Static: member: application add user in group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: application add user in group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ '++++ Application add a new user %s / %s into the static group' % (user11Dn,user11Pswd)
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : staticGroup2Dn ,
+ 'changetype' : 'add' ,
+ 'attributeName' : 'member' ,
+ 'newAttributeValue' : user11Dn
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search users through the static group'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : staticGroup2Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'member' }
+ </call>
+ <script>
+ STAXCode = RC
+ ldapSearchResult = STAXResult[0][1]
+ </script>
+ <!-- ******************** -->
+ <message>
+ '++++ Check ldapsearch result return the new entry uid'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user11Dn ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check added user %s has no more privileges' % user11
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user11Dn ,
+ 'dsInstancePswd' : user11Pswd ,
+ 'dsBaseDN' : user11Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uid',
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search return nothing'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dn' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : staticGroup2Dn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: member: delete user entry belonging to the group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble previous testcase must be run before this one
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: delete user entry belonging to the group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <!-- ******************** -->
+ <message>
+ '++++ Application delete the user entry that belong to the static group'
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : user11Dn,
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search users through the static group'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : staticGroup2Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'member' }
+ </call>
+ <script>
+ STAXCode = RC
+ ldapSearchResult = STAXResult[0][1]
+ </script>
+ <!-- ******************** -->
+ <message>
+ '++++ Check ldapsearch result still return the deleted entry uid as referential integrity plugin is disabled'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user11Dn ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check ldapsearch result return 11 entries'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'member' ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 11
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Add the deleted entry'
+ </message>
+ <script>
+ listAttr = []
+ listAttr.append('uid:%s' % user11)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:person')
+ listAttr.append('objectclass:inetOrgPerson')
+ listAttr.append('cn:%s' % user11)
+ listAttr.append('sn:sn of user %s' % user11)
+ listAttr.append('description:this is the description of %s' % user11)
+ listAttr.append('userPassword:%s' % user11Pswd)
+ </script>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : user11Dn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : staticGroup2Dn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+ <!--- Test Case information
+ #@TestMarker Group StaticGroup Tests
+ #@TestName Group: Static: member: application delete user from group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: application delete user from group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ '++++ Application delete attribute member:%s from the static group' % user11
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : staticGroup2Dn ,
+ 'changetype' : 'delete' ,
+ 'attributeName' : 'member',
+ 'newAttributeValue' : user11Dn }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search users through the static group'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : staticGroup2Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'member' }
+ </call>
+ <script>
+ ldapSearchResult = STAXResult[0][1]
+ </script>
+ <!-- ******************** -->
+ <message>
+ '++++ Check ldapsearch result should not return the deleted group entry'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user11Dn ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ User %s should now be able to do search' % user11
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user11Dn ,
+ 'dsInstancePswd' : user11Pswd ,
+ 'dsBaseDN' : user11Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uid',
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search returns entry'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dn' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : staticGroup2Dn ,
+ 'nbExpected' : 0
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: member: delete all attributes in a static group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: delete all attributes in a static group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <!-- ******************** -->
+ <message>
+ '++++ Create a static group entry %s' % newStaticGroupDn
+ </message>
+ <script>
+ listAttr = []
+ listAttr.append('cn:%s' % newStaticGroup)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:groupofnames')
+ listAttr.append('description:this is the description of %s' % newStaticGroup)
+ listAttr.append('member:%s' % user1Dn)
+ listAttr.append('member:%s' % user2Dn)
+ listAttr.append('member:%s' % user11Dn)
+ </script>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : newStaticGroupDn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Delete all attributes of the group entry'
+ </message>
+ <script>
+ listAttr = []
+ listAttr.append('member:%s' % user1Dn)
+ listAttr.append('member:%s' % user2Dn)
+ listAttr.append('member:%s' % user11Dn)
+ </script>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : newStaticGroupDn ,
+ 'changetype' : 'delete' ,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Do a search on the group, should return no user entries'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'member' }
+ </call>
+ <script>
+ STAXCode = RC
+ ldapSearchResult = STAXResult[0][1]
+ </script>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'member' ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user1Dn ,
+ 'string2find' : staticGroup2Dn ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user1Dn ,
+ 'string2find' : newStaticGroupDn ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Delete the group entry created'
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+
+ <!--- Test Case information
+ #@TestMarker Group StaticGroup Tests
+ #@TestName Group: Static: member: enable referential integrity plugin
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: member: enable referential integrity plugin'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ referential integrity plugin not yet implemented in opendDS'
+ </message>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+
+
+
+ <!-- *********************************************** -->
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'group_cleanup'"> { 'stopDS' : True } </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_static_uniquemember.xml b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_static_uniquemember.xml
new file mode 100644
index 0000000..732b00e
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_static_uniquemember.xml
@@ -0,0 +1,767 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../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="main_staticgroup_uniquemember"/>
+
+ <function name="main_staticgroup_uniquemember">
+
+ <sequence>
+
+ <block name="'staticgroup_uniquemember'">
+
+ <sequence>
+
+ <script>
+ applicationDn='uid=my_application,dc=groups,dc=com'
+ applicationPswd='pw_my_application'
+ staticGroup1Dn='cn=my_staticgroup1,dc=groups,dc=com'
+ newStaticGroup='my_newStaticGroup'
+ newStaticGroupDn='cn=%s,dc=groups,dc=com' % (newStaticGroup)
+ newStaticGroupPswd='pw_%s' % (newStaticGroup)
+ user1='user_01'
+ user1Dn='uid=%s,ou=static,dc=groups,dc=com' % (user1)
+ user1Pswd='pw_01'
+ user2='user_02'
+ user2Dn='uid=%s,ou=static,dc=groups,dc=com' % (user2)
+ user2Pswd='pw_02'
+ user11='user_11'
+ user11Dn='uid=%s,ou=static,dc=groups,dc=com' % (user11)
+ user11Pswd='pw_11'
+
+ </script>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='groups'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <!--- Test Suite information
+ #@TestSuiteName Static group test suite
+ #@TestSuitePurpose Test this feature
+ #@TestSuiteID Groups Tests
+ #@TestSuiteGroup staticgroup
+ #@TestGroup Groups
+ #@TestScript group_static.xml
+ #@TestHTMLLink http://opends.dev.java.net/
+ -->
+
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_setup.xml' % (TESTS_DIR)"/>
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_lib.xml' % (TESTS_DIR)"/>
+
+ <call function="'group_setup'"> { 'startDS' : True } </call>
+
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: uniquemember: add a static group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: add a static group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <script>
+ listAttr = []
+ listAttr.append('cn:%s' % newStaticGroup)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:groupofuniquenames')
+ listAttr.append('description:this is the description of %s' % newStaticGroup)
+ listAttr.append('uniquemember:%s' % user11Dn)
+ </script>
+ <message>
+ '++++ Application add group entry %s' % newStaticGroup
+ </message>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : newStaticGroupDn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <message>
+ '++++ Application do a search to check the entry has been created'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uniquemember' }
+ </call>
+ <message>
+ '++++ Check the search return entry %s' % user11Dn
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user11Dn ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : newStaticGroupDn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: uniquemember: delete a static group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: delete a static group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Delete the group entry %s' % newStaticGroup
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn,
+ }
+ </call>
+ <message>
+ '++++ Check the group entry %s no more exist' % newStaticGroup
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uniquemember',
+ 'expected' : 32 }
+ </call>
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : newStaticGroupDn ,
+ 'nbExpected' : 0
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: uniquemember: ldapsearch out of the group
+ #@TestID search in group
+ #@TestPurpose user of group search members of its group
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: ldapsearch out of the group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ user %s, not member of the group, do a search, should pass' % user11
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user11Dn ,
+ 'dsInstancePswd' : user11Pswd ,
+ 'dsBaseDN' : user11Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uid',
+ 'expected' : 0 }
+ </call>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uid' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 2
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: uniquemember: ldapsearch through group
+ #@TestID search in group
+ #@TestPurpose user of group search members of its group
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: ldapsearch through group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ user %s, member of the group do a search, should be denied has group have no permission' % user1
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user1Dn ,
+ 'dsInstancePswd' : user1Pswd ,
+ 'dsBaseDN' : user1Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uid',
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search return nothing'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dn' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user1Dn ,
+ 'string2find' : staticGroup1Dn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Group StaticGroup Tests
+ #@TestName Group: Static: uniquemember: application search in group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: application search in group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ '++++ Application do a search on static group, should work'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : staticGroup1Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uniquemember' }
+ </call>
+ <script>
+ STAXReason = STAXResult[0][1]
+ </script>
+
+ <message>
+ '++++ Check ldapsearch result return 10 entries'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uniquemember' ,
+ 'mainString' : STAXReason ,
+ 'nbExpected' : 10
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Group StaticGroup Tests
+ #@TestName Group: Static: uniquemember: application add user in group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: application add user in group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ '++++ Application add a new user %s / %s into the static group' % (user11Dn,user11Pswd)
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : staticGroup1Dn ,
+ 'changetype' : 'add' ,
+ 'attributeName' : 'uniquemember' ,
+ 'newAttributeValue' : user11Dn
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search users through the static group'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : staticGroup1Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uniquemember' }
+ </call>
+ <script>
+ STAXCode = RC
+ ldapSearchResult = STAXResult[0][1]
+ </script>
+ <!-- ******************** -->
+ <message>
+ '++++ Check ldapsearch result return the new entry uid'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user11Dn ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check added user %s has no more privileges' % user11
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user11Dn ,
+ 'dsInstancePswd' : user11Pswd ,
+ 'dsBaseDN' : user11Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uid',
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search return nothing'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dn' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : staticGroup1Dn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: uniquemember: delete user entry belonging to the group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble previous testcase must be run before this one
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: delete user entry belonging to the group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <!-- ******************** -->
+ <message>
+ '++++ Application delete the user entry that belong to the static group'
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : user11Dn,
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search users through the static group'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : staticGroup1Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uniquemember' }
+ </call>
+ <script>
+ STAXCode = RC
+ ldapSearchResult = STAXResult[0][1]
+ </script>
+ <!-- ******************** -->
+ <message>
+ '++++ Check ldapsearch result still return the deleted entry uid as referential integrity plugin is disabled'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user11Dn ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check ldapsearch result return 11 entries'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uniquemember' ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 11
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Add the deleted entry'
+ </message>
+ <script>
+ listAttr = []
+ listAttr.append('uid:%s' % user11)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:person')
+ listAttr.append('objectclass:inetOrgPerson')
+ listAttr.append('cn:%s' % user11)
+ listAttr.append('sn:sn of user %s' % user11)
+ listAttr.append('description:this is the description of %s' % user11)
+ listAttr.append('userPassword:%s' % user11Pswd)
+ </script>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : user11Dn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : staticGroup1Dn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+ <!--- Test Case information
+ #@TestMarker Group StaticGroup Tests
+ #@TestName Group: Static: uniquemember: application delete user from group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: application delete user from group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <message>
+ '++++ Application delete attribute uniquemember:%s from the static group' % user11
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : staticGroup1Dn ,
+ 'changetype' : 'delete' ,
+ 'attributeName' : 'uniquemember',
+ 'newAttributeValue' : user11Dn }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search users through the static group'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : staticGroup1Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uniquemember' }
+ </call>
+ <script>
+ ldapSearchResult = STAXResult[0][1]
+ </script>
+ <!-- ******************** -->
+ <message>
+ '++++ Check ldapsearch result should not return the deleted group entry'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user11Dn ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ User %s should now be able to do search' % user11
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : user11Dn ,
+ 'dsInstancePswd' : user11Pswd ,
+ 'dsBaseDN' : user11Dn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uid',
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search returns entry'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dn' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user11Dn ,
+ 'string2find' : staticGroup1Dn ,
+ 'nbExpected' : 0
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+
+ <!--- Test Case information
+ #@TestMarker Static Group Tests
+ #@TestName Group: Static: uniquemember: delete all attributes in a static group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: delete all attributes in a static group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <!-- ******************** -->
+ <message>
+ '++++ Create a static group entry %s' % newStaticGroupDn
+ </message>
+ <script>
+ listAttr = []
+ listAttr.append('cn:%s' % newStaticGroup)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:groupofuniquenames')
+ listAttr.append('description:this is the description of %s' % newStaticGroup)
+ listAttr.append('uniquemember:%s' % user1Dn)
+ listAttr.append('uniquemember:%s' % user2Dn)
+ listAttr.append('uniquemember:%s' % user11Dn)
+ </script>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : newStaticGroupDn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Delete all attributes of the group entry'
+ </message>
+ <script>
+ listAttr = []
+ listAttr.append('uniquemember:%s' % user1Dn)
+ listAttr.append('uniquemember:%s' % user2Dn)
+ listAttr.append('uniquemember:%s' % user11Dn)
+ </script>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : newStaticGroupDn ,
+ 'changetype' : 'delete' ,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Do a search on the group, should return no user entries'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uniquemember' }
+ </call>
+ <script>
+ STAXCode = RC
+ ldapSearchResult = STAXResult[0][1]
+ </script>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uniquemember' ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user1Dn ,
+ 'string2find' : staticGroup1Dn ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user1Dn ,
+ 'string2find' : newStaticGroupDn ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Delete the group entry created'
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newStaticGroupDn
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+
+ <!--- Test Case information
+ #@TestMarker Group StaticGroup Tests
+ #@TestName Group: Static: uniquemember: enable referential integrity plugin
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Static: uniquemember: enable referential integrity plugin'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ referential integrity plugin not yet implemented in opendDS'
+ </message>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+
+
+
+ <!-- *********************************************** -->
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'group_cleanup'"> { 'stopDS' : True } </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_virtual_static.xml b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_virtual_static.xml
new file mode 100644
index 0000000..02378e6
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/group_virtual_static.xml
@@ -0,0 +1,744 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../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="main_virtualStaticGroup"/>
+
+ <function name="main_virtualStaticGroup">
+
+ <sequence>
+
+ <block name="'virtualStaticGroup'">
+
+ <sequence>
+
+ <script>
+ applicationDn='uid=my_application,dc=groups,dc=com'
+ applicationPswd='pw_my_application'
+ dynamicGroupDn='cn=my_dynamicgroup1,dc=groups,dc=com'
+ virtualStaticGroupDn='cn=my_virtualstaticgroup,dc=groups,dc=com'
+ newVirtualStaticGroup='my_newVirtualStaticGroup'
+ newVirtualStaticGroupDn='cn=%s,dc=groups,dc=com' % (newVirtualStaticGroup)
+ newVirtualStaticGroupPswd='pw_%s' % (newVirtualStaticGroup)
+ user2Add='user_22'
+ user2AddDn='uid=%s,ou=dynamic,dc=groups,dc=com' % (user2Add)
+ user2AddPswd='pw_22'
+ user2AddRenamed='%s_bis' % (user2Add)
+ user2AddRenamedDn='uid=%s,ou=dynamic,dc=groups,dc=com' % (user2AddRenamed)
+ </script>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='groups'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <!--- Test Suite information
+ #@TestSuiteName Group test suite
+ #@TestSuitePurpose Test this feature
+ #@TestSuiteID Groups Tests
+ #@TestSuiteGroup Virtual Static Group
+ #@TestGroup Virtual Static Group
+ #@TestScript group_virtual_static.xml
+ #@TestHTMLLink http://opends.dev.java.net/
+ -->
+
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_setup.xml' % (TESTS_DIR)"/>
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_lib.xml' % (TESTS_DIR)"/>
+
+ <call function="'group_setup'"> { 'startDS' : True } </call>
+
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: enable member virtual attribute
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: enable member virtual attribute'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : DIRECTORY_INSTANCE_DN ,
+ 'dsInstancePswd' : DIRECTORY_INSTANCE_PSWD ,
+ 'DNToModify' : 'cn=Virtual Static uniqueMember,cn=Virtual Attributes,cn=config' ,
+ 'changetype' : 'replace' ,
+ 'attributeName' : 'ds-cfg-allow-retrieving-membership' ,
+ 'newAttributeValue' : 'true'
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: add a Virtual Static group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: add a Virtual Static group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <script>
+ listAttr = []
+ listAttr.append('cn:%s' % newVirtualStaticGroup)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:groupOfUniqueNames')
+ listAttr.append('objectclass:ds-virtual-static-group')
+ listAttr.append('description:this is the description of %s' % newVirtualStaticGroup)
+ listAttr.append('ds-target-group-dn:%s' % virtualStaticGroupDn)
+
+ </script>
+ <message>
+ '++++ Application add group entry %s' % newVirtualStaticGroupDn
+ </message>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : newVirtualStaticGroupDn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application do a search to check the entry has been created'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newVirtualStaticGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'dsAttributes' : 'uniquemember' }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : 'uid=user_02,ou=dynamic,dc=groups,dc=com' ,
+ 'string2find' : newVirtualStaticGroupDn ,
+ 'nbExpected' : 1
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: delete a Virtual Static group entry
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: delete a Virtual Static group entry'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Delete the group entry %s' % newVirtualStaticGroupDn
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newVirtualStaticGroupDn,
+ }
+ </call>
+ <message>
+ '++++ Check the group entry %s no more exist' % newVirtualStaticGroup
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : newVirtualStaticGroupDn ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'expected' : 32 }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: search members of group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: search members of group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Search members of group %s' % virtualStaticGroupDn
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : virtualStaticGroupDn ,
+ 'dsFilter' : 'uniquemember=*' ,
+ 'expected' : 0 }
+ </call>
+ <script>
+ ldapSearchResult=STAXResult[0][1]
+ </script>
+ <!-- ******************** -->
+ <message>
+ '++++ Check uid=user_01,ou=dynamic,dc=groups,dc=com is NOT a group member'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uid=user_01,ou=dynamic,dc=groups,dc=com' ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 0
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check uid=user_02,ou=dynamic,dc=groups,dc=com is a group member'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uid=user_02,ou=dynamic,dc=groups,dc=com' ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Check uid=user_12,ou=dynamic,dc=groups,dc=com is a group member'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uid=user_12,ou=dynamic,dc=groups,dc=com' ,
+ 'mainString' : ldapSearchResult ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: application add entry that belong to a group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: application add entry that belong to a group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Application add a new user %s / %s ' % (user2AddDn,user2AddPswd)
+ </message>
+ <script>
+ listAttr = []
+ listAttr.append('uid:%s' % user2Add)
+ listAttr.append('objectclass:top')
+ listAttr.append('objectclass:person')
+ listAttr.append('objectclass:inetOrgPerson')
+ listAttr.append('cn:%s' % user2Add)
+ listAttr.append('sn:sn of user %s' % user2Add)
+ listAttr.append('description:this is the description of %s' % user2Add)
+ listAttr.append('userPassword:%s' % user2AddPswd)
+ </script>
+ <call function="'addAnEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToAdd' : user2AddDn,
+ 'listAttributes' : listAttr
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search the new user %s in the virtual static group entry (should be a member)' % user2Add
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : virtualStaticGroupDn ,
+ 'dsFilter' : 'uniquemember=*' ,
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search return the added user'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user2AddDn ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user2AddDn ,
+ 'string2find' : virtualStaticGroupDn ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: application rename entry that belong to a group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: application rename entry that belong to a group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Application rename %s into %s ' % (user2Add,user2AddRenamed)
+ </message>
+
+ <call function="'modifyDn'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : user2AddDn ,
+ 'newRDN' : user2AddRenamed,
+ 'deleteOldRDN' : 1 }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search the new user %s in the virtual static group entry (should be a member)' % user2Add
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : virtualStaticGroupDn ,
+ 'dsFilter' : 'uniquemember=*' ,
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search return the added user'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user2AddRenamedDn ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <!-- ******************** -->
+ <call function="'CheckIsMemberOf'">
+ { 'baseDn' : user2AddRenamedDn ,
+ 'string2find' : virtualStaticGroupDn ,
+ 'nbExpected' : 1
+ }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: application delete entry belonging to a group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: application delete entry belonging to a group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Application delete user %s' % user2Add
+ </message>
+ <call function="'DeleteEntry'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : user2AddDn
+ }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search the deleted user %s in the virtual static group entry (should not be in)' % user2Add
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : virtualStaticGroupDn ,
+ 'dsFilter' : 'uniquemember=*' ,
+ 'expected' : 0 }
+ </call>
+ <message>
+ '++++ Check the search return the added user'
+ </message>
+ <call function="'CheckMatches'">
+ { 'string2find' : user2AddDn ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 0
+ }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: Change ds-target-group-dn to another dynamic group
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: Change ds-target-group-dn to another dynamic group'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <script>
+ dynamicGroup2Dn='cn=my_dynamicgroup2,dc=groups,dc=com'
+ </script>
+ <message>
+ '++++ Application set a value %s to ds-target-group-dn attribute for group %s' % (dynamicGroup2Dn,virtualStaticGroupDn)
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : virtualStaticGroupDn ,
+ 'changetype' : 'replace' ,
+ 'attributeName' : 'ds-target-group-dn' ,
+ 'newAttributeValue' : dynamicGroup2Dn }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search users becoming to the updated virtual static group entry'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : virtualStaticGroupDn ,
+ 'dsFilter' : 'uniquemember=*' ,
+ 'expected' : 0 }
+ </call>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uid=user_03,ou=dynamic,dc=groups,dc=com' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1 }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application reset ds-target-group-dn attribute to default value %s' % (dynamicGroupDn)
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : virtualStaticGroupDn ,
+ 'changetype' : 'replace' ,
+ 'attributeName' : 'ds-target-group-dn' ,
+ 'newAttributeValue' : dynamicGroupDn }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: Change ds-target-group-dn to static group (member type)
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: Change ds-target-group-dn to static group (uniquemember type)'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <script>
+ staticGroupDn='cn=my_staticgroup1,dc=groups,dc=com'
+ </script>
+ <message>
+ '++++ Application set a value %s to ds-target-group-dn attribute for group %s' % (staticGroupDn,virtualStaticGroupDn)
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : virtualStaticGroupDn ,
+ 'changetype' : 'replace' ,
+ 'attributeName' : 'ds-target-group-dn' ,
+ 'newAttributeValue' : staticGroupDn }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search users becoming to the updated virtual static group entry'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : virtualStaticGroupDn ,
+ 'dsFilter' : 'uniquemember=*' ,
+ 'expected' : 0 }
+ </call>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uid=user_09,ou=static,dc=groups,dc=com' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1 }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application reset ds-target-group-dn attribute to default value %s' % (dynamicGroupDn)
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : virtualStaticGroupDn ,
+ 'changetype' : 'replace' ,
+ 'attributeName' : 'ds-target-group-dn' ,
+ 'newAttributeValue' : dynamicGroupDn }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: Change ds-target-group-dn to static group (member type)
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: Change ds-target-group-dn to static group (member type)'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <script>
+ staticGroupDn='cn=my_staticgroup2,dc=groups,dc=com'
+ </script>
+ <message>
+ '++++ Application set a value %s to ds-target-group-dn attribute for group %s' % (staticGroupDn,virtualStaticGroupDn)
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : virtualStaticGroupDn ,
+ 'changetype' : 'replace' ,
+ 'attributeName' : 'ds-target-group-dn' ,
+ 'newAttributeValue' : staticGroupDn }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application search users becoming to the updated virtual static group entry'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : virtualStaticGroupDn ,
+ 'dsFilter' : 'uniquemember=*' ,
+ 'expected' : 0 }
+ </call>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uid=user_09,ou=static,dc=groups,dc=com' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1 }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application reset ds-target-group-dn attribute to default value %s' % (dynamicGroupDn)
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : virtualStaticGroupDn ,
+ 'changetype' : 'replace' ,
+ 'attributeName' : 'ds-target-group-dn' ,
+ 'newAttributeValue' : dynamicGroupDn }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!--- Test Case information
+ #@TestMarker Virtual Static Group Tests
+ #@TestName Group: Virtual Static: Remove ds-target-group-dn attribute
+ #@TestID
+ #@TestPurpose
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+ <testcase name="'Group: Virtual Static: Remove ds-target-group-dn attribute'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '++++ Application remove ds-target-group-dn attribute'
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : virtualStaticGroupDn ,
+ 'changetype' : 'delete' ,
+ 'attributeName' : 'ds-target-group-dn' ,
+ 'newAttributeValue' : dynamicGroupDn ,
+ 'expectedErrorCode' : 65 }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Group should not be modified'
+ </message>
+ <call function="'ldapSearchWithScript'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'dsBaseDN' : virtualStaticGroupDn ,
+ 'dsFilter' : 'uniquemember=*' ,
+ 'expected' : 0 }
+ </call>
+ <call function="'CheckMatches'">
+ { 'string2find' : 'uid=user_02,ou=static,dc=groups,dc=com' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 1 }
+ </call>
+ <!-- ******************** -->
+ <message>
+ '++++ Application reset ds-target-group-dn attribute to default value %s' % (dynamicGroupDn)
+ </message>
+ <call function="'modifyAnAttribute'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : applicationDn ,
+ 'dsInstancePswd' : applicationPswd ,
+ 'DNToModify' : virtualStaticGroupDn ,
+ 'changetype' : 'add' ,
+ 'attributeName' : 'ds-target-group-dn' ,
+ 'newAttributeValue' : dynamicGroupDn }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+
+
+
+
+ <!-- *********************************************** -->
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'group_cleanup'"> { 'stopDS' : True } </call>
+
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/groups.xml b/opendj-sdk/opends/tests/functional-tests/testcases/groups/groups.xml
new file mode 100644
index 0000000..4613355
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/groups.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../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, exclude this CDDL HEADER in each
+ ! file and exclude 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="main_groups"/>
+
+ <function name="main_groups">
+
+ <sequence>
+
+ <block name="'groups'">
+
+ <sequence>
+
+ <script>
+ CurrentTestPath={}
+ envAlreadyLoaded='true'
+ CurrentTestPath['group']='groups'
+ </script>
+
+ <call function="'testGroup_Preamble'"/>
+<!--GA
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/mytest.xml' % (TESTS_DIR)"/>
+ <call function="'main_mytest'" />
+-->
+<!--GA
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_static_uniquemember.xml' % (TESTS_DIR)"/>
+ <call function="'main_staticgroup_uniquemember'" />
+
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_static_member.xml' % (TESTS_DIR)"/>
+ <call function="'main_staticgroup_member'" />
+
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_dynamic.xml' % (TESTS_DIR)"/>
+ <call function="'main_dynamicgroup'" />
+-->
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_virtual_static.xml' % (TESTS_DIR)"/>
+ <call function="'main_virtualStaticGroup'" />
+
+
+ <call function="'testGroup_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
diff --git a/opendj-sdk/opends/tests/functional-tests/testcases/groups/mytest.xml b/opendj-sdk/opends/tests/functional-tests/testcases/groups/mytest.xml
new file mode 100644
index 0000000..6b6f5b0
--- /dev/null
+++ b/opendj-sdk/opends/tests/functional-tests/testcases/groups/mytest.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE stax SYSTEM "../../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="main_mytest"/>
+
+ <function name="main_mytest">
+
+ <sequence>
+
+ <block name="'mytest'">
+
+ <sequence>
+
+ <script>
+ if not CurrentTestPath.has_key('group'):
+ CurrentTestPath['group']='groups'
+ CurrentTestPath['suite']=STAXCurrentBlock
+ </script>
+
+ <call function="'testSuite_Preamble'"/>
+
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_setup.xml' % (TESTS_DIR)"/>
+ <call function="'group_setup'"> { 'startDS' : True } </call>
+
+ <!--- Test Suite information
+ #@TestSuiteName Just a simple test
+ #@TestSuitePurpose Try some stuff to test the framework
+ #@TestSuiteID Groups Tests
+ #@TestSuiteGroup MyTest
+ #@TestGroup Groups
+ #@TestScript mytest.xml
+ #@TestHTMLLink http://opends.dev.java.net/
+ -->
+
+
+
+ <!--- Test Case information
+ #@TestMarker Group MyTest Tests
+ #@TestName Group: MyTest: hello world
+ #@TestID pouet
+ #@TestPurpose pouetpouet
+ #@TestPreamble
+ #@TestSteps
+ #@TestPostamble
+ #@TestResult
+ -->
+
+ <!-- *********************************************** -->
+ <testcase name="'Group: MyTest: hello world'">
+ <sequence>
+ <message>'------ aa RC = %s' % RC</message>
+ <call function="'testCase_Preamble'"/>
+ <message>'------ bb RC = %s' % RC</message>
+ <message log="1"> '------ Hello world log=1' </message>
+ <message> '------ Hello world nolog' </message>
+
+ <call function="'checktestRC'">
+ { 'returncode' : RC ,
+ 'result' : STAXResult }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!-- *********************************************** -->
+ <testcase name="'Group: MyTest: call shell cmd'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+ <message>
+ '------ do ls'
+ </message>
+
+ <process name="'just go into ds bin dir and run pwd cmd'">
+ <location>'%s' % STAF_REMOTE_HOSTNAME </location>
+ <!-- <command>'cd %s ; pwd' % dsBinPath</command> -->
+ <command>'pwd'</command>
+ <stderr mode="'stdout'"/>
+ <returnstdout/>
+ </process>
+
+ <call function="'checktestRC'">
+ { 'returncode' : RC ,
+ 'result' : STAXResult }
+ </call>
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+ <!-- *********************************************** -->
+ <testcase name="'Group: MyTest: do simple ldapsearch'">
+ <sequence>
+ <call function="'testCase_Preamble'"/>
+
+ <call function="'SearchObject'">
+ { 'dsInstanceHost' : DIRECTORY_INSTANCE_HOST ,
+ 'dsInstancePort' : DIRECTORY_INSTANCE_PORT ,
+ 'dsInstanceDn' : 'uid=scarter, ou=People, dc=example,dc=com' ,
+ 'dsInstancePswd' : 'sprain' ,
+ 'dsBaseDN' : 'uid=scarter, ou=People, dc=example,dc=com' ,
+ 'dsFilter' : 'objectclass=*' ,
+ 'extraParams' : '-s base' ,
+ 'attributes' : 'dn' }
+ </call>
+
+ <message>
+ '++++ %s' % (STAXResult[0][1])
+ </message>
+
+ <call function="'CheckMatches'">
+ { 'string2find' : 'dc' ,
+ 'mainString' : STAXResult[0][1] ,
+ 'nbExpected' : 2
+ }
+ </call>
+ <script>
+ STAXCode, STAXReason=STAXResult
+ </script>
+
+ <call function="'checktestRC'">
+ { 'returncode' : STAXCode ,
+ 'result' : STAXReason }
+ </call>
+
+ <call function="'testCase_Postamble'"/>
+ </sequence>
+ </testcase>
+
+
+ <!-- *********************************************** -->
+ <!--GA
+ <import machine="'%s' % (STAF_LOCAL_HOSTNAME)"
+ file="'%s/testcases/groups/group_cleanup.xml' % (TESTS_DIR)"/>
+ <call function="'group_cleanup'"> { 'stopDS' : False } </call>
+ -->
+ <call function="'testSuite_Postamble'"/>
+
+ </sequence>
+
+ </block>
+
+ </sequence>
+
+ </function>
+
+</stax>
--
Gitblit v1.10.0