+
+ service.close();
+ }
+
+ @Test
+ public void testRegisterCandidate() throws Exception {
+ DistributedEntityOwnershipService service = spy(DistributedEntityOwnershipService.start(
+ dataStore.getActorUtils(), EntityOwnerSelectionStrategyConfig.newBuilder().build()));
+
+ YangInstanceIdentifier entityId = YangInstanceIdentifier.of(QNAME);
+ DOMEntity entity = new DOMEntity(ENTITY_TYPE, entityId);
+
+ DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(entity);
+ verifyRegisterCandidateLocal(service, entity);
+ verifyEntityOwnershipCandidateRegistration(entity, reg);
+ verifyEntityCandidate(service.getLocalEntityOwnershipShard(), ENTITY_TYPE, entityId,
+ dataStore.getActorUtils().getCurrentMemberName().getName());
+
+ // Register the same entity - should throw exception
+
+ try {
+ service.registerCandidate(entity);
+ fail("Expected CandidateAlreadyRegisteredException");
+ } catch (CandidateAlreadyRegisteredException e) {
+ // expected
+ assertEquals("getEntity", entity, e.getEntity());
+ }
+
+ // Register a different entity - should succeed
+ reset(service);
+
+ DOMEntity entity2 = new DOMEntity(ENTITY_TYPE2, entityId);
+ DOMEntityOwnershipCandidateRegistration reg2 = service.registerCandidate(entity2);
+
+ verifyEntityOwnershipCandidateRegistration(entity2, reg2);
+ verifyEntityCandidate(service.getLocalEntityOwnershipShard(), ENTITY_TYPE2, entityId,
+ dataStore.getActorUtils().getCurrentMemberName().getName());
+
+ service.close();
+ }
+
+ @Test
+ public void testCloseCandidateRegistration() throws Exception {
+ DistributedEntityOwnershipService service = spy(DistributedEntityOwnershipService.start(
+ dataStore.getActorUtils(), EntityOwnerSelectionStrategyConfig.newBuilder().build()));
+
+ DOMEntity entity = new DOMEntity(ENTITY_TYPE, YangInstanceIdentifier.of(QNAME));
+
+ DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(entity);
+
+ verifyEntityOwnershipCandidateRegistration(entity, reg);
+ verifyRegisterCandidateLocal(service, entity);
+
+ reset(service);
+ reg.close();
+ UnregisterCandidateLocal unregCandidate = verifyMessage(service, UnregisterCandidateLocal.class);
+ assertEquals("getEntity", entity, unregCandidate.getEntity());
+
+ // Re-register - should succeed.
+ reset(service);
+ service.registerCandidate(entity);
+ verifyRegisterCandidateLocal(service, entity);
+
+ service.close();
+ }
+
+ @Test
+ public void testListenerRegistration() {
+ DistributedEntityOwnershipService service = spy(DistributedEntityOwnershipService.start(
+ dataStore.getActorUtils(), EntityOwnerSelectionStrategyConfig.newBuilder().build()));
+
+ YangInstanceIdentifier entityId = YangInstanceIdentifier.of(QNAME);
+ DOMEntity entity = new DOMEntity(ENTITY_TYPE, entityId);
+ DOMEntityOwnershipListener listener = mock(DOMEntityOwnershipListener.class);
+
+ DOMEntityOwnershipListenerRegistration reg = service.registerListener(entity.getType(), listener);
+
+ assertNotNull("EntityOwnershipListenerRegistration null", reg);
+ assertEquals("getEntityType", entity.getType(), reg.getEntityType());
+ assertEquals("getInstance", listener, reg.getInstance());
+
+ RegisterListenerLocal regListener = verifyMessage(service, RegisterListenerLocal.class);
+ assertSame("getListener", listener, regListener.getListener());
+ assertEquals("getEntityType", entity.getType(), regListener.getEntityType());
+
+ reset(service);
+ reg.close();
+ UnregisterListenerLocal unregListener = verifyMessage(service, UnregisterListenerLocal.class);
+ assertEquals("getEntityType", entity.getType(), unregListener.getEntityType());
+ assertSame("getListener", listener, unregListener.getListener());
+
+ service.close();