1 package org.opendaylight.controller.cluster.datastore.utils;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.fail;
5 import com.google.common.util.concurrent.Uninterruptibles;
7 import java.util.concurrent.TimeUnit;
8 import org.junit.Assert;
10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory;
13 public class MessageTrackerTest {
15 private final Logger LOG = LoggerFactory.getLogger(getClass());
20 public void testNoTracking(){
21 MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
23 MessageTracker.Context context1 = messageTracker.received(new Foo());
26 Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
28 MessageTracker.Context context2 = messageTracker.received(new Foo());
34 public void testFailedExpectationOnTracking(){
35 MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
36 messageTracker.begin();
38 MessageTracker.Context context1 = messageTracker.received(new Foo());
41 Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
43 MessageTracker.Context context2 = messageTracker.received(new Foo());
44 Assert.assertEquals(true, context2.error().isPresent());
45 Assert.assertEquals(0, context2.error().get().getMessageProcessingTimesSinceLastExpectedMessage().size());
50 public void testFailedExpectationOnTrackingWithMessagesInBetween(){
51 MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
52 messageTracker.begin();
54 MessageTracker.Context context1 = messageTracker.received(new Foo());
57 messageTracker.received("A").done();
58 messageTracker.received(Long.valueOf(10)).done();
59 MessageTracker.Context c = messageTracker.received(Integer.valueOf(100));
61 Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
65 MessageTracker.Context context2 = messageTracker.received(new Foo());
67 Assert.assertEquals(true, context2.error().isPresent());
69 MessageTracker.Error error = context2.error().get();
71 List<MessageTracker.MessageProcessingTime> messageProcessingTimes =
72 error.getMessageProcessingTimesSinceLastExpectedMessage();
74 Assert.assertEquals(3, messageProcessingTimes.size());
76 Assert.assertEquals(String.class, messageProcessingTimes.get(0).getMessageClass());
77 Assert.assertEquals(Long.class, messageProcessingTimes.get(1).getMessageClass());
78 Assert.assertEquals(Integer.class, messageProcessingTimes.get(2).getMessageClass());
79 Assert.assertTrue(messageProcessingTimes.get(2).getElapsedTimeInNanos() > TimeUnit.MILLISECONDS.toNanos(10));
80 Assert.assertEquals(Foo.class, error.getLastExpectedMessage().getClass());
81 Assert.assertEquals(Foo.class, error.getCurrentExpectedMessage().getClass());
83 LOG.error("An error occurred : {}" , error);
89 public void testMetExpectationOnTracking(){
90 MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
91 messageTracker.begin();
93 MessageTracker.Context context1 = messageTracker.received(new Foo());
96 Uninterruptibles.sleepUninterruptibly(1, TimeUnit.MILLISECONDS);
98 MessageTracker.Context context2 = messageTracker.received(new Foo());
99 Assert.assertEquals(false, context2.error().isPresent());
104 public void testIllegalStateExceptionWhenDoneIsNotCalledWhileTracking(){
105 MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
106 messageTracker.begin();
108 messageTracker.received(new Foo());
111 messageTracker.received(new Foo());
112 fail("Expected an IllegalStateException");
113 } catch (IllegalStateException e){
119 public void testNoIllegalStateExceptionWhenDoneIsNotCalledWhileNotTracking(){
120 MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
122 messageTracker.received(new Foo());
123 messageTracker.received(new Foo());
127 public void testDelayInFirstExpectedMessageArrival(){
129 MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
130 messageTracker.begin();
132 Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
134 MessageTracker.Context context = messageTracker.received(new Foo());
136 Assert.assertEquals(true, context.error().isPresent());
138 MessageTracker.Error error = context.error().get();
140 Assert.assertEquals(null, error.getLastExpectedMessage());
141 Assert.assertEquals(Foo.class, error.getCurrentExpectedMessage().getClass());
143 String errorString = error.toString();
144 Assert.assertTrue(errorString.contains("Last Expected Message = null"));
146 LOG.error("An error occurred : {}", error);
150 public void testCallingBeginDoesNotResetWatch(){
151 MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
152 messageTracker.begin();
154 Uninterruptibles.sleepUninterruptibly(20, TimeUnit.MILLISECONDS);
156 messageTracker.begin();
158 MessageTracker.Context context = messageTracker.received(new Foo());
160 Assert.assertEquals(true, context.error().isPresent());
165 public void testMessagesSinceLastExpectedMessage(){
167 MessageTracker messageTracker = new MessageTracker(Foo.class, 10);
168 messageTracker.begin();
170 MessageTracker.Context context1 = messageTracker.received(Integer.valueOf(45)).done();
172 Assert.assertEquals(false, context1.error().isPresent());
174 MessageTracker.Context context2 = messageTracker.received(Long.valueOf(45)).done();
176 Assert.assertEquals(false, context2.error().isPresent());
178 List<MessageTracker.MessageProcessingTime> processingTimeList =
179 messageTracker.getMessagesSinceLastExpectedMessage();
181 Assert.assertEquals(2, processingTimeList.size());
183 assertEquals(Integer.class, processingTimeList.get(0).getMessageClass());
184 assertEquals(Long.class, processingTimeList.get(1).getMessageClass());