You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2018/07/17 00:35:21 UTC
[1/2] activemq-artemis git commit: ARTEMIS-1971 make LDAP pooling
test more robust
Repository: activemq-artemis
Updated Branches:
refs/heads/master 2748ef025 -> eda38ccf8
ARTEMIS-1971 make LDAP pooling test more robust
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/fbdd6fe0
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/fbdd6fe0
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/fbdd6fe0
Branch: refs/heads/master
Commit: fbdd6fe0adb65863bfc82202df143ba77d7812f6
Parents: 2748ef0
Author: Justin Bertram <jb...@apache.org>
Authored: Mon Jul 16 14:34:44 2018 -0500
Committer: Clebert Suconic <cl...@apache.org>
Committed: Mon Jul 16 20:34:46 2018 -0400
----------------------------------------------------------------------
.../core/security/jaas/LDAPLoginModuleTest.java | 114 ++++++++-----------
1 file changed, 45 insertions(+), 69 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/fbdd6fe0/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java
index d28bd4c..47bedd9 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/LDAPLoginModuleTest.java
@@ -115,7 +115,7 @@ public class LDAPLoginModuleTest extends AbstractLdapTestUnit {
}
@Test
- public void testLogin() throws LoginException {
+ public void testLogin() throws Exception {
logger.info("num session: " + ldapServer.getLdapSessionManager().getSessions().length);
LoginContext context = new LoginContext("LDAPLogin", new CallbackHandler() {
@@ -135,100 +135,76 @@ public class LDAPLoginModuleTest extends AbstractLdapTestUnit {
context.login();
context.logout();
- assertTrue("no sessions after logout", waitForSessions(0));
+ assertTrue("sessions still active after logout", waitFor(() -> ldapServer.getLdapSessionManager().getSessions().length == 0));
}
@Test
- public void testLoginPooled() throws LoginException {
-
- LoginContext context = new LoginContext("LDAPLoginPooled", new CallbackHandler() {
- @Override
- public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
- for (int i = 0; i < callbacks.length; i++) {
- if (callbacks[i] instanceof NameCallback) {
- ((NameCallback) callbacks[i]).setName("first");
- } else if (callbacks[i] instanceof PasswordCallback) {
- ((PasswordCallback) callbacks[i]).setPassword("secret".toCharArray());
- } else {
- throw new UnsupportedCallbackException(callbacks[i]);
- }
+ public void testLoginPooled() throws Exception {
+ CallbackHandler callbackHandler = callbacks -> {
+ for (int i = 0; i < callbacks.length; i++) {
+ if (callbacks[i] instanceof NameCallback) {
+ ((NameCallback) callbacks[i]).setName("first");
+ } else if (callbacks[i] instanceof PasswordCallback) {
+ ((PasswordCallback) callbacks[i]).setPassword("secret".toCharArray());
+ } else {
+ throw new UnsupportedCallbackException(callbacks[i]);
}
}
- });
+ };
+
+ LoginContext context = new LoginContext("LDAPLoginPooled", callbackHandler);
context.login();
context.logout();
// again
-
context.login();
context.logout();
// new context
- context = new LoginContext("LDAPLoginPooled", new CallbackHandler() {
- @Override
- public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
- for (int i = 0; i < callbacks.length; i++) {
- if (callbacks[i] instanceof NameCallback) {
- ((NameCallback) callbacks[i]).setName("first");
- } else if (callbacks[i] instanceof PasswordCallback) {
- ((PasswordCallback) callbacks[i]).setPassword("secret".toCharArray());
- } else {
- throw new UnsupportedCallbackException(callbacks[i]);
- }
- }
- }
- });
+ context = new LoginContext("LDAPLoginPooled", callbackHandler);
context.login();
context.logout();
Executor pool = Executors.newCachedThreadPool();
- for (int i = 0; i < 10; i++) {
- ((ExecutorService) pool).execute(new Runnable() {
- @Override
- public void run() {
- try {
- LoginContext context = new LoginContext("LDAPLoginPooled", new CallbackHandler() {
- @Override
- public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
- for (int i = 0; i < callbacks.length; i++) {
- if (callbacks[i] instanceof NameCallback) {
- ((NameCallback) callbacks[i]).setName("first");
- } else if (callbacks[i] instanceof PasswordCallback) {
- ((PasswordCallback) callbacks[i]).setPassword("secret".toCharArray());
- } else {
- throw new UnsupportedCallbackException(callbacks[i]);
- }
- }
- }
- });
- context.login();
- context.logout();
- } catch (Exception ignored) {
- }
+ for (int i = 0; i < 20; i++) {
+ pool.execute(() -> {
+ try {
+ LoginContext context1 = new LoginContext("LDAPLoginPooled", callbackHandler);
+ context1.login();
+ context1.logout();
+ } catch (Exception ignored) {
}
});
}
- assertTrue("no sessions after logout", waitForSessions(10));
+
+ /*
+ * The number of sessions here is variable due to the pool used to create the LoginContext objects and the pooling
+ * for the LDAP connections (which are managed by the JVM implementation). We really just need to confirm that
+ * there are still connections to the LDAP server open even after all the LoginContext objects are closed as that
+ * will indicate the LDAP connection pooling is working.
+ */
+ assertTrue("not enough active sessions after logout", waitFor(() -> ldapServer.getLdapSessionManager().getSessions().length >= 5));
+
+ ((ExecutorService) pool).shutdown();
+ ((ExecutorService) pool).awaitTermination(2, TimeUnit.SECONDS);
}
- private boolean waitForSessions(int expected) {
- final long expiry = System.currentTimeMillis() + 5000;
- int numSession = ldapServer.getLdapSessionManager().getSessions().length;
- while (numSession != expected && System.currentTimeMillis() < expiry) {
- try {
- TimeUnit.MILLISECONDS.sleep(100);
- } catch (InterruptedException ok) {
- break;
- }
- numSession = ldapServer.getLdapSessionManager().getSessions().length;
- logger.info("num session " + numSession);
+ public interface Condition {
+ boolean isSatisfied() throws Exception;
+ }
+ private boolean waitFor(final Condition condition) throws Exception {
+ final long expiry = System.currentTimeMillis() + 5000;
+ boolean conditionSatisified = condition.isSatisfied();
+ while (!conditionSatisified && System.currentTimeMillis() < expiry) {
+ TimeUnit.MILLISECONDS.sleep(100);
+ conditionSatisified = condition.isSatisfied();
}
- return numSession == expected;
+ return conditionSatisified;
}
@Test
- public void testUnauthenticated() throws LoginException {
+ public void testUnauthenticated() throws Exception {
LoginContext context = new LoginContext("UnAuthenticatedLDAPLogin", new CallbackHandler() {
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
@@ -250,7 +226,7 @@ public class LDAPLoginModuleTest extends AbstractLdapTestUnit {
return;
}
fail("Should have failed authenticating");
- assertTrue("no sessions after logout", waitForSessions(0));
+ assertTrue("sessions still active after logout", waitFor(() -> ldapServer.getLdapSessionManager().getSessions().length == 0));
}
@Test
[2/2] activemq-artemis git commit: This closes #2183
Posted by cl...@apache.org.
This closes #2183
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/eda38ccf
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/eda38ccf
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/eda38ccf
Branch: refs/heads/master
Commit: eda38ccf8934c7ea29ec1a9dc5077d290a270a26
Parents: 2748ef0 fbdd6fe
Author: Clebert Suconic <cl...@apache.org>
Authored: Mon Jul 16 20:35:13 2018 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Mon Jul 16 20:35:13 2018 -0400
----------------------------------------------------------------------
.../core/security/jaas/LDAPLoginModuleTest.java | 114 ++++++++-----------
1 file changed, 45 insertions(+), 69 deletions(-)
----------------------------------------------------------------------