*/
package org.opendaylight.controller.cluster.datastore;
+import static org.junit.Assert.assertFalse;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.opendaylight.controller.md.cluster.datastore.model.TestModel.TEST_PATH;
+
import akka.actor.ActorRef;
import akka.actor.DeadLetter;
import akka.actor.Props;
-import akka.testkit.JavaTestKit;
+import akka.testkit.javadsl.TestKit;
import com.google.common.collect.ImmutableList;
-import org.junit.Assert;
+import java.time.Duration;
+import org.junit.Before;
import org.junit.Test;
-import org.mockito.Matchers;
-import org.mockito.Mockito;
import org.opendaylight.controller.cluster.datastore.messages.DataTreeChanged;
import org.opendaylight.controller.cluster.datastore.messages.DataTreeChangedReply;
import org.opendaylight.controller.cluster.datastore.messages.EnableNotification;
-import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener;
-import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
+import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate;
public class DataTreeChangeListenerActorTest extends AbstractActorTest {
+ private TestKit testKit;
+
+ @Before
+ public void before() {
+ testKit = new TestKit(getSystem());
+ }
- @SuppressWarnings({ "rawtypes", "unchecked" })
@Test
- public void testDataChangedWhenNotificationsAreEnabled(){
- new JavaTestKit(getSystem()) {{
- final DataTreeCandidate mockTreeCandidate = Mockito.mock(DataTreeCandidate.class);
- final ImmutableList<DataTreeCandidate> mockCandidates = ImmutableList.of(mockTreeCandidate);
- final DOMDataTreeChangeListener mockListener = Mockito.mock(DOMDataTreeChangeListener.class);
- final Props props = DataTreeChangeListenerActor.props(mockListener);
- final ActorRef subject = getSystem().actorOf(props, "testDataTreeChangedNotificationsEnabled");
+ public void testDataChangedWhenNotificationsAreEnabled() {
+ final DataTreeCandidate mockTreeCandidate = mock(DataTreeCandidate.class);
+ final ImmutableList<DataTreeCandidate> mockCandidates = ImmutableList.of(mockTreeCandidate);
+ final DOMDataTreeChangeListener mockListener = mock(DOMDataTreeChangeListener.class);
+ final Props props = DataTreeChangeListenerActor.props(mockListener, TEST_PATH);
+ final ActorRef subject = getSystem().actorOf(props, "testDataTreeChangedNotificationsEnabled");
- // Let the DataChangeListener know that notifications should be enabled
- subject.tell(new EnableNotification(true), getRef());
+ // Let the DataChangeListener know that notifications should be
+ // enabled
+ subject.tell(new EnableNotification(true, "test"), testKit.getRef());
- subject.tell(new DataTreeChanged(mockCandidates),
- getRef());
+ subject.tell(new DataTreeChanged(mockCandidates), testKit.getRef());
- expectMsgClass(DataTreeChangedReply.class);
+ testKit.expectMsgClass(DataTreeChangedReply.class);
- Mockito.verify(mockListener).onDataTreeChanged(mockCandidates);
- }};
+ verify(mockListener).onDataTreeChanged(mockCandidates);
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
@Test
- public void testDataChangedWhenNotificationsAreDisabled(){
- new JavaTestKit(getSystem()) {{
- final DataTreeCandidate mockTreeCandidate = Mockito.mock(DataTreeCandidate.class);
- final ImmutableList<DataTreeCandidate> mockCandidates = ImmutableList.of(mockTreeCandidate);
- final DOMDataTreeChangeListener mockListener = Mockito.mock(DOMDataTreeChangeListener.class);
- final Props props = DataTreeChangeListenerActor.props(mockListener);
- final ActorRef subject =
- getSystem().actorOf(props, "testDataTreeChangedNotificationsDisabled");
-
- subject.tell(new DataTreeChanged(mockCandidates),
- getRef());
-
- new Within(duration("1 seconds")) {
- @Override
- protected void run() {
- expectNoMsg();
-
- Mockito.verify(mockListener, Mockito.never()).onDataTreeChanged(
- Matchers.anyCollectionOf(DataTreeCandidate.class));
- }
- };
- }};
+ public void testDataChangedWhenNotificationsAreDisabled() {
+ final DataTreeCandidate mockTreeCandidate = mock(DataTreeCandidate.class);
+ final ImmutableList<DataTreeCandidate> mockCandidates = ImmutableList.of(mockTreeCandidate);
+ final DOMDataTreeChangeListener mockListener = mock(DOMDataTreeChangeListener.class);
+ final Props props = DataTreeChangeListenerActor.props(mockListener, TEST_PATH);
+ final ActorRef subject = getSystem().actorOf(props, "testDataTreeChangedNotificationsDisabled");
+
+ subject.tell(new DataTreeChanged(mockCandidates), testKit.getRef());
+
+ testKit.within(Duration.ofSeconds(1), () -> {
+ testKit.expectNoMessage();
+ verify(mockListener, never()).onDataTreeChanged(anyList());
+ return null;
+ });
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
@Test
- public void testDataChangedWithNoSender(){
- new JavaTestKit(getSystem()) {{
- final DataTreeCandidate mockTreeCandidate = Mockito.mock(DataTreeCandidate.class);
- final ImmutableList<DataTreeCandidate> mockCandidates = ImmutableList.of(mockTreeCandidate);
- final DOMDataTreeChangeListener mockListener = Mockito.mock(DOMDataTreeChangeListener.class);
- final Props props = DataTreeChangeListenerActor.props(mockListener);
- final ActorRef subject = getSystem().actorOf(props, "testDataTreeChangedWithNoSender");
-
- getSystem().eventStream().subscribe(getRef(), DeadLetter.class);
-
- subject.tell(new DataTreeChanged(mockCandidates), ActorRef.noSender());
-
- // 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 DataTreeChangedReply",
- deadLetter.message() instanceof DataTreeChangedReply);
+ public void testDataChangedWithNoSender() {
+ final DataTreeCandidate mockTreeCandidate = mock(DataTreeCandidate.class);
+ final ImmutableList<DataTreeCandidate> mockCandidates = ImmutableList.of(mockTreeCandidate);
+ final DOMDataTreeChangeListener mockListener = mock(DOMDataTreeChangeListener.class);
+ final Props props = DataTreeChangeListenerActor.props(mockListener, TEST_PATH);
+ final ActorRef subject = getSystem().actorOf(props, "testDataTreeChangedWithNoSender");
+
+ getSystem().eventStream().subscribe(testKit.getRef(), DeadLetter.class);
+
+ subject.tell(new DataTreeChanged(mockCandidates), ActorRef.noSender());
+
+ // Make sure no DataChangedReply is sent to DeadLetters.
+ while (true) {
+ DeadLetter deadLetter;
+ try {
+ deadLetter = testKit.expectMsgClass(Duration.ofSeconds(1), 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.
+ assertFalse("Unexpected DataTreeChangedReply", deadLetter.message() instanceof DataTreeChangedReply);
+ }
}
- @SuppressWarnings({ "rawtypes", "unchecked" })
@Test
- public void testDataChangedWithListenerRuntimeEx(){
- new JavaTestKit(getSystem()) {{
- final DataTreeCandidate mockTreeCandidate1 = Mockito.mock(DataTreeCandidate.class);
- final ImmutableList<DataTreeCandidate> mockCandidates1 = ImmutableList.of(mockTreeCandidate1);
- final DataTreeCandidate mockTreeCandidate2 = Mockito.mock(DataTreeCandidate.class);
- final ImmutableList<DataTreeCandidate> mockCandidates2 = ImmutableList.of(mockTreeCandidate2);
- final DataTreeCandidate mockTreeCandidate3 = Mockito.mock(DataTreeCandidate.class);
- final ImmutableList<DataTreeCandidate> mockCandidates3 = ImmutableList.of(mockTreeCandidate3);
+ public void testDataChangedWithListenerRuntimeEx() {
+ final DataTreeCandidate mockTreeCandidate1 = mock(DataTreeCandidate.class);
+ final ImmutableList<DataTreeCandidate> mockCandidates1 = ImmutableList.of(mockTreeCandidate1);
+ final DataTreeCandidate mockTreeCandidate2 = mock(DataTreeCandidate.class);
+ final ImmutableList<DataTreeCandidate> mockCandidates2 = ImmutableList.of(mockTreeCandidate2);
+ final DataTreeCandidate mockTreeCandidate3 = mock(DataTreeCandidate.class);
+ final ImmutableList<DataTreeCandidate> mockCandidates3 = ImmutableList.of(mockTreeCandidate3);
- final DOMDataTreeChangeListener mockListener = Mockito.mock(DOMDataTreeChangeListener.class);
- Mockito.doThrow(new RuntimeException("mock")).when(mockListener).onDataTreeChanged(mockCandidates2);
+ final DOMDataTreeChangeListener mockListener = mock(DOMDataTreeChangeListener.class);
+ doThrow(new RuntimeException("mock")).when(mockListener).onDataTreeChanged(mockCandidates2);
- Props props = DataTreeChangeListenerActor.props(mockListener);
- ActorRef subject = getSystem().actorOf(props, "testDataTreeChangedWithListenerRuntimeEx");
+ Props props = DataTreeChangeListenerActor.props(mockListener, TEST_PATH);
+ ActorRef subject = getSystem().actorOf(props, "testDataTreeChangedWithListenerRuntimeEx");
- // Let the DataChangeListener know that notifications should be enabled
- subject.tell(new EnableNotification(true), getRef());
+ // Let the DataChangeListener know that notifications should be
+ // enabled
+ subject.tell(new EnableNotification(true, "test"), testKit.getRef());
- subject.tell(new DataTreeChanged(mockCandidates1),getRef());
- expectMsgClass(DataTreeChangedReply.class);
+ subject.tell(new DataTreeChanged(mockCandidates1), testKit.getRef());
+ testKit.expectMsgClass(DataTreeChangedReply.class);
- subject.tell(new DataTreeChanged(mockCandidates2),getRef());
- expectMsgClass(DataTreeChangedReply.class);
+ subject.tell(new DataTreeChanged(mockCandidates2), testKit.getRef());
+ testKit.expectMsgClass(DataTreeChangedReply.class);
- subject.tell(new DataTreeChanged(mockCandidates3),getRef());
- expectMsgClass(DataTreeChangedReply.class);
+ subject.tell(new DataTreeChanged(mockCandidates3), testKit.getRef());
+ testKit.expectMsgClass(DataTreeChangedReply.class);
- Mockito.verify(mockListener).onDataTreeChanged(mockCandidates1);
- Mockito.verify(mockListener).onDataTreeChanged(mockCandidates2);
- Mockito.verify(mockListener).onDataTreeChanged(mockCandidates3);
- }};
+ verify(mockListener).onDataTreeChanged(mockCandidates1);
+ verify(mockListener).onDataTreeChanged(mockCandidates2);
+ verify(mockListener).onDataTreeChanged(mockCandidates3);
}
}