2 * Copyright (c) 2017 Inocybe Technologies and others. All rights reserved.
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
8 package org.opendaylight.controller.cluster.datastore.actors;
10 import static org.mockito.Mockito.mock;
11 import static org.mockito.Mockito.timeout;
12 import static org.mockito.Mockito.verify;
14 import akka.actor.ActorRef;
15 import akka.testkit.javadsl.TestKit;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.mockito.Mock;
19 import org.mockito.MockitoAnnotations;
20 import org.opendaylight.controller.cluster.datastore.AbstractActorTest;
21 import org.opendaylight.controller.cluster.datastore.messages.CloseDataTreeNotificationListenerRegistration;
22 import org.opendaylight.controller.cluster.datastore.messages.CloseDataTreeNotificationListenerRegistrationReply;
23 import org.opendaylight.yangtools.concepts.ListenerRegistration;
25 public class DataTreeNotificationListenerRegistrationActorTest extends AbstractActorTest {
27 private ListenerRegistration<?> mockListenerReg;
30 private Runnable mockOnClose;
36 MockitoAnnotations.initMocks(this);
37 DataTreeNotificationListenerRegistrationActor.killDelay = 100;
38 kit = new TestKit(getSystem());
42 public void testOnReceiveCloseListenerRegistrationAfterSetRegistration() {
43 final ActorRef subject = getSystem().actorOf(DataTreeNotificationListenerRegistrationActor.props(),
44 "testOnReceiveCloseListenerRegistrationAfterSetRegistration");
47 subject.tell(new DataTreeNotificationListenerRegistrationActor.SetRegistration(mockListenerReg,
48 mockOnClose), ActorRef.noSender());
49 subject.tell(CloseDataTreeNotificationListenerRegistration.getInstance(), kit.getRef());
51 kit.expectMsgClass(kit.duration("5 second"), CloseDataTreeNotificationListenerRegistrationReply.class);
53 verify(mockListenerReg, timeout(5000)).close();
54 verify(mockOnClose, timeout(5000)).run();
56 kit.expectTerminated(kit.duration("5 second"), subject);
60 public void testOnReceiveCloseListenerRegistrationBeforeSetRegistration() {
61 final ActorRef subject = getSystem().actorOf(DataTreeNotificationListenerRegistrationActor.props(),
62 "testOnReceiveSetRegistrationAfterPriorClose");
65 subject.tell(CloseDataTreeNotificationListenerRegistration.getInstance(), kit.getRef());
66 kit.expectMsgClass(kit.duration("5 second"), CloseDataTreeNotificationListenerRegistrationReply.class);
68 subject.tell(new DataTreeNotificationListenerRegistrationActor.SetRegistration(mockListenerReg,
69 mockOnClose), ActorRef.noSender());
71 verify(mockListenerReg, timeout(5000)).close();
72 verify(mockOnClose, timeout(5000)).run();
74 kit.expectTerminated(kit.duration("5 second"), subject);
78 public void testOnReceiveSetRegistrationAfterPriorClose() {
79 DataTreeNotificationListenerRegistrationActor.killDelay = 1000;
80 final ListenerRegistration<?> mockListenerReg2 = mock(ListenerRegistration.class);
81 final Runnable mockOnClose2 = mock(Runnable.class);
83 final ActorRef subject = getSystem().actorOf(DataTreeNotificationListenerRegistrationActor.props(),
84 "testOnReceiveSetRegistrationAfterPriorClose");
87 subject.tell(new DataTreeNotificationListenerRegistrationActor.SetRegistration(mockListenerReg,
88 mockOnClose), ActorRef.noSender());
89 subject.tell(CloseDataTreeNotificationListenerRegistration.getInstance(), ActorRef.noSender());
90 subject.tell(new DataTreeNotificationListenerRegistrationActor.SetRegistration(mockListenerReg2,
91 mockOnClose2), ActorRef.noSender());
93 verify(mockListenerReg, timeout(5000)).close();
94 verify(mockOnClose, timeout(5000)).run();
95 verify(mockListenerReg2, timeout(5000)).close();
96 verify(mockOnClose2, timeout(5000)).run();
98 kit.expectTerminated(kit.duration("5 second"), subject);