/* * 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.embedded; import org.forgerock.opendj.ldap.Connection; import org.forgerock.opendj.ldap.LDAPConnectionFactory; import org.forgerock.opendj.ldap.SearchScope; import org.forgerock.opendj.ldap.requests.Requests; import org.forgerock.opendj.ldap.requests.SearchRequest; import org.forgerock.opendj.ldap.responses.BindResult; import org.forgerock.opendj.ldap.responses.SearchResultEntry; import org.forgerock.opendj.ldif.ConnectionEntryReader; import org.testng.annotations.Test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStream; import java.net.URI; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; public class EmbeddedOpenDJTest { @Test public void testOpenDJ() throws Exception { //set custom configuration Config config = new Config(); //load custom schema from resource URI schemaUri = getClass().getClassLoader().getResource("opendj/99-users.ldif").toURI(); config.setLdifSchema(new File(schemaUri).toString()); //start embedded OpenDJ server EmbeddedOpenDJ embeddedOpenDJ = new EmbeddedOpenDJ(config); embeddedOpenDJ.run(); assertTrue(embeddedOpenDJ.isRunning()); //import ldif data from an input stream URI resUri = getClass().getClassLoader().getResource("opendj/data.ldif").toURI(); byte[] bytes = Files.readAllBytes(Paths.get(resUri)); String newBytes = new String(bytes); InputStream is = new ByteArrayInputStream(newBytes.getBytes(StandardCharsets.UTF_8)); embeddedOpenDJ.importData(is); //export OpenDJ data ByteArrayOutputStream bos = new ByteArrayOutputStream(); embeddedOpenDJ.getData("dc=openidentityplatform,dc=org", bos); String imported = bos.toString(); assertTrue(imported.contains("dn: uid=jdoe,ou=people,dc=openidentityplatform,dc=org")); //test search in the imported data try(LDAPConnectionFactory factory = new LDAPConnectionFactory("localhost", 1389); Connection connection = factory.getConnection()) { BindResult result = connection.bind("cn=Directory Manager", "passw0rd".toCharArray()); assertTrue(result.isSuccess()); SearchRequest request = Requests.newSearchRequest("dc=openidentityplatform,dc=org", SearchScope.WHOLE_SUBTREE, "(uid=jdoe)", "uid"); ConnectionEntryReader reader = connection.search(request); SearchResultEntry entry = reader.readEntry(); entry.getAllAttributes(); } //stop OpenDJ embeddedOpenDJ.close(); assertFalse(embeddedOpenDJ.isRunning()); } }