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

Valery Kharseko
06.41.2024 fce07e7d0dba9f77cd7f24b2213bed81a999f4e5
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
109
110
111
112
113
114
/*
 * 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.openidentityplatform.opendj;
 
import org.forgerock.opendj.ldap.*;
import org.forgerock.opendj.ldap.requests.Requests;
import org.forgerock.opendj.ldap.requests.SearchRequest;
import org.forgerock.opendj.ldap.responses.SearchResultEntry;
import org.forgerock.opendj.ldif.ConnectionEntryReader;
import org.opends.server.DirectoryServerTestCase;
import org.opends.server.TestCaseUtils;
 
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
 
import static org.assertj.core.api.Assertions.assertThat;
 
@Test(sequential = true)
public class Issue84TestSuite extends DirectoryServerTestCase {
 
    @BeforeClass
    public void startServer() throws Exception {
        TestCaseUtils.startServer();
        TestCaseUtils.initializeTestBackend(true);
 
        TestCaseUtils.addEntries(
                "dn: ou=People,o=test",
                "objectClass: organizationalUnit",
                "objectClass: top",
                "ou: People",
                "",
                "dn: uid=user.1,ou=People,o=test",
                "objectClass: person",
                "objectClass: organizationalPerson",
                "objectClass: inetOrgPerson",
                "objectClass: top",
                "cn: Aaren Atp",
                "sn: Atp",
                "uid: user.1",
                "userPassword: password",
                "",
                "dn: ou=Services,o=test",
                "objectClass: organizationalUnit",
                "objectClass: top",
                "ou: Services",
                "aci: (version 3.0; acl \"Test ACI\"; deny (all) userdn =\"ldap:///uid=user.1,ou=People,o=test\";)",
                "",
                "dn: uid=service.1,ou=Services,o=test",
                "objectClass: top",
                "objectClass: account",
                "objectClass: simpleSecurityObject",
                "uid: service.1",
                "userPassword: password",
                ""
        );
    }
 
    Connection getConnection(final String user,final String password) throws LdapException {
        final LDAPConnectionFactory factory =new LDAPConnectionFactory("localhost", TestCaseUtils.getServerLdapPort());
        final Connection connection = factory.getConnection();
        connection.bind(user, password.toCharArray());
        assertThat(connection.isValid()).isTrue();
        return connection;
    }
 
    @Test
    public void test_user() throws LdapException {
        try(Connection connection=getConnection("uid=user.1,ou=People,o=test","password")){
            final SearchRequest request =Requests.newSearchRequest("ou=Services,o=test", SearchScope.WHOLE_SUBTREE,"(&)");
            System.out.println("---------------------------------------------------------------------------------------");
            System.out.println(request);
 
            final ConnectionEntryReader reader = connection.search(request);
            assertThat(reader.hasNext()).isFalse();
        }
    }
 
    @Test
    public void test_service() throws LdapException, SearchResultReferenceIOException {
        try(Connection connection=getConnection("uid=service.1,ou=Services,o=test","password")){
            final SearchRequest request =Requests.newSearchRequest("ou=Services,o=test", SearchScope.WHOLE_SUBTREE,"(&)");
            System.out.println("---------------------------------------------------------------------------------------");
            System.out.println(request);
 
            final ConnectionEntryReader reader = connection.search(request);
 
            assertThat(reader.hasNext()).isTrue();
            SearchResultEntry entry=reader.readEntry();
            System.out.println(entry);
            assertThat(entry).isNotNull();
            assertThat(entry.getName().toString()).isEqualTo("ou=Services,o=test");
 
            assertThat(reader.hasNext()).isTrue();
            entry=reader.readEntry();
            System.out.println(entry);
            assertThat(entry).isNotNull();
            assertThat(entry.getName().toString()).isEqualTo("uid=service.1,ou=Services,o=test");
        }
    }
}