4d04530b10dd4ebef88882a136efc8c339b830a9
[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.time.Duration;
12 import java.util.List;
13 import org.junit.After;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
17
18 public class SingleNodeTest extends AbstractNativeEosTest {
19
20     public static final DOMEntity ENTITY_1 = new DOMEntity("test-type", "entity-1");
21     public static final DOMEntity ENTITY_2 = new DOMEntity("test-type-2", "entity-2");
22
23     private ClusterNode clusterNode;
24
25     @Before
26     public void setUp() throws Exception {
27         clusterNode = startup(2550, List.of("member-1"));
28     }
29
30     @After
31     public void tearDown() {
32         ActorTestKit.shutdown(clusterNode.getActorSystem(), Duration.ofSeconds(20));
33     }
34
35     @Test
36     public void testNotificationPriorToCandidateRegistration() {
37         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
38         verifyNoNotifications(listener);
39
40         registerCandidates(clusterNode, ENTITY_1, "member-1");
41         verifyListenerState(listener, ENTITY_1, true, true, false);
42     }
43
44     @Test
45     public void testListenerPriorToAddingCandidates() {
46         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
47
48         registerCandidates(clusterNode, ENTITY_1, "member-1");
49         waitUntillOwnerPresent(clusterNode, ENTITY_1);
50
51         reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
52         reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
53
54         registerCandidates(clusterNode, ENTITY_1, "member-2", "member-3");
55         verifyListenerState(listener, ENTITY_1, true, true, false);
56
57         unregisterCandidates(clusterNode, ENTITY_1, "member-1");
58         verifyListenerState(listener, ENTITY_1, true, false, true);
59     }
60
61     @Test
62     public void testListenerRegistrationAfterCandidates() {
63         registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
64         waitUntillOwnerPresent(clusterNode, ENTITY_1);
65
66         reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
67         reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
68
69         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
70         verifyListenerState(listener, ENTITY_1, true, true, false);
71
72         unregisterCandidates(clusterNode, ENTITY_1, "member-1", "member-2");
73         verifyListenerState(listener, ENTITY_1, true, false, true);
74     }
75
76     @Test
77     public void testMultipleEntities() {
78         registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
79         waitUntillOwnerPresent(clusterNode, ENTITY_1);
80
81         reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
82         reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
83
84         final MockEntityOwnershipListener listener1 = registerListener(clusterNode, ENTITY_1);
85         final MockEntityOwnershipListener listener2 = registerListener(clusterNode, ENTITY_2);
86
87         verifyListenerState(listener1, ENTITY_1, true, true, false);
88         verifyNoNotifications(listener2);
89
90         unregisterCandidates(clusterNode, ENTITY_1, "member-1");
91         verifyListenerState(listener1, ENTITY_1, true, false, true);
92         verifyNoNotifications(listener2);
93
94         registerCandidates(clusterNode, ENTITY_2, "member-2");
95         verifyListenerState(listener1, ENTITY_1, true, false, true);
96         verifyListenerState(listener2, ENTITY_2, true, false, false);
97
98         unregisterCandidates(clusterNode, ENTITY_2, "member-2");
99
100         verifyListenerState(listener1, ENTITY_1, true, false, true);
101         verifyListenerState(listener2, ENTITY_2, false, false, false);
102     }
103 }