From d4e26864d99b409199a904b24713bdb43cad4898 Mon Sep 17 00:00:00 2001 From: Rob Winch Date: Wed, 21 May 2014 06:49:00 -0500 Subject: [PATCH] SEC-2606: ApacheDSServerIntegrationTests scan for available port --- .../ldap/AbstractLdapIntegrationTests.java | 3 +- .../ldap/ApacheDSServerIntegrationTests.java | 29 ++++++++++++++++++- ...faultSpringSecurityContextSourceTests.java | 2 +- .../SpringSecurityLdapTemplateITests.java | 2 +- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/AbstractLdapIntegrationTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/AbstractLdapIntegrationTests.java index 7f94198227..79b32f6346 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/AbstractLdapIntegrationTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/AbstractLdapIntegrationTests.java @@ -25,7 +25,8 @@ public abstract class AbstractLdapIntegrationTests { @BeforeClass public static void createContextSource() throws Exception { - contextSource = new DefaultSpringSecurityContextSource("ldap://127.0.0.1:53389/dc=springframework,dc=org"); + int serverPort = ApacheDSServerIntegrationTests.getServerPort(); + contextSource = new DefaultSpringSecurityContextSource("ldap://127.0.0.1:" + serverPort + "/dc=springframework,dc=org"); // OpenLDAP configuration // contextSource = new DefaultSpringSecurityContextSource("ldap://127.0.0.1:22389/dc=springsource,dc=com"); // contextSource.setUserDn("cn=admin,dc=springsource,dc=com"); diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/ApacheDSServerIntegrationTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/ApacheDSServerIntegrationTests.java index 14cce12bff..d5e9ae5aed 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/ApacheDSServerIntegrationTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/ApacheDSServerIntegrationTests.java @@ -1,5 +1,8 @@ package org.springframework.security.ldap; +import java.io.IOException; +import java.net.ServerSocket; + import org.junit.*; import org.junit.runner.RunWith; import org.junit.runners.Suite; @@ -26,6 +29,7 @@ import org.springframework.security.ldap.userdetails.LdapUserDetailsManagerTests ) public final class ApacheDSServerIntegrationTests { private static ApacheDSContainer server; + private static Integer serverPort; @BeforeClass public static void startServer() throws Exception { @@ -34,12 +38,15 @@ public final class ApacheDSServerIntegrationTests { // contextSource.setUserDn("cn=admin,dc=springsource,dc=com"); // contextSource.setPassword("password"); server = new ApacheDSContainer("dc=springframework,dc=org", "classpath:test-server.ldif"); - server.setPort(53389); + int port = getAvailablePort(); + server.setPort(port); server.afterPropertiesSet(); + serverPort = port; } @AfterClass public static void stopServer() throws Exception { + serverPort = null; if (server != null) { server.stop(); } @@ -53,6 +60,12 @@ public final class ApacheDSServerIntegrationTests { server.afterPropertiesSet(); } + public static int getServerPort() { + if(serverPort == null) { + throw new IllegalStateException("The ApacheDSContainer is not currently running"); + } + return serverPort; + } /* @After public final void reloadServerDataIfDirty() throws Exception { @@ -105,4 +118,18 @@ public final class ApacheDSServerIntegrationTests { } } */ + + private static int getAvailablePort() throws IOException { + ServerSocket serverSocket = null; + try { + serverSocket = new ServerSocket(0); + return serverSocket.getLocalPort(); + } finally { + if(serverSocket != null) { + try { + serverSocket.close(); + } catch (IOException e) {} + } + } + } } diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/DefaultSpringSecurityContextSourceTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/DefaultSpringSecurityContextSourceTests.java index 0661de7a47..ba02e0f94a 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/DefaultSpringSecurityContextSourceTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/DefaultSpringSecurityContextSourceTests.java @@ -71,7 +71,7 @@ public class DefaultSpringSecurityContextSourceTests extends AbstractLdapIntegra @Test public void serverUrlWithSpacesIsSupported() throws Exception { DefaultSpringSecurityContextSource - contextSource = new DefaultSpringSecurityContextSource("ldap://127.0.0.1:53389/ou=space%20cadets,dc=springframework,dc=org"); + contextSource = new DefaultSpringSecurityContextSource("ldap://127.0.0.1:" + ApacheDSServerIntegrationTests.getServerPort() + "/ou=space%20cadets,dc=springframework,dc=org"); contextSource.afterPropertiesSet(); contextSource.getContext("uid=space cadet,ou=space cadets,dc=springframework,dc=org", "spacecadetspassword"); } diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/SpringSecurityLdapTemplateITests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/SpringSecurityLdapTemplateITests.java index 97f858435a..3cc2d51614 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/SpringSecurityLdapTemplateITests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/SpringSecurityLdapTemplateITests.java @@ -121,7 +121,7 @@ public class SpringSecurityLdapTemplateITests extends AbstractLdapIntegrationTes public void nonSpringLdapSearchCodeTestMethod() throws Exception { java.util.Hashtable env = new java.util.Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); - env.put(Context.PROVIDER_URL, "ldap://localhost:53389"); + env.put(Context.PROVIDER_URL, "ldap://localhost:" + ApacheDSServerIntegrationTests.getServerPort()); env.put(Context.SECURITY_PRINCIPAL, ""); env.put(Context.SECURITY_CREDENTIALS, "");