2 * Copyright (c) 2021 PANTHEON.tech, s.r.o. 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.eos.akka;
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;
18 public class SingleNodeTest extends AbstractNativeEosTest {
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");
23 private ClusterNode clusterNode;
26 public void setUp() throws Exception {
27 clusterNode = startup(2550, List.of("member-1"));
31 public void tearDown() {
32 ActorTestKit.shutdown(clusterNode.getActorSystem(), Duration.ofSeconds(20));
36 public void testNotificationPriorToCandidateRegistration() {
37 final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
38 verifyNoNotifications(listener);
40 registerCandidates(clusterNode, ENTITY_1, "member-1");
41 verifyListenerState(listener, ENTITY_1, true, true, false);
45 public void testListenerPriorToAddingCandidates() {
46 final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
48 registerCandidates(clusterNode, ENTITY_1, "member-1");
49 waitUntillOwnerPresent(clusterNode, ENTITY_1);
51 reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
52 reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
54 registerCandidates(clusterNode, ENTITY_1, "member-2", "member-3");
55 verifyListenerState(listener, ENTITY_1, true, true, false);
56 verifyNoAdditionalNotifications(listener, 5);
58 unregisterCandidates(clusterNode, ENTITY_1, "member-1");
59 verifyListenerState(listener, ENTITY_1, true, false, true);
63 public void testListenerRegistrationAfterCandidates() {
64 registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
65 waitUntillOwnerPresent(clusterNode, ENTITY_1);
67 reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
68 reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
70 final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
71 verifyListenerState(listener, ENTITY_1, true, true, false);
72 verifyNoAdditionalNotifications(listener, 5);
74 unregisterCandidates(clusterNode, ENTITY_1, "member-1", "member-2");
75 verifyListenerState(listener, ENTITY_1, true, false, true);
79 public void testMultipleEntities() {
80 registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
81 waitUntillOwnerPresent(clusterNode, ENTITY_1);
83 reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
84 reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
86 final MockEntityOwnershipListener listener1 = registerListener(clusterNode, ENTITY_1);
87 final MockEntityOwnershipListener listener2 = registerListener(clusterNode, ENTITY_2);
89 verifyListenerState(listener1, ENTITY_1, true, true, false);
90 verifyNoNotifications(listener2);
92 unregisterCandidates(clusterNode, ENTITY_1, "member-1");
93 verifyListenerState(listener1, ENTITY_1, true, false, true);
94 verifyNoNotifications(listener2);
96 registerCandidates(clusterNode, ENTITY_2, "member-2");
97 verifyListenerState(listener1, ENTITY_1, true, false, true);
98 verifyListenerState(listener2, ENTITY_2, true, false, false);
100 unregisterCandidates(clusterNode, ENTITY_2, "member-2");
102 verifyListenerState(listener1, ENTITY_1, true, false, true);
103 verifyListenerState(listener2, ENTITY_2, false, false, false);