Drop -XX:MaxPermSize
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / utils / MessageTrackerTest.java
1 /*
2  * Copyright (c) 2014, 2015 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
9 package org.opendaylight.controller.cluster.datastore.utils;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.fail;
13 import com.google.common.util.concurrent.Uninterruptibles;
14 import java.util.List;
15 import java.util.concurrent.TimeUnit;
16 import org.junit.Assert;
17 import org.junit.Test;
18 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory;
20
21 public class MessageTrackerTest {
22
23     private final Logger LOG = LoggerFactory.getLogger(getClass());
24
25     private class Foo {}
26
27     @Test
28     public void testNoTracking(){
29         MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
30
31         MessageTracker.Context context1 = messageTracker.received(new Foo());
32         context1.done();
33
34         Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
35
36         MessageTracker.Context context2 = messageTracker.received(new Foo());
37         context2.done();
38
39     }
40
41     @Test
42     public void testFailedExpectationOnTracking(){
43         MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
44         messageTracker.begin();
45
46         MessageTracker.Context context1 = messageTracker.received(new Foo());
47         context1.done();
48
49         Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
50
51         MessageTracker.Context context2 = messageTracker.received(new Foo());
52         Assert.assertEquals(true, context2.error().isPresent());
53         Assert.assertEquals(0, context2.error().get().getMessageProcessingTimesSinceLastExpectedMessage().size());
54
55     }
56
57     @Test
58     public void testFailedExpectationOnTrackingWithMessagesInBetween(){
59         MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
60         messageTracker.begin();
61
62         MessageTracker.Context context1 = messageTracker.received(new Foo());
63         context1.done();
64
65         messageTracker.received("A").done();
66         messageTracker.received(Long.valueOf(10)).done();
67         MessageTracker.Context c = messageTracker.received(Integer.valueOf(100));
68
69         Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
70
71         c.done();
72
73         MessageTracker.Context context2 = messageTracker.received(new Foo());
74
75         Assert.assertEquals(true, context2.error().isPresent());
76
77         MessageTracker.Error error = context2.error().get();
78
79         List<MessageTracker.MessageProcessingTime> messageProcessingTimes =
80                 error.getMessageProcessingTimesSinceLastExpectedMessage();
81
82         Assert.assertEquals(3, messageProcessingTimes.size());
83
84         Assert.assertEquals(String.class, messageProcessingTimes.get(0).getMessageClass());
85         Assert.assertEquals(Long.class, messageProcessingTimes.get(1).getMessageClass());
86         Assert.assertEquals(Integer.class, messageProcessingTimes.get(2).getMessageClass());
87         Assert.assertTrue(messageProcessingTimes.get(2).getElapsedTimeInNanos() > TimeUnit.MILLISECONDS.toNanos(10));
88         Assert.assertEquals(Foo.class, error.getLastExpectedMessage().getClass());
89         Assert.assertEquals(Foo.class, error.getCurrentExpectedMessage().getClass());
90
91         LOG.error("An error occurred : {}" , error);
92
93     }
94
95
96     @Test
97     public void testMetExpectationOnTracking(){
98         MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
99         messageTracker.begin();
100
101         MessageTracker.Context context1 = messageTracker.received(new Foo());
102         context1.done();
103
104         Uninterruptibles.sleepUninterruptibly(1, TimeUnit.MILLISECONDS);
105
106         MessageTracker.Context context2 = messageTracker.received(new Foo());
107         Assert.assertEquals(false, context2.error().isPresent());
108
109     }
110
111     @Test
112     public void testIllegalStateExceptionWhenDoneIsNotCalledWhileTracking(){
113         MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
114         messageTracker.begin();
115
116         messageTracker.received(new Foo());
117
118         try {
119             messageTracker.received(new Foo());
120             fail("Expected an IllegalStateException");
121         } catch (IllegalStateException e){
122
123         }
124     }
125
126     @Test
127     public void testNoIllegalStateExceptionWhenDoneIsNotCalledWhileNotTracking(){
128         MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
129
130         messageTracker.received(new Foo());
131         messageTracker.received(new Foo());
132     }
133
134     @Test
135     public void testDelayInFirstExpectedMessageArrival(){
136
137         MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
138         messageTracker.begin();
139
140         Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
141
142         MessageTracker.Context context = messageTracker.received(new Foo());
143
144         Assert.assertEquals(true, context.error().isPresent());
145
146         MessageTracker.Error error = context.error().get();
147
148         Assert.assertEquals(null, error.getLastExpectedMessage());
149         Assert.assertEquals(Foo.class, error.getCurrentExpectedMessage().getClass());
150
151         String errorString = error.toString();
152         Assert.assertTrue(errorString.contains("Last Expected Message = null"));
153
154         LOG.error("An error occurred : {}", error);
155     }
156
157     @Test
158     public void testCallingBeginDoesNotResetWatch(){
159         MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
160         messageTracker.begin();
161
162         Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
163
164         messageTracker.begin();
165
166         MessageTracker.Context context = messageTracker.received(new Foo());
167
168         Assert.assertEquals(true, context.error().isPresent());
169
170     }
171
172     @Test
173     public void testMessagesSinceLastExpectedMessage(){
174
175         MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
176         messageTracker.begin();
177
178         MessageTracker.Context context1 = messageTracker.received(Integer.valueOf(45)).done();
179
180         Assert.assertEquals(false, context1.error().isPresent());
181
182         MessageTracker.Context context2 = messageTracker.received(Long.valueOf(45)).done();
183
184         Assert.assertEquals(false, context2.error().isPresent());
185
186         List<MessageTracker.MessageProcessingTime> processingTimeList =
187                 messageTracker.getMessagesSinceLastExpectedMessage();
188
189         Assert.assertEquals(2, processingTimeList.size());
190
191         assertEquals(Integer.class, processingTimeList.get(0).getMessageClass());
192         assertEquals(Long.class, processingTimeList.get(1).getMessageClass());
193
194     }
195
196 }