Fix intermittent failure in DataChangeListenerTest 60/12460/1
authortpantelis <tpanteli@brocade.com>
Fri, 31 Oct 2014 06:12:10 +0000 (02:12 -0400)
committertpantelis <tpanteli@brocade.com>
Fri, 31 Oct 2014 06:12:10 +0000 (02:12 -0400)
Fixed an intermittent failure in testDataChangedWithNoSender due to timing if a
DeadLetter is received due to the Monitor message being dropped as the
unit tests don't set up the termination monitor actor. The test expects
no DeadLetter for DataChangedReply so added chanhes to ignore
DeadLetters for other messages.

Change-Id: I39ddc888de7fbff9201ac9f785baa6fec7cb8f2c
Signed-off-by: tpantelis <tpanteli@brocade.com>
opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataChangeListenerTest.java

index 101a73782b498943acb14b0cb03be2dde5df1f87..d5a12c73c57c0deb4fda3be2f11aac435a428bdc 100644 (file)
@@ -4,6 +4,7 @@ import akka.actor.ActorRef;
 import akka.actor.DeadLetter;
 import akka.actor.Props;
 import akka.testkit.JavaTestKit;
+import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
 import org.opendaylight.controller.cluster.datastore.messages.DataChanged;
@@ -70,19 +71,25 @@ public class DataChangeListenerTest extends AbstractActorTest {
             final Props props = DataChangeListener.props(mockListener);
             final ActorRef subject = getSystem().actorOf(props, "testDataChangedWithNoSender");
 
-            // Let the DataChangeListener know that notifications should be enabled
-            subject.tell(new EnableNotification(true), ActorRef.noSender());
+            getSystem().eventStream().subscribe(getRef(), DeadLetter.class);
 
             subject.tell(new DataChanged(CompositeModel.createTestContext(), mockChangeEvent),
                     ActorRef.noSender());
 
-            getSystem().eventStream().subscribe(getRef(), DeadLetter.class);
-            new Within(duration("1 seconds")) {
-                @Override
-                protected void run() {
-                    expectNoMsg();
+            // Make sure no DataChangedReply is sent to DeadLetters.
+            while(true) {
+                DeadLetter deadLetter;
+                try {
+                    deadLetter = expectMsgClass(duration("1 seconds"), DeadLetter.class);
+                } catch (AssertionError e) {
+                    // Timed out - got no DeadLetter - this is good
+                    break;
                 }
-            };
+
+                // We may get DeadLetters for other messages we don't care about.
+                Assert.assertFalse("Unexpected DataChangedReply",
+                        deadLetter.message() instanceof DataChangedReply);
+            }
         }};
     }
 }