Merge "Bug 1965: Fixed DataChangedReply sent to deadletters"
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / cluster / datastore / DataChangeListenerTest.java
1 package org.opendaylight.controller.cluster.datastore;
2
3 import akka.actor.ActorRef;
4 import akka.actor.DeadLetter;
5 import akka.actor.Props;
6 import akka.testkit.JavaTestKit;
7 import org.junit.Test;
8 import org.mockito.Mockito;
9 import org.opendaylight.controller.cluster.datastore.messages.DataChanged;
10 import org.opendaylight.controller.cluster.datastore.messages.DataChangedReply;
11 import org.opendaylight.controller.cluster.datastore.messages.EnableNotification;
12 import org.opendaylight.controller.md.cluster.datastore.model.CompositeModel;
13 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
14 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeListener;
15
16 public class DataChangeListenerTest extends AbstractActorTest {
17
18     @SuppressWarnings({ "rawtypes", "unchecked" })
19     @Test
20     public void testDataChangedWhenNotificationsAreEnabled(){
21         new JavaTestKit(getSystem()) {{
22             final AsyncDataChangeEvent mockChangeEvent = Mockito.mock(AsyncDataChangeEvent.class);
23             final AsyncDataChangeListener mockListener = Mockito.mock(AsyncDataChangeListener.class);
24             final Props props = DataChangeListener.props(mockListener);
25             final ActorRef subject = getSystem().actorOf(props, "testDataChangedNotificationsEnabled");
26
27             // Let the DataChangeListener know that notifications should be enabled
28             subject.tell(new EnableNotification(true), getRef());
29
30             subject.tell(new DataChanged(CompositeModel.createTestContext(), mockChangeEvent),
31                     getRef());
32
33             expectMsgClass(DataChangedReply.class);
34
35             Mockito.verify(mockListener).onDataChanged(mockChangeEvent);
36         }};
37     }
38
39     @SuppressWarnings({ "rawtypes", "unchecked" })
40     @Test
41     public void testDataChangedWhenNotificationsAreDisabled(){
42         new JavaTestKit(getSystem()) {{
43             final AsyncDataChangeEvent mockChangeEvent = Mockito.mock(AsyncDataChangeEvent.class);
44             final AsyncDataChangeListener mockListener = Mockito.mock(AsyncDataChangeListener.class);
45             final Props props = DataChangeListener.props(mockListener);
46             final ActorRef subject =
47                 getSystem().actorOf(props, "testDataChangedNotificationsDisabled");
48
49             subject.tell(new DataChanged(CompositeModel.createTestContext(), mockChangeEvent),
50                     getRef());
51
52             new Within(duration("1 seconds")) {
53                 @Override
54                 protected void run() {
55                     expectNoMsg();
56
57                     Mockito.verify(mockListener, Mockito.never()).onDataChanged(
58                             Mockito.any(AsyncDataChangeEvent.class));
59                 }
60             };
61         }};
62     }
63
64     @SuppressWarnings({ "rawtypes", "unchecked" })
65     @Test
66     public void testDataChangedWithNoSender(){
67         new JavaTestKit(getSystem()) {{
68             final AsyncDataChangeEvent mockChangeEvent = Mockito.mock(AsyncDataChangeEvent.class);
69             final AsyncDataChangeListener mockListener = Mockito.mock(AsyncDataChangeListener.class);
70             final Props props = DataChangeListener.props(mockListener);
71             final ActorRef subject = getSystem().actorOf(props, "testDataChangedWithNoSender");
72
73             // Let the DataChangeListener know that notifications should be enabled
74             subject.tell(new EnableNotification(true), ActorRef.noSender());
75
76             subject.tell(new DataChanged(CompositeModel.createTestContext(), mockChangeEvent),
77                     ActorRef.noSender());
78
79             getSystem().eventStream().subscribe(getRef(), DeadLetter.class);
80             new Within(duration("1 seconds")) {
81                 @Override
82                 protected void run() {
83                     expectNoMsg();
84                 }
85             };
86         }};
87     }
88 }