Improve segmented journal actor metrics
[controller.git] / opendaylight / md-sal / cds-access-client / src / test / java / org / opendaylight / controller / cluster / access / client / ConnectionEntryTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.cluster.access.client;
9
10 import static org.mockito.ArgumentMatchers.any;
11 import static org.mockito.Mockito.doNothing;
12 import static org.mockito.Mockito.verify;
13
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.Request;
30 import org.opendaylight.controller.cluster.access.concepts.RequestException;
31 import org.opendaylight.controller.cluster.access.concepts.RequestFailure;
32 import org.opendaylight.controller.cluster.access.concepts.Response;
33 import org.opendaylight.yangtools.concepts.WritableIdentifier;
34
35 /**
36  * Test suite covering logic contained in {@link ConnectionEntry}.
37  */
38 @RunWith(MockitoJUnitRunner.StrictStubs.class)
39 public class ConnectionEntryTest {
40     private static class MockFailure extends RequestFailure<WritableIdentifier, MockFailure> {
41         private static final long serialVersionUID = 1L;
42
43         MockFailure(final WritableIdentifier target, final RequestException cause) {
44             super(target, 0, cause);
45         }
46
47         @Override
48         protected SerialForm<WritableIdentifier, MockFailure> externalizableProxy(final ABIVersion version) {
49             return null;
50         }
51
52         @Override
53         protected MockFailure cloneAsVersion(final ABIVersion version) {
54             return this;
55         }
56     }
57
58     private static class MockRequest extends Request<WritableIdentifier, MockRequest> {
59         private static final long serialVersionUID = 1L;
60
61         MockRequest(final WritableIdentifier target, final ActorRef replyTo) {
62             super(target, 0, replyTo);
63         }
64
65         @Override
66         public RequestFailure<WritableIdentifier, ?> toRequestFailure(final RequestException cause) {
67             return new MockFailure(getTarget(), cause);
68         }
69
70         @Override
71         protected Request.SerialForm<WritableIdentifier, MockRequest> externalizableProxy(final ABIVersion version) {
72             return null;
73         }
74
75         @Override
76         protected MockRequest cloneAsVersion(final ABIVersion version) {
77             return this;
78         }
79     }
80
81     @Mock
82     private ActorRef mockReplyTo;
83     @Mock
84     private WritableIdentifier mockIdentifier;
85     @Mock
86     private RequestException mockCause;
87     @Mock
88     private Consumer<Response<?, ?>> mockCallback;
89     @Mock
90     private ClientActorBehavior<?> mockBehavior;
91
92     private FakeTicker ticker;
93     private Request<WritableIdentifier, ?> mockRequest;
94     private Response<WritableIdentifier, ?> mockResponse;
95
96     private static ActorSystem actorSystem;
97     private TestProbe mockActor;
98
99     private ConnectionEntry entry;
100
101     @BeforeClass
102     public static void setupClass() {
103         actorSystem = ActorSystem.apply();
104     }
105
106     @AfterClass
107     public static void teardownClass() {
108         actorSystem.terminate();
109     }
110
111     @Before
112     public void setup() {
113         doNothing().when(mockCallback).accept(any(MockFailure.class));
114
115         ticker = new FakeTicker();
116         ticker.advance(ThreadLocalRandom.current().nextLong());
117
118         mockActor = TestProbe.apply(actorSystem);
119         mockRequest = new MockRequest(mockIdentifier, mockReplyTo);
120         mockResponse = mockRequest.toRequestFailure(mockCause);
121
122         entry = new ConnectionEntry(mockRequest, mockCallback, ticker.read());
123     }
124
125     @After
126     public void teardown() {
127         actorSystem.stop(mockActor.ref());
128     }
129
130     @Test
131     public void testComplete() {
132         entry.complete(mockResponse);
133         verify(mockCallback).accept(mockResponse);
134     }
135 }