2 * Copyright (c) 2017 Pantheon Technologies, 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.mdsal.singleton.dom.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertThrows;
13 import static org.mockito.ArgumentMatchers.any;
14 import static org.mockito.ArgumentMatchers.eq;
15 import static org.mockito.Mockito.doNothing;
16 import static org.mockito.Mockito.doReturn;
17 import static org.mockito.Mockito.doThrow;
18 import static org.mockito.Mockito.never;
19 import static org.mockito.Mockito.verify;
20 import static org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange.LOCAL_OWNERSHIP_GRANTED;
21 import static org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange.LOCAL_OWNERSHIP_LOST_NEW_OWNER;
22 import static org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange.REMOTE_OWNERSHIP_CHANGED;
23 import static org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange.REMOTE_OWNERSHIP_LOST_NO_OWNER;
24 import static org.opendaylight.mdsal.singleton.dom.impl.EOSClusterSingletonServiceProvider.CLOSE_SERVICE_ENTITY_TYPE;
25 import static org.opendaylight.mdsal.singleton.dom.impl.EOSClusterSingletonServiceProvider.SERVICE_ENTITY_TYPE;
27 import com.google.common.util.concurrent.Futures;
28 import com.google.common.util.concurrent.ListenableFuture;
29 import org.eclipse.jdt.annotation.NonNull;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.mockito.Mock;
33 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
34 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
35 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
36 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
37 import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
38 import org.opendaylight.yangtools.concepts.Registration;
41 * Abstract {@link EOSClusterSingletonServiceProvider} testing substrate.
43 abstract class AbstractEOSClusterSingletonServiceProviderTest {
45 * Base states for AbstractClusterProjectProvider.
47 enum TestClusterSingletonServiceState {
49 * State represents a correct Instantiated process.
53 * State represents a correct call abstract method instantiatingProject.
57 * State represents a correct call abstract method destryingProject.
62 static class TestClusterSingletonService implements ClusterSingletonService {
63 private static final @NonNull ServiceGroupIdentifier SERVICE_ID = ServiceGroupIdentifier.create(SERVICE_NAME);
65 private TestClusterSingletonServiceState serviceState = TestClusterSingletonServiceState.INITIALIZED;
68 public final ServiceGroupIdentifier getIdentifier() {
73 public final void instantiateServiceInstance() {
74 serviceState = TestClusterSingletonServiceState.STARTED;
77 final TestClusterSingletonServiceState getServiceState() {
82 public ListenableFuture<Void> closeServiceInstance() {
83 serviceState = TestClusterSingletonServiceState.DESTROYED;
84 return Futures.immediateFuture(null);
88 static final @NonNull String SERVICE_NAME = "testServiceName";
89 static final @NonNull DOMEntity ENTITY = new DOMEntity(SERVICE_ENTITY_TYPE, SERVICE_NAME);
90 static final @NonNull DOMEntity DOUBLE_ENTITY = new DOMEntity(CLOSE_SERVICE_ENTITY_TYPE, SERVICE_NAME);
93 public DOMEntityOwnershipService mockEos;
95 public Registration mockEntityCandReg;
97 public Registration mockDoubleEntityCandReg;
99 public Registration mockEosEntityListReg;
101 public Registration mockEosDoubleEntityListReg;
103 EOSClusterSingletonServiceProvider clusterSingletonServiceProvider;
104 TestClusterSingletonService clusterSingletonService;
105 TestClusterSingletonService clusterSingletonService2;
108 public void setup() throws Exception {
109 doNothing().when(mockEosEntityListReg).close();
110 doNothing().when(mockEosDoubleEntityListReg).close();
111 doNothing().when(mockEntityCandReg).close();
112 doNothing().when(mockDoubleEntityCandReg).close();
113 doReturn(mockEosEntityListReg).when(mockEos).registerListener(eq(SERVICE_ENTITY_TYPE),
114 any(EOSClusterSingletonServiceProvider.class));
115 doReturn(mockEosDoubleEntityListReg).when(mockEos).registerListener(eq(CLOSE_SERVICE_ENTITY_TYPE),
116 any(EOSClusterSingletonServiceProvider.class));
117 doReturn(mockEntityCandReg).when(mockEos).registerCandidate(ENTITY);
118 doReturn(mockDoubleEntityCandReg).when(mockEos).registerCandidate(DOUBLE_ENTITY);
120 clusterSingletonServiceProvider = new EOSClusterSingletonServiceProvider(mockEos);
121 verify(mockEos).registerListener(SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
122 verify(mockEos).registerListener(CLOSE_SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
124 clusterSingletonService = instantiateService();
125 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
126 clusterSingletonService2 = instantiateService();
127 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
130 TestClusterSingletonService instantiateService() {
131 return new TestClusterSingletonService();
135 * Test checks NullPointer for null {@link DOMEntityOwnershipService} input value.
138 public void initializationClusterSingletonServiceProviderNullInputTest() {
139 assertThrows(NullPointerException.class, () -> new EOSClusterSingletonServiceProvider(null));
143 * Test GoldPath for close {@link EOSClusterSingletonServiceProvider}.
145 * @throws Exception if the condition does not meet
148 public void closeClusterSingletonServiceProviderTest() throws Exception {
149 verify(mockEos).registerListener(SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
150 verify(mockEos).registerListener(CLOSE_SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
151 clusterSingletonServiceProvider.close();
152 verify(mockEosEntityListReg).close();
153 verify(mockEosDoubleEntityListReg).close();
157 * Test parser ServiceIdentifier from Entity.
160 public void makeEntityClusterSingletonServiceProviderTest() {
161 final var testEntity = EOSClusterSingletonServiceProvider.createEntity(SERVICE_ENTITY_TYPE, SERVICE_NAME);
162 assertEquals(ENTITY, testEntity);
163 final var testDbEn = EOSClusterSingletonServiceProvider.createEntity(CLOSE_SERVICE_ENTITY_TYPE, SERVICE_NAME);
164 assertEquals(DOUBLE_ENTITY, testDbEn);
168 * Test parser ServiceIdentifier from Entity.
171 public void getIdentifierClusterSingletonServiceProviderTest() {
172 assertEquals(SERVICE_NAME, EOSClusterSingletonServiceProvider.getServiceIdentifierFromEntity(ENTITY));
173 assertEquals(SERVICE_NAME, EOSClusterSingletonServiceProvider.getServiceIdentifierFromEntity(DOUBLE_ENTITY));
177 * Test GoldPath for initialization {@link ClusterSingletonService}.
180 public void initializationClusterSingletonServiceTest() throws Exception {
181 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
183 verify(mockEos).registerCandidate(ENTITY);
184 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
188 * Test GoldPath for initialization with init ownership result SLAVE {@link ClusterSingletonService}.
191 public void slaveInitClusterSingletonServiceTest() throws Exception {
192 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
194 verify(mockEos).registerCandidate(ENTITY);
195 clusterSingletonServiceProvider.ownershipChanged(ENTITY, REMOTE_OWNERSHIP_CHANGED, false);
196 verify(mockEos, never()).registerCandidate(DOUBLE_ENTITY);
197 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
201 * Test GoldPath for initialization with init ownership result SLAVE, but NO-MASTER {@link ClusterSingletonService}.
204 public void slaveInitNoMasterClusterSingletonServiceTest() throws Exception {
205 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
207 verify(mockEos).registerCandidate(ENTITY);
208 clusterSingletonServiceProvider.ownershipChanged(ENTITY, REMOTE_OWNERSHIP_LOST_NO_OWNER, false);
209 verify(mockEos, never()).registerCandidate(DOUBLE_ENTITY);
210 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
214 * Test GoldPath for initialization with init ownership result MASTER {@link ClusterSingletonService}.
217 public void masterInitClusterSingletonServiceTest() throws Exception {
218 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
220 verify(mockEos).registerCandidate(ENTITY);
221 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
222 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
223 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
227 * Test GoldPath for initialization with init ownership result MASTER {@link ClusterSingletonService}.
230 public void masterInitSlaveDoubleCandidateClusterSingletonServiceTest() throws Exception {
231 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
233 verify(mockEos).registerCandidate(ENTITY);
234 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
235 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
236 clusterSingletonServiceProvider.ownershipChanged(DOUBLE_ENTITY, REMOTE_OWNERSHIP_CHANGED, false);
237 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
241 * Test GoldPath for takeLeadership with ownership result MASTER {@link ClusterSingletonService}.
244 public void takeLeadershipClusterSingletonServiceTest() throws Exception {
245 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
247 verify(mockEos).registerCandidate(ENTITY);
248 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
249 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
250 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
251 clusterSingletonServiceProvider.ownershipChanged(DOUBLE_ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
252 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
256 * Test GoldPath for initialization with init ownership result MASTER {@link ClusterSingletonService}.
259 public void masterInitClusterSingletonServiceTwoServicesTest() throws Exception {
260 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
262 verify(mockEos).registerCandidate(ENTITY);
263 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
264 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
265 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
266 final var reg2 = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService2);
268 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
272 * Test GoldPath for takeLeadership with ownership result MASTER {@link ClusterSingletonService}.
275 public void takeLeadershipClusterSingletonServiceTwoAddDuringWaitPhaseServicesTest() throws Exception {
276 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
278 verify(mockEos).registerCandidate(ENTITY);
279 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
280 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
281 final var reg2 = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService2);
283 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
284 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
285 clusterSingletonServiceProvider.ownershipChanged(DOUBLE_ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
286 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
287 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
291 * Test checks CandidateAlreadyRegisteredException processing in initialization phase.
294 public void initializationClusterSingletonServiceCandidateAlreadyRegistredTest() throws Exception {
295 doThrow(CandidateAlreadyRegisteredException.class).when(mockEos).registerCandidate(ENTITY);
296 assertThrows(RuntimeException.class,
297 () -> clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService));
301 * Test GoldPath for lostLeadership during tryToTakeLeadership with ownership result MASTER
302 * {@link ClusterSingletonService}.
305 public void lostLeadershipDuringTryToTakeLeadershipClusterSingletonServiceTest() throws Exception {
306 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
308 verify(mockEos).registerCandidate(ENTITY);
309 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
310 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
311 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
312 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_LOST_NEW_OWNER, false);
313 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
314 clusterSingletonServiceProvider.ownershipChanged(DOUBLE_ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
315 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
319 * Test GoldPath for lostLeadership with ownership result MASTER-TO-SLAVE {@link ClusterSingletonService}.
322 public void lostLeadershipClusterSingletonServiceTest() throws Exception {
323 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
325 verify(mockEos).registerCandidate(ENTITY);
326 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
327 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
328 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
329 clusterSingletonServiceProvider.ownershipChanged(DOUBLE_ENTITY, REMOTE_OWNERSHIP_CHANGED, false);
330 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
331 clusterSingletonServiceProvider.ownershipChanged(DOUBLE_ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
332 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
333 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_LOST_NEW_OWNER, false);
334 assertEquals(TestClusterSingletonServiceState.DESTROYED, clusterSingletonService.getServiceState());
338 * Test checks inJeopardy Cluster Node state for Slave Instance.
341 public void inJeopardySlaveTest() throws Exception {
342 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
344 verify(mockEos).registerCandidate(ENTITY);
345 clusterSingletonServiceProvider.ownershipChanged(ENTITY, REMOTE_OWNERSHIP_CHANGED, false);
346 verify(mockEos, never()).registerCandidate(DOUBLE_ENTITY);
347 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
348 clusterSingletonServiceProvider.ownershipChanged(ENTITY, REMOTE_OWNERSHIP_LOST_NO_OWNER, true);
349 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
350 verify(mockEosEntityListReg, never()).close();
351 verify(mockEosDoubleEntityListReg, never()).close();
352 verify(mockEntityCandReg, never()).close();
353 verify(mockDoubleEntityCandReg, never()).close();
357 * Test GoldPath for takeLeadership with ownership result MASTER {@link ClusterSingletonService}.
360 public void takeLeadershipClusterSingletonServiceTowServicesTest() throws Exception {
361 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
363 verify(mockEos).registerCandidate(ENTITY);
364 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
365 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
366 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
367 clusterSingletonServiceProvider.ownershipChanged(DOUBLE_ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
368 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
369 final var reg2 = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService2);
371 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
375 * Test checks close processing for {@link ServiceRegistration}.
378 public void closeClusterSingletonServiceRegistrationNoRoleTest() throws Exception {
379 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
381 verify(mockEos).registerCandidate(ENTITY);
382 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
384 verify(mockEosEntityListReg, never()).close();
385 verify(mockEosDoubleEntityListReg, never()).close();
386 verify(mockEntityCandReg).close();
387 verify(mockDoubleEntityCandReg, never()).close();
388 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
392 * Test checks close processing for {@link ServiceRegistration}.
395 public void closeClusterSingletonServiceRegistrationNoRoleTwoServicesTest() throws Exception {
396 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
398 verify(mockEos).registerCandidate(ENTITY);
399 final var reg2 = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService2);
401 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
402 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
404 verify(mockEosEntityListReg, never()).close();
405 verify(mockEosDoubleEntityListReg, never()).close();
406 verify(mockEntityCandReg, never()).close();
407 verify(mockDoubleEntityCandReg, never()).close();
408 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
409 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
413 * Test checks close processing for {@link ServiceRegistration}.
416 public void closeClusterSingletonServiceRegistrationSlaveTest() throws Exception {
417 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
419 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
420 verify(mockEos).registerCandidate(ENTITY);
421 clusterSingletonServiceProvider.ownershipChanged(ENTITY, REMOTE_OWNERSHIP_CHANGED, false);
423 verify(mockEosEntityListReg, never()).close();
424 verify(mockEosDoubleEntityListReg, never()).close();
425 verify(mockEntityCandReg).close();
426 verify(mockDoubleEntityCandReg, never()).close();
427 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
431 * Test checks close processing for {@link ServiceRegistration}.
434 public void closeClusterSingletonServiceRegistrationSlaveTwoServicesTest() throws Exception {
435 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
437 verify(mockEos).registerCandidate(ENTITY);
438 final var reg2 = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService2);
440 clusterSingletonServiceProvider.ownershipChanged(ENTITY, REMOTE_OWNERSHIP_CHANGED, false);
441 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
442 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
444 verify(mockEosEntityListReg, never()).close();
445 verify(mockEosDoubleEntityListReg, never()).close();
446 verify(mockEntityCandReg, never()).close();
447 verify(mockDoubleEntityCandReg, never()).close();
448 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
449 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
453 * Test checks close processing for {@link ServiceRegistration}.
456 public void closeClusterSingletonServiceRegistrationMasterTwoServicesTest() throws Exception {
457 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
459 final var reg2 = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService2);
461 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
462 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
463 verify(mockEos).registerCandidate(ENTITY);
464 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
465 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
466 clusterSingletonServiceProvider.ownershipChanged(DOUBLE_ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
467 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
468 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
470 verify(mockEosEntityListReg, never()).close();
471 verify(mockEosDoubleEntityListReg, never()).close();
472 verify(mockEntityCandReg, never()).close();
473 verify(mockDoubleEntityCandReg, never()).close();
474 assertEquals(TestClusterSingletonServiceState.DESTROYED, clusterSingletonService.getServiceState());
475 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
479 * Test checks validation Error processing for SLAVE-TO-MASTER entity Candidate role change.
482 public void tryToTakeLeaderForClosedServiceRegistrationTest() throws Exception {
483 final var reg = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService);
485 final var reg2 = clusterSingletonServiceProvider.registerClusterSingletonService(clusterSingletonService2);
487 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
488 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
489 verify(mockEos).registerCandidate(ENTITY);
491 clusterSingletonServiceProvider.ownershipChanged(ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
492 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
493 clusterSingletonServiceProvider.ownershipChanged(DOUBLE_ENTITY, LOCAL_OWNERSHIP_GRANTED, false);
494 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
495 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
496 verify(mockEosEntityListReg, never()).close();
497 verify(mockEosDoubleEntityListReg, never()).close();
498 verify(mockEntityCandReg, never()).close();
499 verify(mockDoubleEntityCandReg, never()).close();
500 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
501 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());