Use akka-multi-dc in eos native
[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
29     @After
30     public void tearDown() {
31         ActorTestKit.shutdown(clusterNode.getActorSystem());
32     }
33
34     @Test
35     public void testNotificationPriorToCandidateRegistration() {
36         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
37         verifyNoNotifications(listener);
38
39         registerCandidates(clusterNode, ENTITY_1, "member-1");
40         verifyListenerState(listener, ENTITY_1, true, true, false);
41     }
42
43     @Test
44     public void testListenerPriorToAddingCandidates() {
45         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
46
47         registerCandidates(clusterNode, ENTITY_1, "member-1");
48         waitUntillOwnerPresent(clusterNode, ENTITY_1);
49
50         reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
51         reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
52
53         registerCandidates(clusterNode, ENTITY_1, "member-2", "member-3");
54         verifyListenerState(listener, ENTITY_1, true, true, false);
55
56         unregisterCandidates(clusterNode, ENTITY_1, "member-1");
57         verifyListenerState(listener, ENTITY_1, true, false, true);
58     }
59
60     @Test
61     public void testListenerRegistrationAfterCandidates() {
62         registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
63         waitUntillOwnerPresent(clusterNode, ENTITY_1);
64
65         reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
66         reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
67
68         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
69         verifyListenerState(listener, ENTITY_1, true, true, false);
70
71         unregisterCandidates(clusterNode, ENTITY_1, "member-1", "member-2");
72         verifyListenerState(listener, ENTITY_1, true, false, true);
73     }
74
75     @Test
76     public void testMultipleEntities() {
77         registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
78         waitUntillOwnerPresent(clusterNode, ENTITY_1);
79
80         reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
81         reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
82
83         final MockEntityOwnershipListener listener1 = registerListener(clusterNode, ENTITY_1);
84         final MockEntityOwnershipListener listener2 = registerListener(clusterNode, ENTITY_2);
85
86         verifyListenerState(listener1, ENTITY_1, true, true, false);
87         verifyNoNotifications(listener2);
88
89         unregisterCandidates(clusterNode, ENTITY_1, "member-1");
90         verifyListenerState(listener1, ENTITY_1, true, false, true);
91         verifyNoNotifications(listener2);
92
93         registerCandidates(clusterNode, ENTITY_2, "member-2");
94         verifyListenerState(listener1, ENTITY_1, true, false, true);
95         verifyListenerState(listener2, ENTITY_2, true, false, false);
96
97         unregisterCandidates(clusterNode, ENTITY_2, "member-2");
98
99         verifyListenerState(listener1, ENTITY_1, true, false, true);
100         verifyListenerState(listener2, ENTITY_2, false, false, false);
101     }
102 }