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.assertNull;
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.singleton.dom.impl.AbstractClusterSingletonServiceProviderImpl.CLOSE_SERVICE_ENTITY_TYPE;
21 import static org.opendaylight.mdsal.singleton.dom.impl.AbstractClusterSingletonServiceProviderImpl.SERVICE_ENTITY_TYPE;
23 import com.google.common.util.concurrent.Futures;
24 import com.google.common.util.concurrent.ListenableFuture;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.Mock;
28 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
29 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
30 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
31 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipCandidateRegistration;
32 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
33 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
34 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
35 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonService;
36 import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceRegistration;
37 import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
40 * Abstract {@link DOMClusterSingletonServiceProviderImpl} testing substrate.
42 public abstract class AbstractDOMClusterServiceProviderTest {
44 * Base states for AbstractClusterProjectProvider.
46 enum TestClusterSingletonServiceState {
48 * State represents a correct Instantiated process.
52 * State represents a correct call abstract method instantiatingProject.
56 * State represents a correct call abstract method destryingProject.
61 static class TestClusterSingletonService implements ClusterSingletonService {
62 private static final ServiceGroupIdentifier SERVICE_ID = ServiceGroupIdentifier.create(SERVICE_NAME);
64 private TestClusterSingletonServiceState serviceState = TestClusterSingletonServiceState.INITIALIZED;
67 public final ServiceGroupIdentifier getIdentifier() {
72 public final void instantiateServiceInstance() {
73 this.serviceState = TestClusterSingletonServiceState.STARTED;
76 final TestClusterSingletonServiceState getServiceState() {
81 public ListenableFuture<Void> closeServiceInstance() {
82 this.serviceState = TestClusterSingletonServiceState.DESTROYED;
83 return Futures.immediateFuture(null);
87 public static final String SERVICE_NAME = "testServiceName";
88 public static final DOMEntity ENTITY = new DOMEntity(SERVICE_ENTITY_TYPE, SERVICE_NAME);
89 public static final DOMEntity DOUBLE_ENTITY = new DOMEntity(CLOSE_SERVICE_ENTITY_TYPE, SERVICE_NAME);
92 public DOMEntityOwnershipService mockEos;
94 public DOMEntityOwnershipCandidateRegistration mockEntityCandReg;
96 public DOMEntityOwnershipCandidateRegistration mockDoubleEntityCandReg;
98 public DOMEntityOwnershipListenerRegistration mockEosEntityListReg;
100 public DOMEntityOwnershipListenerRegistration mockEosDoubleEntityListReg;
102 public DOMClusterSingletonServiceProviderImpl clusterSingletonServiceProvider;
103 public TestClusterSingletonService clusterSingletonService;
104 public TestClusterSingletonService clusterSingletonService2;
107 public void setup() throws CandidateAlreadyRegisteredException {
108 doNothing().when(mockEosEntityListReg).close();
109 doNothing().when(mockEosDoubleEntityListReg).close();
110 doNothing().when(mockEntityCandReg).close();
111 doNothing().when(mockDoubleEntityCandReg).close();
112 doReturn(mockEosEntityListReg).when(mockEos).registerListener(eq(SERVICE_ENTITY_TYPE),
113 any(DOMClusterSingletonServiceProviderImpl.class));
114 doReturn(mockEosDoubleEntityListReg).when(mockEos).registerListener(eq(CLOSE_SERVICE_ENTITY_TYPE),
115 any(DOMClusterSingletonServiceProviderImpl.class));
116 doReturn(mockEntityCandReg).when(mockEos).registerCandidate(ENTITY);
117 doReturn(mockDoubleEntityCandReg).when(mockEos).registerCandidate(DOUBLE_ENTITY);
119 clusterSingletonServiceProvider = new DOMClusterSingletonServiceProviderImpl(mockEos);
120 clusterSingletonServiceProvider.initializeProvider();
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();
134 static final DOMEntityOwnershipChange getEntityToMaster() {
135 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED);
138 static final DOMEntityOwnershipChange getEntityToSlave() {
139 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_LOST_NEW_OWNER);
142 static final DOMEntityOwnershipChange getInitEntityToSlave() {
143 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_CHANGED);
146 static final DOMEntityOwnershipChange getInitEntityToSlaveNoMaster() {
147 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_LOST_NO_OWNER);
150 static final DOMEntityOwnershipChange getEntityToJeopardy() {
151 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_LOST_NO_OWNER, true);
154 static final DOMEntityOwnershipChange getEntityMasterJeopardy() {
155 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_RETAINED_WITH_NO_CHANGE,
159 static final DOMEntityOwnershipChange getDoubleEntityToMaster() {
160 return new DOMEntityOwnershipChange(DOUBLE_ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED);
163 static final DOMEntityOwnershipChange getInitDoubleEntityToSlave() {
164 return new DOMEntityOwnershipChange(DOUBLE_ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_CHANGED);
167 static final DOMEntityOwnershipChange getDoubleEntityToSlave() {
168 return new DOMEntityOwnershipChange(DOUBLE_ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_LOST_NEW_OWNER);
171 static final DOMEntityOwnershipChange getDoubleEntityToJeopardy() {
172 return new DOMEntityOwnershipChange(DOUBLE_ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_LOST_NO_OWNER,
176 static final DOMEntityOwnershipChange getDoubleEntityMasterJeopardy() {
177 return new DOMEntityOwnershipChange(DOUBLE_ENTITY,
178 EntityOwnershipChangeState.LOCAL_OWNERSHIP_RETAINED_WITH_NO_CHANGE, true);
182 * Test checks NullPointer for null {@link DOMEntityOwnershipService} input value.
184 @Test(expected = NullPointerException.class)
185 public void initializationClusterSingletonServiceProviderNullInputTest() {
186 new DOMClusterSingletonServiceProviderImpl(null).close();
190 * Test GoldPath for close {@link DOMClusterSingletonServiceProviderImpl}.
192 * @throws Exception if the condition does not meet
195 public void closeClusterSingletonServiceProviderTest() throws Exception {
196 verify(mockEos).registerListener(SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
197 verify(mockEos).registerListener(CLOSE_SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
198 clusterSingletonServiceProvider.close();
199 verify(mockEosEntityListReg).close();
200 verify(mockEosDoubleEntityListReg).close();
204 * Test parser ServiceIdentifier from Entity.
207 public void makeEntityClusterSingletonServiceProviderTest() {
208 final DOMEntity testEntity = clusterSingletonServiceProvider.createEntity(SERVICE_ENTITY_TYPE, SERVICE_NAME);
209 assertEquals(ENTITY, testEntity);
210 final DOMEntity testDbEn = clusterSingletonServiceProvider.createEntity(CLOSE_SERVICE_ENTITY_TYPE,
212 assertEquals(DOUBLE_ENTITY, testDbEn);
216 * Test parser ServiceIdentifier from Entity.
219 public void getIdentifierClusterSingletonServiceProviderTest() {
220 final String entityIdentifier = clusterSingletonServiceProvider.getServiceIdentifierFromEntity(ENTITY);
221 assertEquals(SERVICE_NAME, entityIdentifier);
222 final String doubleEntityId = clusterSingletonServiceProvider.getServiceIdentifierFromEntity(DOUBLE_ENTITY);
223 assertEquals(SERVICE_NAME, doubleEntityId);
227 * Test GoldPath for initialization {@link ClusterSingletonService}.
229 * @throws CandidateAlreadyRegisteredException if the condition does not meet
232 public void initializationClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
233 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
234 .registerClusterSingletonService(clusterSingletonService);
236 verify(mockEos).registerCandidate(ENTITY);
237 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
241 * Test GoldPath for initialization with init ownership result SLAVE {@link ClusterSingletonService}.
243 * @throws CandidateAlreadyRegisteredException if the condition does not meet
246 public void slaveInitClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
247 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
248 .registerClusterSingletonService(clusterSingletonService);
250 verify(mockEos).registerCandidate(ENTITY);
251 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlave());
252 verify(mockEos, never()).registerCandidate(DOUBLE_ENTITY);
253 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
257 * Test GoldPath for initialization with init ownership result SLAVE, but NO-MASTER {@link ClusterSingletonService}.
259 * @throws CandidateAlreadyRegisteredException if the condition does not meet
262 public void slaveInitNoMasterClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
263 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
264 .registerClusterSingletonService(clusterSingletonService);
266 verify(mockEos).registerCandidate(ENTITY);
267 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlaveNoMaster());
268 verify(mockEos, never()).registerCandidate(DOUBLE_ENTITY);
269 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
273 * Test GoldPath for initialization with init ownership result MASTER {@link ClusterSingletonService}.
275 * @throws CandidateAlreadyRegisteredException if the condition does not meet
278 public void masterInitClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
279 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
280 .registerClusterSingletonService(clusterSingletonService);
282 verify(mockEos).registerCandidate(ENTITY);
283 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
284 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
285 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
289 * Test GoldPath for initialization with init ownership result MASTER {@link ClusterSingletonService}.
291 * @throws CandidateAlreadyRegisteredException if the condition does not meet
294 public void masterInitSlaveDoubleCandidateClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
295 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
296 .registerClusterSingletonService(clusterSingletonService);
298 verify(mockEos).registerCandidate(ENTITY);
299 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
300 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
301 clusterSingletonServiceProvider.ownershipChanged(getInitDoubleEntityToSlave());
302 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
306 * Test GoldPath for takeLeadership with ownership result MASTER {@link ClusterSingletonService}.
308 * @throws CandidateAlreadyRegisteredException if the condition does not meet
311 public void takeLeadershipClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
312 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
313 .registerClusterSingletonService(clusterSingletonService);
315 verify(mockEos).registerCandidate(ENTITY);
316 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
317 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
318 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
319 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
320 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
324 * Test GoldPath for initialization with init ownership result MASTER {@link ClusterSingletonService}.
326 * @throws CandidateAlreadyRegisteredException if the condition does not meet
329 public void masterInitClusterSingletonServiceTwoServicesTest() throws CandidateAlreadyRegisteredException {
330 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
331 .registerClusterSingletonService(clusterSingletonService);
333 verify(mockEos).registerCandidate(ENTITY);
334 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
335 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
336 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
337 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
338 .registerClusterSingletonService(clusterSingletonService2);
340 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
344 * Test GoldPath for takeLeadership with ownership result MASTER {@link ClusterSingletonService}.
346 * @throws CandidateAlreadyRegisteredException if the condition does not meet
349 public void takeLeadershipClusterSingletonServiceTwoAddDuringWaitPhaseServicesTest()
350 throws CandidateAlreadyRegisteredException {
351 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
352 .registerClusterSingletonService(clusterSingletonService);
354 verify(mockEos).registerCandidate(ENTITY);
355 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
356 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
357 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
358 .registerClusterSingletonService(clusterSingletonService2);
360 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
361 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
362 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
363 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
364 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
368 * Test checks CandidateAlreadyRegisteredException processing in initialization phase.
370 * @throws CandidateAlreadyRegisteredException if the condition does not meet
372 @Test(expected = RuntimeException.class)
373 public void initializationClusterSingletonServiceCandidateAlreadyRegistredTest()
374 throws CandidateAlreadyRegisteredException {
375 doThrow(CandidateAlreadyRegisteredException.class).when(mockEos).registerCandidate(ENTITY);
376 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
377 .registerClusterSingletonService(clusterSingletonService);
382 * Test GoldPath for lostLeadership during tryToTakeLeadership with ownership result MASTER
383 * {@link ClusterSingletonService}.
385 * @throws CandidateAlreadyRegisteredException if the condition does not meet
388 public void lostLeadershipDuringTryToTakeLeadershipClusterSingletonServiceTest()
389 throws CandidateAlreadyRegisteredException {
390 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
391 .registerClusterSingletonService(clusterSingletonService);
393 verify(mockEos).registerCandidate(ENTITY);
394 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
395 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
396 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
397 clusterSingletonServiceProvider.ownershipChanged(getEntityToSlave());
398 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
399 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
400 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
404 * Test GoldPath for lostLeadership with ownership result MASTER-TO-SLAVE {@link ClusterSingletonService}.
406 * @throws CandidateAlreadyRegisteredException if the condition does not meet
409 public void lostLeadershipClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
410 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
411 .registerClusterSingletonService(clusterSingletonService);
413 verify(mockEos).registerCandidate(ENTITY);
414 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
415 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
416 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
417 clusterSingletonServiceProvider.ownershipChanged(getInitDoubleEntityToSlave());
418 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
419 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
420 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
421 clusterSingletonServiceProvider.ownershipChanged(getEntityToSlave());
422 assertEquals(TestClusterSingletonServiceState.DESTROYED, clusterSingletonService.getServiceState());
426 * Test checks inJeopardy Cluster Node state for Slave Instance.
428 * @throws CandidateAlreadyRegisteredException if the condition does not meet
431 public void inJeopardySlaveTest() throws CandidateAlreadyRegisteredException {
432 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
433 .registerClusterSingletonService(clusterSingletonService);
435 verify(mockEos).registerCandidate(ENTITY);
436 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlave());
437 verify(mockEos, never()).registerCandidate(DOUBLE_ENTITY);
438 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
439 clusterSingletonServiceProvider.ownershipChanged(getEntityToJeopardy());
440 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
441 verify(mockEosEntityListReg, never()).close();
442 verify(mockEosDoubleEntityListReg, never()).close();
443 verify(mockEntityCandReg, never()).close();
444 verify(mockDoubleEntityCandReg, never()).close();
448 * Test GoldPath for takeLeadership with ownership result MASTER {@link ClusterSingletonService}.
450 * @throws CandidateAlreadyRegisteredException if the condition does not meet
453 public void takeLeadershipClusterSingletonServiceTowServicesTest() throws CandidateAlreadyRegisteredException {
454 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
455 .registerClusterSingletonService(clusterSingletonService);
457 verify(mockEos).registerCandidate(ENTITY);
458 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
459 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
460 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
461 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
462 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
463 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
464 .registerClusterSingletonService(clusterSingletonService2);
466 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
470 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
472 * @throws Exception if the condition does not meet
475 public void closeClusterSingletonServiceRegistrationNoRoleTest() throws Exception {
476 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
477 .registerClusterSingletonService(clusterSingletonService);
479 verify(mockEos).registerCandidate(ENTITY);
480 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
482 verify(mockEosEntityListReg, never()).close();
483 verify(mockEosDoubleEntityListReg, never()).close();
484 verify(mockEntityCandReg).close();
485 verify(mockDoubleEntityCandReg, never()).close();
486 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
490 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
492 * @throws Exception if the condition does not meet
495 public void closeClusterSingletonServiceRegistrationNoRoleTwoServicesTest() throws Exception {
496 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
497 .registerClusterSingletonService(clusterSingletonService);
499 verify(mockEos).registerCandidate(ENTITY);
500 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
501 .registerClusterSingletonService(clusterSingletonService2);
503 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
504 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
506 verify(mockEosEntityListReg, never()).close();
507 verify(mockEosDoubleEntityListReg, never()).close();
508 verify(mockEntityCandReg, never()).close();
509 verify(mockDoubleEntityCandReg, never()).close();
510 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
511 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
515 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
517 * @throws Exception if the condition does not meet
520 public void closeClusterSingletonServiceRegistrationSlaveTest() throws Exception {
521 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
522 .registerClusterSingletonService(clusterSingletonService);
524 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
525 verify(mockEos).registerCandidate(ENTITY);
526 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlave());
528 verify(mockEosEntityListReg, never()).close();
529 verify(mockEosDoubleEntityListReg, never()).close();
530 verify(mockEntityCandReg).close();
531 verify(mockDoubleEntityCandReg, never()).close();
532 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
536 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
538 * @throws Exception if the condition does not meet
541 public void closeClusterSingletonServiceRegistrationSlaveTwoServicesTest() throws Exception {
542 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
543 .registerClusterSingletonService(clusterSingletonService);
545 verify(mockEos).registerCandidate(ENTITY);
546 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
547 .registerClusterSingletonService(clusterSingletonService2);
549 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlave());
550 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
551 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
553 verify(mockEosEntityListReg, never()).close();
554 verify(mockEosDoubleEntityListReg, never()).close();
555 verify(mockEntityCandReg, never()).close();
556 verify(mockDoubleEntityCandReg, never()).close();
557 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
558 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
562 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
564 * @throws Exception if the condition does not meet
567 public void closeClusterSingletonServiceRegistrationMasterTwoServicesTest() throws Exception {
568 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
569 .registerClusterSingletonService(clusterSingletonService);
571 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
572 .registerClusterSingletonService(clusterSingletonService2);
574 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
575 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
576 verify(mockEos).registerCandidate(ENTITY);
577 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
578 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
579 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
580 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
581 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
583 verify(mockEosEntityListReg, never()).close();
584 verify(mockEosDoubleEntityListReg, never()).close();
585 verify(mockEntityCandReg, never()).close();
586 verify(mockDoubleEntityCandReg, never()).close();
587 assertEquals(TestClusterSingletonServiceState.DESTROYED, clusterSingletonService.getServiceState());
588 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
592 * Test checks validation Error processing for SLAVE-TO-MASTER entity Candidate role change.
594 * @throws Exception if the condition does not meet
597 public void tryToTakeLeaderForClosedServiceRegistrationTest() throws Exception {
598 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
599 .registerClusterSingletonService(clusterSingletonService);
601 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
602 .registerClusterSingletonService(clusterSingletonService2);
604 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
605 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
606 verify(mockEos).registerCandidate(ENTITY);
608 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
609 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
610 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
611 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
612 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
613 verify(mockEosEntityListReg, never()).close();
614 verify(mockEosDoubleEntityListReg, never()).close();
615 verify(mockEntityCandReg, never()).close();
616 verify(mockDoubleEntityCandReg, never()).close();
617 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
618 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());