mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Valery Kharseko
29.39.2025 c7e0a485e1c5f61a1496c3c5b3735bfdd67bc3b8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
 * 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.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.SearchScope;
import org.forgerock.opendj.server.config.meta.VirtualAttributeCfgDefn;
import org.opends.server.TestCaseUtils;
import org.opends.server.api.VirtualAttributeProvider;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.Entry;
import org.opends.server.types.SearchFilter;
import org.opends.server.types.VirtualAttributeRule;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
import java.util.Collections;
 
import static org.forgerock.opendj.ldap.schema.CoreSchema.getGoverningStructureRuleAttributeType;
import static org.testng.Assert.*;
 
/**
 * A set of test cases for the governing structure rule virtual attribute
 * provider.
 */
public class Issue387TestCase
       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.4.1.56521.999.8.1.7 NAME 'commonNameForm' DESC 'Name Form for a commonName orgRole structure' OC organizationalRole MUST cn )",
    "-",
    "add: ditStructureRules",
    "dITStructureRules: ( 150 NAME 'commonNameStructureRule'  FORM commonNameForm )",
    "dITStructureRules: ( 151 NAME 'commonNameSubStructureRule' FORM commonNameForm SUP 150 )"
    );
    assertEquals(resultCode, 0);
  }
 
    @Test
    public void test()
            throws Exception
    {
        GoverningStructureRuleVirtualAttributeProvider provider =
                new GoverningStructureRuleVirtualAttributeProvider();
 
        Entry entry = TestCaseUtils.addEntry(
                "dn: cn=first,dc=example,dc=com",
                "objectClass: top",
                "objectClass: organizationalRole"
                );
 
        entry.processVirtualAttributes();
        assertTrue(provider.hasValue(entry, getRule(provider), ByteString.valueOfUtf8("150")));
 
 
        entry = DirectoryServer.getEntry(DN.valueOf("dc=example,dc=com"));
        assertNotNull(entry);
        assertFalse(entry.hasAttribute(getGoverningStructureRuleAttributeType()));
 
        entry = TestCaseUtils.addEntry(
                "dn: cn=second,cn=first,dc=example,dc=com",
                "objectClass: top",
                "objectClass: organizationalRole"
        );
        entry.processVirtualAttributes();
        assertTrue(provider.hasValue(entry, getRule(provider), ByteString.valueOfUtf8("150")));
    }
 
    private VirtualAttributeRule getRule(VirtualAttributeProvider<?> provider)
    {
        return new VirtualAttributeRule(getGoverningStructureRuleAttributeType(), provider,
                Collections.<DN>emptySet(), SearchScope.WHOLE_SUBTREE,
                Collections.<DN>emptySet(),
                Collections.<SearchFilter>emptySet(),
                VirtualAttributeCfgDefn.ConflictBehavior.VIRTUAL_OVERRIDES_REAL);
    }
}