Skip to content

Commit 543e15a

Browse files
committed
code review
Closes spring-projects#938 Signed-off-by: emanueltrandafir1993 <[email protected]>
1 parent 8b1a1a0 commit 543e15a

File tree

8 files changed

+239
-306
lines changed

8 files changed

+239
-306
lines changed

modules/ROOT/pages/testing.adoc

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,7 @@ The following bean definition creates an embedded LDAP server:
109109
====
110110
[source,xml]
111111
----
112-
<bean id="embeddedAlso, `org.springframework.ldap.test.unboundid.LdapTestUtils` provide methods to programmatically work with an embedded LDAP server.
113-
Also, `org.springframework.ldap.test.unboundid.LdapTestUtils` provide methods to programmatically work with an embedded LDAP server.
114-
" class="org.springframework.ldap.test.EmbeddedLdapServerFactoryBean">
112+
<bean id="embeddedLdapServer" class="org.springframework.ldap.test.EmbeddedLdapServerFactoryBean">
115113
<property name="partitionName" value="example"/>
116114
<property name="partitionSuffix" value="dc=261consulting,dc=com" />
117115
<property name="port" value="9321" />
@@ -188,11 +186,10 @@ The following bean definition creates an embedded LDAP server:
188186
----
189187
@Bean
190188
EmbeddedLdapServer embeddedLdapServer() {
191-
return EmbeddedLdapServer.builder()
192-
.withPort(18881)
193-
.withPartitionName("jayway")
194-
.withPartitionSuffix("dc=jayway,dc=se")
195-
.withConfigurationCustomizer((config) -> config.setCodeLogDetails(tempLogFile, true))
189+
return EmbeddedLdapServer.withPartitionSuffix("dc=jayway,dc=se")
190+
.partitionName("jayway")
191+
.port(18881)
192+
.configurationCustomizer((config) -> config.setCodeLogDetails(tempLogFile, true))
196193
.build();
197194
}
198195
----

test-support/src/main/java/org/springframework/ldap/test/unboundid/EmbeddedLdapServer.java

Lines changed: 96 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.ldap.test.unboundid;
1818

19+
import java.util.function.Consumer;
20+
1921
import com.unboundid.ldap.listener.InMemoryDirectoryServer;
2022
import com.unboundid.ldap.listener.InMemoryDirectoryServerConfig;
2123
import com.unboundid.ldap.listener.InMemoryListenerConfig;
@@ -46,25 +48,29 @@ public EmbeddedLdapServer(InMemoryDirectoryServer directoryServer) {
4648
}
4749

