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.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;
17 public class SingleNodeTest extends AbstractNativeEosTest {
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");
22 private ClusterNode clusterNode;
25 public void setUp() throws Exception {
26 clusterNode = startup(2550, List.of("member-1"));
30 public void tearDown() {
31 ActorTestKit.shutdown(clusterNode.getActorSystem());
35 public void testNotificationPriorToCandidateRegistration() {
36 final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
37 verifyNoNotifications(listener);
39 registerCandidates(clusterNode, ENTITY_1, "member-1");
40 verifyListenerState(listener, ENTITY_1, true, true, false);
44 public void testListenerPriorToAddingCandidates() {
45 final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
47 registerCandidates(clusterNode, ENTITY_1, "member-1");
48 waitUntillOwnerPresent(clusterNode, ENTITY_1);
50 reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
51 reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
53 registerCandidates(clusterNode, ENTITY_1, "member-2", "member-3");
54 verifyListenerState(listener, ENTITY_1, true, true, false);
56 unregisterCandidates(clusterNode, ENTITY_1, "member-1");
57 verifyListenerState(listener, ENTITY_1, true, false, true);
61 public void testListenerRegistrationAfterCandidates() {
62 registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
63 waitUntillOwnerPresent(clusterNode, ENTITY_1);
65 reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
66 reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
68 final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
69 verifyListenerState(listener, ENTITY_1, true, true, false);
71 unregisterCandidates(clusterNode, ENTITY_1, "member-1", "member-2");
72 verifyListenerState(listener, ENTITY_1, true, false, true);
76 public void testMultipleEntities() {
77 registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
78 waitUntillOwnerPresent(clusterNode, ENTITY_1);
80 reachableMember(clusterNode, "member-2", DEFAULT_DATACENTER);
81 reachableMember(clusterNode, "member-3", DEFAULT_DATACENTER);
83 final MockEntityOwnershipListener listener1 = registerListener(clusterNode, ENTITY_1);
84 final MockEntityOwnershipListener listener2 = registerListener(clusterNode, ENTITY_2);
86 verifyListenerState(listener1, ENTITY_1, true, true, false);
87 verifyNoNotifications(listener2);
89 unregisterCandidates(clusterNode, ENTITY_1, "member-1");
90 verifyListenerState(listener1, ENTITY_1, true, false, true);
91 verifyNoNotifications(listener2);
93 registerCandidates(clusterNode, ENTITY_2, "member-2");
94 verifyListenerState(listener1, ENTITY_1, true, false, true);
95 verifyListenerState(listener2, ENTITY_2, true, false, false);
97 unregisterCandidates(clusterNode, ENTITY_2, "member-2");
99 verifyListenerState(listener1, ENTITY_1, true, false, true);
100 verifyListenerState(listener2, ENTITY_2, false, false, false);