[java-shib-shared] branch maint-9.1 updated: Improve InMemoryDirectory.
Daniel Fisher
dfisher at vt.edu
Sat Jul 27 14:31:02 UTC 2024
This is an automated email from the git hooks/post-receive script.
dfisher pushed a commit to branch maint-9.1
in repository java-shib-shared.
View the commit online:
http://git.shibboleth.net/view/?p=java-shib-shared.git;a=commit;h=ff7f9d51483565768ac0347f7222de8eca984ba0
The following commit(s) were added to refs/heads/maint-9.1 by this push:
new ff7f9d51 Improve InMemoryDirectory.
ff7f9d51 is described below
commit ff7f9d51483565768ac0347f7222de8eca984ba0
Author: Daniel Fisher <dfisher at vt.edu>
AuthorDate: Sat Jul 27 10:24:05 2024 -0400
Improve InMemoryDirectory.
Add support for choosing an available port.
Add support for requiring authentication for search operations.
Add support for adding additional LDIF after start.
---
.../shared/testing/InMemoryDirectory.java | 69 ++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/shib-testing/src/main/java/net/shibboleth/shared/testing/InMemoryDirectory.java b/shib-testing/src/main/java/net/shibboleth/shared/testing/InMemoryDirectory.java
index 4f3abaa6..ab3f3521 100644
--- a/shib-testing/src/main/java/net/shibboleth/shared/testing/InMemoryDirectory.java
+++ b/shib-testing/src/main/java/net/shibboleth/shared/testing/InMemoryDirectory.java
@@ -42,7 +42,9 @@ import com.unboundid.ldap.sdk.Control;
import com.unboundid.ldap.sdk.DN;
import com.unboundid.ldap.sdk.LDAPException;
import com.unboundid.ldap.sdk.LDAPResult;
+import com.unboundid.ldap.sdk.OperationType;
import com.unboundid.ldap.sdk.ResultCode;
+import com.unboundid.ldif.LDIFException;
import com.unboundid.ldif.LDIFReader;
import com.unboundid.util.ssl.SSLUtil;
@@ -80,6 +82,23 @@ public class InMemoryDirectory {
public InMemoryDirectory(@ParameterName(name="baseDNs") @Nonnull final String[] baseDNs,
@ParameterName(name="ldif") @Nonnull final Resource ldif,
@ParameterName(name="port") @Positive final int port) {
+ this(baseDNs, ldif, port, false);
+ }
+
+ /**
+ * Constructor without STARTTLS support.
+ *
+ * @param baseDNs to use in the directory server
+ * @param ldif the LDIF resource to be imported
+ * @param port port to listen on
+ * @param requireAuthForSearch whether to require authentication in order to perform searches
+ *
+ * @throws RuntimeException if the in-memory directory cannot be created
+ */
+ public InMemoryDirectory(@ParameterName(name="baseDNs") @Nonnull final String[] baseDNs,
+ @ParameterName(name="ldif") @Nonnull final Resource ldif,
+ @ParameterName(name="port") @Positive final int port,
+ @ParameterName(name="requireAuthForSearch") final boolean requireAuthForSearch) {
Constraint.isNotNull(ldif, "LDIF resource cannot be null");
try {
final InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig(baseDNs);
@@ -94,6 +113,9 @@ public class InMemoryDirectory {
null);
config.setListenerConfigs(listenerConfig);
config.addAdditionalBindCredentials("cn=Directory Manager", "password");
+ if (requireAuthForSearch) {
+ config.setAuthenticationRequiredOperationTypes(OperationType.SEARCH);
+ }
addSuccessSaslBindHandlers(config);
directoryServer = new InMemoryDirectoryServer(config);
directoryServer.importFromLDIF(true, new LDIFReader(ldif.getInputStream()));
@@ -118,6 +140,27 @@ public class InMemoryDirectory {
@ParameterName(name="port") @Positive final int port,
@ParameterName(name="keystore") @Nonnull final Resource keystore,
@ParameterName(name="truststore") @Nonnull final Optional<Resource> truststore) {
+ this(baseDNs, ldif, port, false, keystore, truststore);
+ }
+
+ /**
+ * Constructor with STARTTLS support.
+ *
+ * @param baseDNs to use in the directory server
+ * @param ldif the LDIF resource to be imported
+ * @param port port to listen on
+ * @param requireAuthForSearch whether to require authentication in order to perform searches
+ * @param keystore to use for startTLS
+ * @param truststore to use for startTLS
+ *
+ * @throws RuntimeException if the in-memory directory cannot be created
+ */
+ public InMemoryDirectory(@ParameterName(name="baseDNs") @Nonnull final String[] baseDNs,
+ @ParameterName(name="ldif") @Nonnull final Resource ldif,
+ @ParameterName(name="port") @Positive final int port,
+ @ParameterName(name="requireAuthForSearch") final boolean requireAuthForSearch,
+ @ParameterName(name="keystore") @Nonnull final Resource keystore,
+ @ParameterName(name="truststore") @Nonnull final Optional<Resource> truststore) {
Constraint.isNotNull(ldif, "LDIF resource cannot be null");
try {
final InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig(baseDNs);
@@ -136,6 +179,9 @@ public class InMemoryDirectory {
sslUtil.createSSLSocketFactory());
config.setListenerConfigs(listenerConfig);
config.addAdditionalBindCredentials("cn=Directory Manager", "password");
+ if (requireAuthForSearch) {
+ config.setAuthenticationRequiredOperationTypes(OperationType.SEARCH);
+ }
addSuccessSaslBindHandlers(config);
directoryServer = new InMemoryDirectoryServer(config);
directoryServer.importFromLDIF(true, new LDIFReader(ldif.getInputStream()));
@@ -180,6 +226,20 @@ public class InMemoryDirectory {
});
}
+ /**
+ * Adds the supplied LDIF lines to the directory server.
+ *
+ * @param ldifLines to add
+ * @throws RuntimeException if an error occurs adding the LDIF
+ */
+ public void add(final String... ldifLines) {
+ try {
+ directoryServer.add(ldifLines);
+ } catch (LDIFException | LDAPException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
/**
* Returns the number of open sockets.
*
@@ -203,6 +263,15 @@ public class InMemoryDirectory {
log.info("In-memory directory server started");
}
+ /**
+ * Returns the port the server is listening on.
+ *
+ * @return port number
+ */
+ public int getListenPort() {
+ return directoryServer.getListenPort();
+ }
+
/**
* Stops the directory server. Note that in general resources should be configured so that LDAP connections are
* closed at the conclusion of a test method or test class.
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list