4850
/**
49-
* Creates a new {@link EmbeddedLdapServerBuilder}.
51+
* Creates a new {@link Builder} with a given partition suffix.
5052
*
5153
* @since 3.3
5254
*/
53-
public static EmbeddedLdapServerBuilder builder() {
54-
return new EmbeddedLdapServerBuilder();
55+
public static Builder withPartitionSuffix(String partitionSuffix) {
56+
return new Builder(partitionSuffix);
5557
}
5658

5759
/**
5860
* Creates and starts new embedded LDAP server.
61+
* @deprecated Use the builder pattern exposed via
62+
* {@link #withPartitionSuffix(String)} instead.
5963
*/
64+
@Deprecated(since = "3.3")
6065
public static EmbeddedLdapServer newEmbeddedServer(String defaultPartitionName, String defaultPartitionSuffix,
61-
int port) throws Exception {
62-
InMemoryDirectoryServerConfig config = inMemoryDirectoryServerConfig(defaultPartitionSuffix, port);
63-
Entry entry = ldapEntry(defaultPartitionName, defaultPartitionSuffix);
64-
65-
InMemoryDirectoryServer directoryServer = inMemoryDirectoryServer(config, entry);
66-
directoryServer.startListening();
67-
return new EmbeddedLdapServer(directoryServer);
66+
int port) {
67+
EmbeddedLdapServer server = EmbeddedLdapServer.withPartitionSuffix(defaultPartitionSuffix)
68+
.partitionName(defaultPartitionName)
69+
.port(port)
70+
.build();
71+
72+
server.start();
73+
return server;
6874
}
6975

7076
/**
@@ -101,28 +107,88 @@ public void shutdown() {
101107
this.directoryServer.shutDown(true);
102108
}
103109

104-
static InMemoryDirectoryServerConfig inMemoryDirectoryServerConfig(String partitionSuffix, int port)
105-
throws LDAPException {
106-
InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig(partitionSuffix);
107-
config.addAdditionalBindCredentials("uid=admin,ou=system", "secret");
108-
config.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig("LDAP", port));
109-
config.setEnforceSingleStructuralObjectClass(false);
110-
config.setEnforceAttributeSyntaxCompliance(true);
111-
return config;
112-
}
110+
/**
111+
* Helper class for embedded Unboundid ldap server.
112+
*
113+
* @author Emanuel Trandafir
114+
* @since 3.3
115+
*/
116+
public static final class Builder {
113117

114-
static Entry ldapEntry(String defaultPartitionName, String defaultPartitionSuffix) throws LDAPException {
115-
Entry entry = new Entry(new DN(defaultPartitionSuffix));
116-
entry.addAttribute("objectClass", "top", "domain", "extensibleObject");
117-
entry.addAttribute("dc", defaultPartitionName);
118-
return entry;
119-
}
118+
private int port = 0;
119+
120+
private Consumer<InMemoryDirectoryServerConfig> configurationCustomizer = (__) -> {
121+
};
122+
123+
private String partitionName = "jayway";
124+
125+
private final String partitionSuffix;
126+
127+
private Builder(String partitionSuffix) {
128+
this.partitionSuffix = partitionSuffix;
129+
}
130+
131+
public Builder port(int port) {
132+
this.port = port;
133+
return this;
134+
}
135+
136+
public Builder configurationCustomizer(Consumer<InMemoryDirectoryServerConfig> configurationCustomizer) {
137+
this.configurationCustomizer = configurationCustomizer;
138+
return this;
139+
}
140+
141+
public Builder partitionName(String defaultPartitionName) {
142+
this.partitionName = defaultPartitionName;
143+
return this;
144+
}
145+
146+
/**
147+
* Builds and returns a {@link EmbeddedLdapServer}.
148+
* <p>
149+
* In order to start the server, you should call
150+
* {@link EmbeddedLdapServer#start()}.
151+
* @return a new {@link EmbeddedLdapServer}.
152+
*/
153+
public EmbeddedLdapServer build() {
154+
try {
155+
InMemoryDirectoryServerConfig config = inMemoryDirectoryServerConfig(this.partitionSuffix, this.port);
156+
this.configurationCustomizer.accept(config);
157+
158+
Entry entry = ldapEntry(this.partitionName, this.partitionSuffix);
159+
InMemoryDirectoryServer directoryServer = inMemoryDirectoryServer(config, entry);
160+
return new EmbeddedLdapServer(directoryServer);
161+
}
162+
catch (Exception ex) {
163+
throw new RuntimeException(ex);
164+
}
165+
}
166+
167+
private static InMemoryDirectoryServerConfig inMemoryDirectoryServerConfig(String partitionSuffix, int port)
168+
throws LDAPException {
169+
InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig(partitionSuffix);
170+
config.addAdditionalBindCredentials("uid=admin,ou=system", "secret");
171+
config.setListenerConfigs(InMemoryListenerConfig.createLDAPConfig("LDAP", port));
172+
config.setEnforceSingleStructuralObjectClass(false);
173+
config.setEnforceAttributeSyntaxCompliance(true);
174+
return config;
175+
}
176+
177+
private static Entry ldapEntry(String defaultPartitionName, String defaultPartitionSuffix)
178+
throws LDAPException {
179+
Entry entry = new Entry(new DN(defaultPartitionSuffix));
180+
entry.addAttribute("objectClass", "top", "domain", "extensibleObject");
181+
entry.addAttribute("dc", defaultPartitionName);
182+
return entry;
183+
}
184+
185+
private static InMemoryDirectoryServer inMemoryDirectoryServer(InMemoryDirectoryServerConfig config,
186+
Entry entry) throws LDAPException {
187+
InMemoryDirectoryServer directoryServer = new InMemoryDirectoryServer(config);
188+
directoryServer.add(entry);
189+
return directoryServer;
190+
}
120191

121-
static InMemoryDirectoryServer inMemoryDirectoryServer(InMemoryDirectoryServerConfig config, Entry entry)
122-
throws LDAPException {
123-
InMemoryDirectoryServer directoryServer = new InMemoryDirectoryServer(config);
124-
directoryServer.add(entry);
125-
return directoryServer;
126192
}
127193

128194
}

test-support/src/main/java/org/springframework/ldap/test/unboundid/EmbeddedLdapServerBuilder.java

Lines changed: 0 additions & 87 deletions
This file was deleted.

test-support/src/main/java/org/springframework/ldap/test/unboundid/EmbeddedLdapServerFactoryBean.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,14 @@ public void setPort(int port) {
4747
}
4848

4949
@Override
50-
protected EmbeddedLdapServer createInstance() throws Exception {
51-
return EmbeddedLdapServer.newEmbeddedServer(this.partitionName, this.partitionSuffix, this.port);
50+
protected EmbeddedLdapServer createInstance() {
51+
EmbeddedLdapServer server = EmbeddedLdapServer.withPartitionSuffix(this.partitionSuffix)
52+
.partitionName(this.partitionName)
53+
.port(this.port)
54+
.build();
55+
56+
server.start();
57+
return server;
5258
}
5359

5460
@Override

test-support/src/main/java/org/springframework/ldap/test/unboundid/LdapTestUtils.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,12 @@ public static void startEmbeddedServer(int port, String defaultPartitionSuffix,
7878
}
7979

8080
try {
81-
embeddedServer = EmbeddedLdapServer.newEmbeddedServer(defaultPartitionName, defaultPartitionSuffix, port);
81+
embeddedServer = EmbeddedLdapServer.withPartitionSuffix(defaultPartitionSuffix)
82+
.partitionName(defaultPartitionName)
83+
.port(port)
84+
.build();
85+
86+
embeddedServer.start();
8287
}
8388
catch (Exception ex) {
8489
throw new UncategorizedLdapException("Failed to start embedded server", ex);

0 commit comments

Comments
 (0)