e4971785f30879e970d1ebb11eafc7529d25f7b1
[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         verifyNoAdditionalNotifications(listener, 5);
57
58         unregisterCandidates(clusterNode, ENTITY_1, "member-1");
59         verifyListenerState(listener, ENTITY_1, true, false, true);
60     }
61
62     @Test
63     public void testListenerRegistrationAfterCandidates() {
64         registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
65         waitUntillOwnerPresent(clusterNode, ENTITY_1);
66
67         reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
68         reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
69
70         final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
71         verifyListenerState(listener, ENTITY_1, true, true, false);
72         verifyNoAdditionalNotifications(listener, 5);
73
74         unregisterCandidates(clusterNode, ENTITY_1, "member-1", "member-2");
75         verifyListenerState(listener, ENTITY_1, true, false, true);
76     }
77
78     @Test
79     public void testMultipleEntities() {
80         registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
81         waitUntillOwnerPresent(clusterNode, ENTITY_1);
82
83         reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
84         reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
85
86         final MockEntityOwnershipListener listener1 = registerListener(clusterNode, ENTITY_1);
87         final MockEntityOwnershipListener listener2 = registerListener(clusterNode, ENTITY_2);
88
89         verifyListenerState(listener1, ENTITY_1, true, true, false);
90         verifyNoNotifications(listener2);
91
92         unregisterCandidates(clusterNode, ENTITY_1, "member-1");
93         verifyListenerState(listener1, ENTITY_1, true, false, true);
94         verifyNoNotifications(listener2);
95
96         registerCandidates(clusterNode, ENTITY_2, "member-2");
97         verifyListenerState(listener1, ENTITY_1, true, false, true);
98         verifyListenerState(listener2, ENTITY_2, true, false, false);
99
100         unregisterCandidates(clusterNode, ENTITY_2, "member-2");
101
102         verifyListenerState(listener1, ENTITY_1, true, false, true);
103         verifyListenerState(listener2, ENTITY_2, false, false, false);
104     }
105 }