Improve segmented journal actor metrics
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / TransactionRateLimitingCallbackTest.java
1 /*
2  * Copyright (c) 2015 Brocade Communications 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.datastore;
9
10 import static org.junit.Assert.assertThrows;
11 import static org.mockito.ArgumentMatchers.any;
12 import static org.mockito.ArgumentMatchers.anyLong;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.never;
15 import static org.mockito.Mockito.verify;
16
17 import com.codahale.metrics.Timer;
18 import com.google.common.base.Ticker;
19 import java.util.concurrent.TimeUnit;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.junit.runner.RunWith;
23 import org.mockito.Mock;
24 import org.mockito.junit.MockitoJUnitRunner;
25 import org.opendaylight.controller.cluster.datastore.utils.ActorUtils;
26
27 /**
28  * Unit tests for TransactionRateLimitingCallback.
29  *
30  * @author Thomas Pantelis
31  */
32 @Deprecated(since = "9.0.0", forRemoval = true)
33 @RunWith(MockitoJUnitRunner.StrictStubs.class)
34 public class TransactionRateLimitingCallbackTest {
35     @Mock
36     ActorUtils mockContext;
37     @Mock
38     Timer mockTimer;
39     @Mock
40     Ticker mockTicker;
41
42     TransactionRateLimitingCallback callback;
43
44     @Before
45     public void setUp() {
46         doReturn(mockTimer).when(mockContext).getOperationTimer(ActorUtils.COMMIT);
47         callback = new TransactionRateLimitingCallback(mockContext);
48         TransactionRateLimitingCallback.setTicker(mockTicker);
49     }
50
51     @Test
52     public void testSuccessWithoutPause() {
53         doReturn(1L).doReturn(201L).when(mockTicker).read();
54
55         callback.run();
56         callback.success();
57
58         verify(mockTimer).update(200L, TimeUnit.NANOSECONDS);
59     }
60
61     @Test
62     public void testSuccessWithPause() {
63         doReturn(1L).doReturn(201L).doReturn(301L).doReturn(351L).when(mockTicker).read();
64
65         callback.run();
66         callback.pause();
67         callback.pause();
68         callback.resume();
69         callback.resume();
70         callback.success();
71
72         verify(mockTimer).update(250L, TimeUnit.NANOSECONDS);
73     }
74
75     @Test
76     public void testFailure() {
77         doReturn(1L).when(mockTicker).read();
78
79         callback.run();
80         callback.failure();
81
82         verify(mockTimer, never()).update(anyLong(), any(TimeUnit.class));
83     }
84
85     @Test
86     public void testSuccessWithoutRun() {
87         final var ex = assertThrows(IllegalStateException.class, callback::success);
88
89         verify(mockTimer, never()).update(anyLong(), any(TimeUnit.class));
90     }
91 }