From 3d8848801b06656f425b027d16219b026bbbb2a8 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 27 Sep 2013 22:20:48 +0000
Subject: [PATCH] Fix OPENDJ-1156 - NPE in ReferenceCountedObject after shutting down directory
---
opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ConnectionStateTest.java | 27 +++++++++++++++++++++++++++
1 files changed, 27 insertions(+), 0 deletions(-)
diff --git a/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ConnectionStateTest.java b/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ConnectionStateTest.java
index 18ef073..aa0053a 100644
--- a/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ConnectionStateTest.java
+++ b/opendj3/opendj-ldap-sdk/src/test/java/com/forgerock/opendj/ldap/ConnectionStateTest.java
@@ -29,6 +29,7 @@
import static org.forgerock.opendj.ldap.ErrorResultException.newErrorResult;
import static org.forgerock.opendj.ldap.responses.Responses.newGenericExtendedResult;
import static org.mockito.Matchers.same;
+import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -37,6 +38,8 @@
import org.forgerock.opendj.ldap.ErrorResultException;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.responses.ExtendedResult;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
import org.testng.annotations.Test;
/**
@@ -247,4 +250,28 @@
assertThat(state.isClosed()).isFalse();
assertThat(state.getConnectionError()).isNull();
}
+
+ /**
+ * Tests that reentrant close from error listener is handled.
+ */
+ @Test
+ public void testReentrantClose() {
+ final ConnectionState state = new ConnectionState();
+ final ConnectionEventListener listener1 = mock(ConnectionEventListener.class);
+ doAnswer(new Answer<Void>() {
+ public Void answer(InvocationOnMock invocation) {
+ state.notifyConnectionClosed();
+ return null;
+ }
+ }).when(listener1).handleConnectionError(false, ERROR);
+
+ state.addConnectionEventListener(listener1);
+ state.notifyConnectionError(false, ERROR);
+
+ assertThat(state.isValid()).isFalse();
+ assertThat(state.isClosed()).isTrue();
+ assertThat(state.getConnectionError()).isSameAs(ERROR);
+ verify(listener1).handleConnectionError(false, ERROR);
+ verify(listener1).handleConnectionClosed();
+ }
}
--
Gitblit v1.10.0