Introduce DOMEntityOwnershipService replacement
[controller.git] / opendaylight / md-sal / eos-dom-akka / src / test / java / org / opendaylight / controller / eos / akka / SingleNodeTest.java
1 /*
2  * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.eos.akka;
9
10 import akka.actor.testkit.typed.javadsl.ActorTestKit;
11 import java.util.List;
12 import org.junit.After;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
16
17 public class SingleNodeTest extends AbstractNativeEosTest {
18
19     public static final DOMEntity ENTITY_1 = new DOMEntity("test-type", "entity-1");
20     public static final DOMEntity ENTITY_2 = new DOMEntity("test-type-2", "entity-2");
21
22     private ClusterNode clusterNode;
23
24     @Before
25     public void setUp() throws Exception {
26         clusterNode = startup(2550, List.of("member-1"));
27
28         reachableMember(clusterNode, "member-2");
29         reachableMember(clusterNode, "member-3");
30     }
31
32     @After
33     public void tearDown() {
34         ActorTestKit.shutdown(clusterNode.getActorSystem());
35     }
36
37     @Test
38     public void testNotificationPriorToCandidateRegistration() {
39         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
40         verifyNoNotifications(listener);
41
42         registerCandidates(clusterNode, ENTITY_1, "member-1");
43         verifyListenerState(listener, ENTITY_1, true, true, false);
44     }
45
46     @Test
47     public void testListenerPriorToAddingCandidates() {
48         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
49
50         registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
51         verifyListenerState(listener, ENTITY_1, true, true, false);
52
53         unregisterCandidates(clusterNode, ENTITY_1, "member-1");
54         verifyListenerState(listener, ENTITY_1, true, false, true);
55     }
56
57     @Test
58     public void testListenerRegistrationAfterCandidates() {
59         registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
60         waitUntillOwnerPresent(clusterNode, ENTITY_1);
61
62         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
63         verifyListenerState(listener, ENTITY_1, true, true, false);
64
65         unregisterCandidates(clusterNode, ENTITY_1, "member-1", "member-2");
66         verifyListenerState(listener, ENTITY_1, true, false, true);
67     }
68
69     @Test
70     public void testMultipleEntities() {
71         registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
72         waitUntillOwnerPresent(clusterNode, ENTITY_1);
73
74         final MockEntityOwnershipListener listener1 = registerListener(clusterNode, ENTITY_1);
75         final MockEntityOwnershipListener listener2 = registerListener(clusterNode, ENTITY_2);
76
77         verifyListenerState(listener1, ENTITY_1, true, true, false);
78         verifyNoNotifications(listener2);
79
80         unregisterCandidates(clusterNode, ENTITY_1, "member-1");
81         verifyListenerState(listener1, ENTITY_1, true, false, true);
82         verifyNoNotifications(listener2);
83
84         registerCandidates(clusterNode, ENTITY_2, "member-2");
85         verifyListenerState(listener1, ENTITY_1, true, false, true);
86         verifyListenerState(listener2, ENTITY_2, true, false, false);
87
88         unregisterCandidates(clusterNode, ENTITY_2, "member-2");
89
90         verifyListenerState(listener1, ENTITY_1, true, false, true);
91         verifyListenerState(listener2, ENTITY_2, false, false, false);
92     }
93 }