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"));
28 reachableMember(clusterNode, "member-2");
29 reachableMember(clusterNode, "member-3");
33 public void tearDown() {
34 ActorTestKit.shutdown(clusterNode.getActorSystem());
38 public void testNotificationPriorToCandidateRegistration() {
39 final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
40 verifyNoNotifications(listener);
42 registerCandidates(clusterNode, ENTITY_1, "member-1");
43 verifyListenerState(listener, ENTITY_1, true, true, false);
47 public void testListenerPriorToAddingCandidates() {
48 final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
50 registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
51 verifyListenerState(listener, ENTITY_1, true, true, false);
53 unregisterCandidates(clusterNode, ENTITY_1, "member-1");
54 verifyListenerState(listener, ENTITY_1, true, false, true);
58 public void testListenerRegistrationAfterCandidates() {
59 registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
60 waitUntillOwnerPresent(clusterNode, ENTITY_1);
62 final MockEntityOwnershipListener listener = registerListener(clusterNode, ENTITY_1);
63 verifyListenerState(listener, ENTITY_1, true, true, false);
65 unregisterCandidates(clusterNode, ENTITY_1, "member-1", "member-2");
66 verifyListenerState(listener, ENTITY_1, true, false, true);
70 public void testMultipleEntities() {
71 registerCandidates(clusterNode, ENTITY_1, "member-1", "member-2", "member-3");
72 waitUntillOwnerPresent(clusterNode, ENTITY_1);
74 final MockEntityOwnershipListener listener1 = registerListener(clusterNode, ENTITY_1);
75 final MockEntityOwnershipListener listener2 = registerListener(clusterNode, ENTITY_2);
77 verifyListenerState(listener1, ENTITY_1, true, true, false);
78 verifyNoNotifications(listener2);
80 unregisterCandidates(clusterNode, ENTITY_1, "member-1");
81 verifyListenerState(listener1, ENTITY_1, true, false, true);
82 verifyNoNotifications(listener2);
84 registerCandidates(clusterNode, ENTITY_2, "member-2");
85 verifyListenerState(listener1, ENTITY_1, true, false, true);
86 verifyListenerState(listener2, ENTITY_2, true, false, false);
88 unregisterCandidates(clusterNode, ENTITY_2, "member-2");
90 verifyListenerState(listener1, ENTITY_1, true, false, true);
91 verifyListenerState(listener2, ENTITY_2, false, false, false);