*/
package org.opendaylight.controller.cluster.access.client;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verify;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.testkit.TestProbe;
import java.util.concurrent.ThreadLocalRandom;
-import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.opendaylight.controller.cluster.access.ABIVersion;
import org.opendaylight.controller.cluster.access.concepts.AbstractRequestFailureProxy;
import org.opendaylight.controller.cluster.access.concepts.AbstractRequestProxy;
import org.opendaylight.controller.cluster.access.concepts.Request;
-import org.opendaylight.controller.cluster.access.concepts.RequestEnvelope;
import org.opendaylight.controller.cluster.access.concepts.RequestException;
import org.opendaylight.controller.cluster.access.concepts.RequestFailure;
import org.opendaylight.controller.cluster.access.concepts.Response;
import org.opendaylight.controller.cluster.common.actor.TestTicker;
import org.opendaylight.yangtools.concepts.WritableIdentifier;
-import scala.concurrent.duration.Duration;
/**
- * Test suite covering logic contained in {@link SequencedQueueEntry}.
+ * Test suite covering logic contained in {@link ConnectionEntry}.
*
* @author Robert Varga
*/
-public class SequencedQueueEntryTest {
+public class ConnectionEntryTest {
private static class MockFailure extends RequestFailure<WritableIdentifier, MockFailure> {
private static final long serialVersionUID = 1L;
@Mock
private RequestException mockCause;
@Mock
- private RequestCallback mockCallback;
+ private Consumer<Response<?, ?>> mockCallback;
@Mock
- private ClientActorBehavior mockBehavior;
+ private ClientActorBehavior<?> mockBehavior;
private TestTicker ticker;
- private BackendInfo mockBackendInfo;
private Request<WritableIdentifier, ?> mockRequest;
private Response<WritableIdentifier, ?> mockResponse;
private static ActorSystem actorSystem;
private TestProbe mockActor;
- private SequencedQueueEntry entry;
+ private ConnectionEntry entry;
@BeforeClass
public static void setupClass() {
public void setup() {
MockitoAnnotations.initMocks(this);
- doReturn(mockBehavior).when(mockCallback).complete(any(MockFailure.class));
+ doNothing().when(mockCallback).accept(any(MockFailure.class));
ticker = new TestTicker();
ticker.increment(ThreadLocalRandom.current().nextLong());
mockActor = TestProbe.apply(actorSystem);
- mockBackendInfo = new BackendInfo(mockActor.ref(), 0, ABIVersion.current(), 5);
mockRequest = new MockRequest(mockIdentifier, mockReplyTo);
mockResponse = mockRequest.toRequestFailure(mockCause);
- entry = new SequencedQueueEntry(mockRequest, mockCallback, ticker.read());
+ entry = new ConnectionEntry(mockRequest, mockCallback, ticker.read());
}
@After
actorSystem.stop(mockActor.ref());
}
- @Test
- public void testGetTxDetails() {
- assertNull(entry.getTxDetails());
- entry.retransmit(mockBackendInfo, 0, ticker.read());
- assertEquals(0, entry.getTxDetails().getTxSequence());
- entry.retransmit(mockBackendInfo, 1, ticker.read());
- assertEquals(1, entry.getTxDetails().getTxSequence());
- entry.retransmit(mockBackendInfo, 3, ticker.read());
- assertEquals(3, entry.getTxDetails().getTxSequence());
- }
-
@Test
public void testComplete() {
entry.complete(mockResponse);
- verify(mockCallback).complete(mockResponse);
- }
-
- @Test
- public void testPoison() {
- entry.poison(mockCause);
-
- final ArgumentCaptor<MockFailure> captor = ArgumentCaptor.forClass(MockFailure.class);
- verify(mockCallback).complete(captor.capture());
- assertSame(mockCause, captor.getValue().getCause());
- }
-
- @Test
- public void testIsTimedOut() {
- assertTrue(entry.isTimedOut(ticker.read(), 0));
- assertFalse(entry.isTimedOut(ticker.read(), 1));
-
- entry.retransmit(mockBackendInfo, 0, ticker.read());
- assertTrue(entry.isTimedOut(ticker.read(), 0));
- ticker.increment(10);
- assertTrue(entry.isTimedOut(ticker.read(), 10));
- assertFalse(entry.isTimedOut(ticker.read(), 20));
-
- entry.retransmit(mockBackendInfo, 1, ticker.read());
- assertTrue(entry.isTimedOut(ticker.read(), 0));
- ticker.increment(10);
- assertTrue(entry.isTimedOut(ticker.read(), 10));
- assertFalse(entry.isTimedOut(ticker.read(), 11));
- }
-
- @Test
- public void testRetransmit() {
- assertFalse(mockActor.msgAvailable());
- entry.retransmit(mockBackendInfo, 0, ticker.read());
-
- assertTrue(mockActor.msgAvailable());
- assertRequestEquals(mockRequest, mockActor.receiveOne(Duration.apply(5, TimeUnit.SECONDS)));
- }
-
- private static void assertRequestEquals(final Request<?, ?> expected, final Object obj) {
- assertTrue(obj instanceof RequestEnvelope);
-
- final RequestEnvelope actual = (RequestEnvelope) obj;
- assertEquals(0, actual.getSessionId());
- assertEquals(0, actual.getTxSequence());
- assertEquals(expected.getTarget(), actual.getMessage().getTarget());
+ verify(mockCallback).accept(mockResponse);
}
}