Make REUSABLE_*_TL final
[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.fail;
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Matchers.anyLong;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.never;
15 import static org.mockito.Mockito.verify;
16 import com.codahale.metrics.Timer;
17 import com.google.common.base.Ticker;
18 import java.util.concurrent.TimeUnit;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.mockito.MockitoAnnotations;
23 import org.opendaylight.controller.cluster.datastore.utils.ActorContext;
24
25 /**
26  * Unit tests for TransactionRateLimitingCallback.
27  *
28  * @author Thomas Pantelis
29  */
30 public class TransactionRateLimitingCallbackTest {
31
32     @Mock
33     ActorContext mockContext;
34
35     @Mock
36     Timer mockTimer;
37
38     @Mock
39     Ticker mockTicker;
40
41     TransactionRateLimitingCallback callback;
42
43     @Before
44     public void setUp(){
45         MockitoAnnotations.initMocks(this);
46         doReturn(mockTimer).when(mockContext).getOperationTimer(ActorContext.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         try {
88             callback.success();
89             fail("Expected IllegalStateException");
90         } catch(IllegalStateException e){
91
92         }
93
94         verify(mockTimer, never()).update(anyLong(), any(TimeUnit.class));
95     }
96 }