2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.cluster.access.client;
10 import static org.mockito.ArgumentMatchers.any;
11 import static org.mockito.Mockito.doNothing;
12 import static org.mockito.Mockito.verify;
14 import akka.actor.ActorRef;
15 import akka.actor.ActorSystem;
16 import akka.testkit.TestProbe;
17 import com.google.common.testing.FakeTicker;
18 import java.util.concurrent.ThreadLocalRandom;
19 import java.util.function.Consumer;
20 import org.junit.After;
21 import org.junit.AfterClass;
22 import org.junit.Before;
23 import org.junit.BeforeClass;
24 import org.junit.Test;
25 import org.junit.runner.RunWith;
26 import org.mockito.Mock;
27 import org.mockito.junit.MockitoJUnitRunner;
28 import org.opendaylight.controller.cluster.access.ABIVersion;
29 import org.opendaylight.controller.cluster.access.concepts.AbstractRequestFailureProxy;
30 import org.opendaylight.controller.cluster.access.concepts.AbstractRequestProxy;
31 import org.opendaylight.controller.cluster.access.concepts.Request;
32 import org.opendaylight.controller.cluster.access.concepts.RequestException;
33 import org.opendaylight.controller.cluster.access.concepts.RequestFailure;
34 import org.opendaylight.controller.cluster.access.concepts.Response;
35 import org.opendaylight.yangtools.concepts.WritableIdentifier;
38 * Test suite covering logic contained in {@link ConnectionEntry}.
40 @RunWith(MockitoJUnitRunner.StrictStubs.class)
41 public class ConnectionEntryTest {
42 private static class MockFailure extends RequestFailure<WritableIdentifier, MockFailure> {
43 private static final long serialVersionUID = 1L;
45 MockFailure(final WritableIdentifier target, final RequestException cause) {
46 super(target, 0, cause);
50 protected AbstractRequestFailureProxy<WritableIdentifier, MockFailure> externalizableProxy(
51 final ABIVersion version) {
56 protected MockFailure cloneAsVersion(final ABIVersion version) {
61 private static class MockRequest extends Request<WritableIdentifier, MockRequest> {
62 private static final long serialVersionUID = 1L;
64 MockRequest(final WritableIdentifier target, final ActorRef replyTo) {
65 super(target, 0, replyTo);
69 public RequestFailure<WritableIdentifier, ?> toRequestFailure(final RequestException cause) {
70 return new MockFailure(getTarget(), cause);
74 protected AbstractRequestProxy<WritableIdentifier, MockRequest> externalizableProxy(final ABIVersion version) {
79 protected MockRequest cloneAsVersion(final ABIVersion version) {
85 private ActorRef mockReplyTo;
87 private WritableIdentifier mockIdentifier;
89 private RequestException mockCause;
91 private Consumer<Response<?, ?>> mockCallback;
93 private ClientActorBehavior<?> mockBehavior;
95 private FakeTicker ticker;
96 private Request<WritableIdentifier, ?> mockRequest;
97 private Response<WritableIdentifier, ?> mockResponse;
99 private static ActorSystem actorSystem;
100 private TestProbe mockActor;
102 private ConnectionEntry entry;
105 public static void setupClass() {
106 actorSystem = ActorSystem.apply();
110 public static void teardownClass() {
111 actorSystem.terminate();
115 public void setup() {
116 doNothing().when(mockCallback).accept(any(MockFailure.class));
118 ticker = new FakeTicker();
119 ticker.advance(ThreadLocalRandom.current().nextLong());
121 mockActor = TestProbe.apply(actorSystem);
122 mockRequest = new MockRequest(mockIdentifier, mockReplyTo);
123 mockResponse = mockRequest.toRequestFailure(mockCause);
125 entry = new ConnectionEntry(mockRequest, mockCallback, ticker.read());
129 public void teardown() {
130 actorSystem.stop(mockActor.ref());
134 public void testComplete() {
135 entry.complete(mockResponse);
136 verify(mockCallback).accept(mockResponse);