/*
|
* The contents of this file are subject to the terms of the Common Development and
|
* Distribution License (the License). You may not use this file except in compliance with the
|
* License.
|
*
|
* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
|
* specific language governing permission and limitations under the License.
|
*
|
* When distributing Covered Software, include this CDDL Header Notice in each file and include
|
* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
|
* Header, with the fields enclosed by brackets [] replaced by your own identifying
|
* information: "Portions Copyright [year] [name of copyright owner]".
|
*
|
* Copyright 2024 3A Systems, LLC.
|
*/
|
package org.opends.server.extensions;
|
|
import org.opends.server.TestCaseUtils;
|
import org.testng.annotations.BeforeClass;
|
import org.testng.annotations.Test;
|
|
import static org.testng.Assert.*;
|
|
/**
|
* A set of test cases for the governing structure rule virtual attribute
|
* provider.
|
*/
|
public class Issue425TestCase
|
extends ExtensionsTestCase
|
{
|
|
/**
|
* Ensures that the Directory Server is running.
|
*
|
* @throws Exception If an unexpected problem occurs.
|
*/
|
@BeforeClass
|
public void startServer()
|
throws Exception
|
{
|
TestCaseUtils.startServer();
|
TestCaseUtils.initializeTestBackend(true);
|
TestCaseUtils.clearBackend("userRoot", "dc=example,dc=com");
|
|
int resultCode = TestCaseUtils.applyModifications(true,
|
"dn: cn=schema",
|
"changetype: modify",
|
"add: nameForms",
|
"nameForms: ( 1.3.6.1.1.2.1\n" +
|
" NAME 'domainNameForm'\n" +
|
" OC domain\n" +
|
" MUST dc\n" +
|
" X-ORIGIN 'RFC2377' )",
|
"nameForms: ( 1.3.6.1.4.1.56521.999.2.7.2\n" +
|
" NAME 'ouForm'\n" +
|
" OC organizationalUnit\n" +
|
" MUST ou\n" +
|
" X-ORIGIN 'fake name form' )",
|
"-",
|
"add: ditStructureRules",
|
"dITStructureRules: ( 20\n" +
|
" NAME 'rootSuffixStructure'\n" +
|
" FORM domainNameForm )",
|
"dITStructureRules: ( 21\n" +
|
" NAME 'ouStructure'\n" +
|
" FORM ouForm\n" +
|
" SUP 20 )"
|
);
|
assertEquals(resultCode, 0);
|
}
|
|
@Test
|
public void test()
|
throws Exception {
|
TestCaseUtils.addEntry(
|
"dn: ou=Accounts,dc=example,dc=com",
|
"objectClass: organizationalunit",
|
"objectClass: top",
|
"ou: People"
|
);
|
//add OC subentry without DSR (warning level)
|
TestCaseUtils.addEntry(
|
"dn: cn=test-subentry,ou=Accounts,dc=example,dc=com",
|
"objectClass: top",
|
"objectClass: extensibleObject",
|
"objectClass: subentry",
|
"objectClass: collectiveAttributeSubentry",
|
"subtreeSpecification: {}",
|
"cn: test-subentry"
|
);
|
//add OC subentry without DSR (warning level)
|
TestCaseUtils.addEntry(
|
"dn: o=test-subentry2,ou=Accounts,dc=example,dc=com",
|
"objectClass: top",
|
"objectClass: extensibleObject",
|
"objectClass: subentry",
|
"objectClass: collectiveAttributeSubentry",
|
"subtreeSpecification: {}",
|
"cn: test-subentry2"
|
);
|
|
int resultCode = TestCaseUtils.applyModifications(true,
|
"dn: cn=schema",
|
"changetype: modify",
|
"add: nameForms",
|
"nameForms: ( 2.5.15.16\n"+
|
" NAME 'subentryNameForm'\n"+
|
" DESC 'X.501, cl. 14.2.2: the Subentry name form'\n"+
|
" OC subentry\n"+
|
" MUST cn )",
|
"-",
|
"add: ditStructureRules",
|
"dITStructureRules: ( 177\n"+
|
" NAME 'subentryStructure'\n"+
|
" FORM subentryNameForm\n"+
|
" SUP ( 20 21 ) )"
|
);
|
assertEquals(resultCode, 0);
|
|
//add OC subentry with DSR: RDN OC subentry MUST cn
|
TestCaseUtils.addEntry(
|
"dn: cn=test-subentry-ok,ou=Accounts,dc=example,dc=com",
|
"objectClass: top",
|
"objectClass: extensibleObject",
|
"objectClass: subentry",
|
"objectClass: collectiveAttributeSubentry",
|
"subtreeSpecification: {}",
|
"cn: test-subentry-ok"
|
);
|
|
//add OC subentry with DSR violation: RDN OC subentry MUST cn
|
assertThrows(new ThrowingRunnable() {
|
@Override
|
public void run() throws Throwable {
|
TestCaseUtils.addEntry(
|
"dn: o=test-subentry-error,ou=Accounts,dc=example,dc=com",
|
"objectClass: top",
|
"objectClass: extensibleObject",
|
"objectClass: subentry",
|
"objectClass: collectiveAttributeSubentry",
|
"subtreeSpecification: {}",
|
"cn: test-subentry-error"
|
);
|
}
|
}
|
);
|
}
|
}
|