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.mockito.MockitoAnnotations;
29 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
30 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
31 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
32 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipCandidateRegistration;
33 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
34 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
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.ClusterSingletonServiceRegistration;
38 import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier;
41 * Abstract {@link DOMClusterSingletonServiceProviderImpl} testing substrate.
43 public abstract class AbstractDOMClusterServiceProviderTest {
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 ServiceGroupIdentifier SERVICE_ID = ServiceGroupIdentifier.create(SERVICE_NAME);
65 private TestClusterSingletonServiceState serviceState = TestClusterSingletonServiceState.INITIALIZED;
68 public final ServiceGroupIdentifier getIdentifier() {
73 public final void instantiateServiceInstance() {
74 this.serviceState = TestClusterSingletonServiceState.STARTED;
77 final TestClusterSingletonServiceState getServiceState() {
82 public ListenableFuture<Void> closeServiceInstance() {
83 this.serviceState = TestClusterSingletonServiceState.DESTROYED;
84 return Futures.immediateFuture(null);
88 static final String SERVICE_NAME = "testServiceName";
89 static final DOMEntity ENTITY = new DOMEntity(SERVICE_ENTITY_TYPE, SERVICE_NAME);
90 static final DOMEntity DOUBLE_ENTITY = new DOMEntity(CLOSE_SERVICE_ENTITY_TYPE, SERVICE_NAME);
93 protected DOMEntityOwnershipService mockEos;
95 protected DOMEntityOwnershipCandidateRegistration mockEntityCandReg;
97 protected DOMEntityOwnershipCandidateRegistration mockDoubleEntityCandReg;
99 protected DOMEntityOwnershipListenerRegistration mockEosEntityListReg;
101 protected DOMEntityOwnershipListenerRegistration mockEosDoubleEntityListReg;
103 protected DOMClusterSingletonServiceProviderImpl clusterSingletonServiceProvider;
104 protected TestClusterSingletonService clusterSingletonService;
105 protected TestClusterSingletonService clusterSingletonService2;
108 public void setup() throws CandidateAlreadyRegisteredException {
109 MockitoAnnotations.initMocks(this);
111 doNothing().when(mockEosEntityListReg).close();
112 doNothing().when(mockEosDoubleEntityListReg).close();
113 doNothing().when(mockEntityCandReg).close();
114 doNothing().when(mockDoubleEntityCandReg).close();
115 doReturn(mockEosEntityListReg).when(mockEos).registerListener(eq(SERVICE_ENTITY_TYPE),
116 any(DOMClusterSingletonServiceProviderImpl.class));
117 doReturn(mockEosDoubleEntityListReg).when(mockEos).registerListener(eq(CLOSE_SERVICE_ENTITY_TYPE),
118 any(DOMClusterSingletonServiceProviderImpl.class));
119 doReturn(mockEntityCandReg).when(mockEos).registerCandidate(ENTITY);
120 doReturn(mockDoubleEntityCandReg).when(mockEos).registerCandidate(DOUBLE_ENTITY);
122 clusterSingletonServiceProvider = new DOMClusterSingletonServiceProviderImpl(mockEos);
123 clusterSingletonServiceProvider.initializeProvider();
124 verify(mockEos).registerListener(SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
125 verify(mockEos).registerListener(CLOSE_SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
127 clusterSingletonService = instantiateService();
128 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
129 clusterSingletonService2 = instantiateService();
130 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
133 TestClusterSingletonService instantiateService() {
134 return new TestClusterSingletonService();
137 static final DOMEntityOwnershipChange getEntityToMaster() {
138 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED);
141 static final DOMEntityOwnershipChange getEntityToSlave() {
142 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_LOST_NEW_OWNER);
145 static final DOMEntityOwnershipChange getInitEntityToSlave() {
146 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_CHANGED);
149 static final DOMEntityOwnershipChange getInitEntityToSlaveNoMaster() {
150 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_LOST_NO_OWNER);
153 static final DOMEntityOwnershipChange getEntityToJeopardy() {
154 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_LOST_NO_OWNER, true);
157 static final DOMEntityOwnershipChange getEntityMasterJeopardy() {
158 return new DOMEntityOwnershipChange(ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_RETAINED_WITH_NO_CHANGE,
162 static final DOMEntityOwnershipChange getDoubleEntityToMaster() {
163 return new DOMEntityOwnershipChange(DOUBLE_ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED);
166 static final DOMEntityOwnershipChange getInitDoubleEntityToSlave() {
167 return new DOMEntityOwnershipChange(DOUBLE_ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_CHANGED);
170 static final DOMEntityOwnershipChange getDoubleEntityToSlave() {
171 return new DOMEntityOwnershipChange(DOUBLE_ENTITY, EntityOwnershipChangeState.LOCAL_OWNERSHIP_LOST_NEW_OWNER);
174 static final DOMEntityOwnershipChange getDoubleEntityToJeopardy() {
175 return new DOMEntityOwnershipChange(DOUBLE_ENTITY, EntityOwnershipChangeState.REMOTE_OWNERSHIP_LOST_NO_OWNER,
179 static final DOMEntityOwnershipChange getDoubleEntityMasterJeopardy() {
180 return new DOMEntityOwnershipChange(DOUBLE_ENTITY,
181 EntityOwnershipChangeState.LOCAL_OWNERSHIP_RETAINED_WITH_NO_CHANGE, true);
185 * Test checks NullPointer for null {@link DOMEntityOwnershipService} input value.
187 @Test(expected = NullPointerException.class)
188 public void initializationClusterSingletonServiceProviderNullInputTest() {
189 new DOMClusterSingletonServiceProviderImpl(null).close();
193 * Test GoldPath for close {@link DOMClusterSingletonServiceProviderImpl}.
195 * @throws Exception if the condition does not meet
198 public void closeClusterSingletonServiceProviderTest() throws Exception {
199 verify(mockEos).registerListener(SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
200 verify(mockEos).registerListener(CLOSE_SERVICE_ENTITY_TYPE, clusterSingletonServiceProvider);
201 clusterSingletonServiceProvider.close();
202 verify(mockEosEntityListReg).close();
203 verify(mockEosDoubleEntityListReg).close();
207 * Test parser ServiceIdentifier from Entity.
210 public void makeEntityClusterSingletonServiceProviderTest() {
211 final DOMEntity testEntity = clusterSingletonServiceProvider.createEntity(SERVICE_ENTITY_TYPE, SERVICE_NAME);
212 assertEquals(ENTITY, testEntity);
213 final DOMEntity testDbEn = clusterSingletonServiceProvider.createEntity(CLOSE_SERVICE_ENTITY_TYPE,
215 assertEquals(DOUBLE_ENTITY, testDbEn);
219 * Test parser ServiceIdentifier from Entity.
222 public void getIdentifierClusterSingletonServiceProviderTest() {
223 final String entityIdentifier = clusterSingletonServiceProvider.getServiceIdentifierFromEntity(ENTITY);
224 assertEquals(SERVICE_NAME, entityIdentifier);
225 final String doubleEntityId = clusterSingletonServiceProvider.getServiceIdentifierFromEntity(DOUBLE_ENTITY);
226 assertEquals(SERVICE_NAME, doubleEntityId);
230 * Test GoldPath for initialization {@link ClusterSingletonService}.
232 * @throws CandidateAlreadyRegisteredException if the condition does not meet
235 public void initializationClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
236 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
237 .registerClusterSingletonService(clusterSingletonService);
239 verify(mockEos).registerCandidate(ENTITY);
240 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
244 * Test GoldPath for initialization with init ownership result SLAVE {@link ClusterSingletonService}.
246 * @throws CandidateAlreadyRegisteredException if the condition does not meet
249 public void slaveInitClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
250 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
251 .registerClusterSingletonService(clusterSingletonService);
253 verify(mockEos).registerCandidate(ENTITY);
254 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlave());
255 verify(mockEos, never()).registerCandidate(DOUBLE_ENTITY);
256 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
260 * Test GoldPath for initialization with init ownership result SLAVE, but NO-MASTER {@link ClusterSingletonService}.
262 * @throws CandidateAlreadyRegisteredException if the condition does not meet
265 public void slaveInitNoMasterClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
266 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
267 .registerClusterSingletonService(clusterSingletonService);
269 verify(mockEos).registerCandidate(ENTITY);
270 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlaveNoMaster());
271 verify(mockEos, never()).registerCandidate(DOUBLE_ENTITY);
272 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
276 * Test GoldPath for initialization with init ownership result MASTER {@link ClusterSingletonService}.
278 * @throws CandidateAlreadyRegisteredException if the condition does not meet
281 public void masterInitClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
282 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
283 .registerClusterSingletonService(clusterSingletonService);
285 verify(mockEos).registerCandidate(ENTITY);
286 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
287 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
288 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
292 * Test GoldPath for initialization with init ownership result MASTER {@link ClusterSingletonService}.
294 * @throws CandidateAlreadyRegisteredException if the condition does not meet
297 public void masterInitSlaveDoubleCandidateClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
298 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
299 .registerClusterSingletonService(clusterSingletonService);
301 verify(mockEos).registerCandidate(ENTITY);
302 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
303 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
304 clusterSingletonServiceProvider.ownershipChanged(getInitDoubleEntityToSlave());
305 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
309 * Test GoldPath for takeLeadership with ownership result MASTER {@link ClusterSingletonService}.
311 * @throws CandidateAlreadyRegisteredException if the condition does not meet
314 public void takeLeadershipClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
315 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
316 .registerClusterSingletonService(clusterSingletonService);
318 verify(mockEos).registerCandidate(ENTITY);
319 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
320 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
321 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
322 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
323 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
327 * Test GoldPath for initialization with init ownership result MASTER {@link ClusterSingletonService}.
329 * @throws CandidateAlreadyRegisteredException if the condition does not meet
332 public void masterInitClusterSingletonServiceTwoServicesTest() throws CandidateAlreadyRegisteredException {
333 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
334 .registerClusterSingletonService(clusterSingletonService);
336 verify(mockEos).registerCandidate(ENTITY);
337 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
338 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
339 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
340 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
341 .registerClusterSingletonService(clusterSingletonService2);
343 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
347 * Test GoldPath for takeLeadership with ownership result MASTER {@link ClusterSingletonService}.
349 * @throws CandidateAlreadyRegisteredException if the condition does not meet
352 public void takeLeadershipClusterSingletonServiceTwoAddDuringWaitPhaseServicesTest()
353 throws CandidateAlreadyRegisteredException {
354 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
355 .registerClusterSingletonService(clusterSingletonService);
357 verify(mockEos).registerCandidate(ENTITY);
358 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
359 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
360 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
361 .registerClusterSingletonService(clusterSingletonService2);
363 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
364 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
365 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
366 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
367 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
371 * Test checks CandidateAlreadyRegisteredException processing in initialization phase.
373 * @throws CandidateAlreadyRegisteredException if the condition does not meet
375 @Test(expected = RuntimeException.class)
376 public void initializationClusterSingletonServiceCandidateAlreadyRegistredTest()
377 throws CandidateAlreadyRegisteredException {
378 doThrow(CandidateAlreadyRegisteredException.class).when(mockEos).registerCandidate(ENTITY);
379 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
380 .registerClusterSingletonService(clusterSingletonService);
385 * Test GoldPath for lostLeadership during tryToTakeLeadership with ownership result MASTER
386 * {@link ClusterSingletonService}.
388 * @throws CandidateAlreadyRegisteredException if the condition does not meet
391 public void lostLeadershipDuringTryToTakeLeadershipClusterSingletonServiceTest()
392 throws CandidateAlreadyRegisteredException {
393 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
394 .registerClusterSingletonService(clusterSingletonService);
396 verify(mockEos).registerCandidate(ENTITY);
397 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
398 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
399 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
400 clusterSingletonServiceProvider.ownershipChanged(getEntityToSlave());
401 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
402 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
403 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
407 * Test GoldPath for lostLeadership with ownership result MASTER-TO-SLAVE {@link ClusterSingletonService}.
409 * @throws CandidateAlreadyRegisteredException if the condition does not meet
412 public void lostLeadershipClusterSingletonServiceTest() throws CandidateAlreadyRegisteredException {
413 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
414 .registerClusterSingletonService(clusterSingletonService);
416 verify(mockEos).registerCandidate(ENTITY);
417 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
418 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
419 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
420 clusterSingletonServiceProvider.ownershipChanged(getInitDoubleEntityToSlave());
421 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
422 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
423 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
424 clusterSingletonServiceProvider.ownershipChanged(getEntityToSlave());
425 assertEquals(TestClusterSingletonServiceState.DESTROYED, clusterSingletonService.getServiceState());
429 * Test checks inJeopardy Cluster Node state for Slave Instance.
431 * @throws CandidateAlreadyRegisteredException if the condition does not meet
434 public void inJeopardySlaveTest() throws CandidateAlreadyRegisteredException {
435 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
436 .registerClusterSingletonService(clusterSingletonService);
438 verify(mockEos).registerCandidate(ENTITY);
439 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlave());
440 verify(mockEos, never()).registerCandidate(DOUBLE_ENTITY);
441 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
442 clusterSingletonServiceProvider.ownershipChanged(getEntityToJeopardy());
443 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
444 verify(mockEosEntityListReg, never()).close();
445 verify(mockEosDoubleEntityListReg, never()).close();
446 verify(mockEntityCandReg, never()).close();
447 verify(mockDoubleEntityCandReg, never()).close();
451 * Test GoldPath for takeLeadership with ownership result MASTER {@link ClusterSingletonService}.
453 * @throws CandidateAlreadyRegisteredException if the condition does not meet
456 public void takeLeadershipClusterSingletonServiceTowServicesTest() throws CandidateAlreadyRegisteredException {
457 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
458 .registerClusterSingletonService(clusterSingletonService);
460 verify(mockEos).registerCandidate(ENTITY);
461 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
462 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
463 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
464 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
465 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
466 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
467 .registerClusterSingletonService(clusterSingletonService2);
469 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
473 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
475 * @throws Exception if the condition does not meet
478 public void closeClusterSingletonServiceRegistrationNoRoleTest() throws Exception {
479 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
480 .registerClusterSingletonService(clusterSingletonService);
482 verify(mockEos).registerCandidate(ENTITY);
483 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
485 verify(mockEosEntityListReg, never()).close();
486 verify(mockEosDoubleEntityListReg, never()).close();
487 verify(mockEntityCandReg).close();
488 verify(mockDoubleEntityCandReg, never()).close();
489 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
493 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
495 * @throws Exception if the condition does not meet
498 public void closeClusterSingletonServiceRegistrationNoRoleTwoServicesTest() throws Exception {
499 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
500 .registerClusterSingletonService(clusterSingletonService);
502 verify(mockEos).registerCandidate(ENTITY);
503 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
504 .registerClusterSingletonService(clusterSingletonService2);
506 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
507 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
509 verify(mockEosEntityListReg, never()).close();
510 verify(mockEosDoubleEntityListReg, never()).close();
511 verify(mockEntityCandReg, never()).close();
512 verify(mockDoubleEntityCandReg, never()).close();
513 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
514 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
518 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
520 * @throws Exception if the condition does not meet
523 public void closeClusterSingletonServiceRegistrationSlaveTest() throws Exception {
524 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
525 .registerClusterSingletonService(clusterSingletonService);
527 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
528 verify(mockEos).registerCandidate(ENTITY);
529 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlave());
531 verify(mockEosEntityListReg, never()).close();
532 verify(mockEosDoubleEntityListReg, never()).close();
533 verify(mockEntityCandReg).close();
534 verify(mockDoubleEntityCandReg, never()).close();
535 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
539 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
541 * @throws Exception if the condition does not meet
544 public void closeClusterSingletonServiceRegistrationSlaveTwoServicesTest() throws Exception {
545 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
546 .registerClusterSingletonService(clusterSingletonService);
548 verify(mockEos).registerCandidate(ENTITY);
549 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
550 .registerClusterSingletonService(clusterSingletonService2);
552 clusterSingletonServiceProvider.ownershipChanged(getInitEntityToSlave());
553 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
554 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
556 verify(mockEosEntityListReg, never()).close();
557 verify(mockEosDoubleEntityListReg, never()).close();
558 verify(mockEntityCandReg, never()).close();
559 verify(mockDoubleEntityCandReg, never()).close();
560 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
561 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
565 * Test checks close processing for {@link ClusterSingletonServiceRegistration}.
567 * @throws Exception if the condition does not meet
570 public void closeClusterSingletonServiceRegistrationMasterTwoServicesTest() throws Exception {
571 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
572 .registerClusterSingletonService(clusterSingletonService);
574 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
575 .registerClusterSingletonService(clusterSingletonService2);
577 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
578 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
579 verify(mockEos).registerCandidate(ENTITY);
580 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
581 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
582 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
583 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService.getServiceState());
584 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
586 verify(mockEosEntityListReg, never()).close();
587 verify(mockEosDoubleEntityListReg, never()).close();
588 verify(mockEntityCandReg, never()).close();
589 verify(mockDoubleEntityCandReg, never()).close();
590 assertEquals(TestClusterSingletonServiceState.DESTROYED, clusterSingletonService.getServiceState());
591 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
595 * Test checks validation Error processing for SLAVE-TO-MASTER entity Candidate role change.
597 * @throws Exception if the condition does not meet
600 public void tryToTakeLeaderForClosedServiceRegistrationTest() throws Exception {
601 final ClusterSingletonServiceRegistration reg = clusterSingletonServiceProvider
602 .registerClusterSingletonService(clusterSingletonService);
604 final ClusterSingletonServiceRegistration reg2 = clusterSingletonServiceProvider
605 .registerClusterSingletonService(clusterSingletonService2);
607 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
608 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService2.getServiceState());
609 verify(mockEos).registerCandidate(ENTITY);
611 clusterSingletonServiceProvider.ownershipChanged(getEntityToMaster());
612 verify(mockEos).registerCandidate(DOUBLE_ENTITY);
613 clusterSingletonServiceProvider.ownershipChanged(getDoubleEntityToMaster());
614 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
615 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());
616 verify(mockEosEntityListReg, never()).close();
617 verify(mockEosDoubleEntityListReg, never()).close();
618 verify(mockEntityCandReg, never()).close();
619 verify(mockDoubleEntityCandReg, never()).close();
620 assertEquals(TestClusterSingletonServiceState.INITIALIZED, clusterSingletonService.getServiceState());
621 assertEquals(TestClusterSingletonServiceState.STARTED, clusterSingletonService2.getServiceState());