2 * Copyright (c) 2017 Cisco Systems, Inc. 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.eos.dom.simple;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Matchers.any;
15 import static org.mockito.Mockito.doNothing;
16 import static org.mockito.Mockito.mock;
17 import static org.mockito.Mockito.reset;
18 import static org.mockito.Mockito.verify;
19 import static org.mockito.Mockito.verifyZeroInteractions;
21 import com.google.common.base.Optional;
22 import java.util.UUID;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.mockito.ArgumentCaptor;
26 import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
27 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
28 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
29 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
30 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipCandidateRegistration;
31 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
32 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener;
33 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
34 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
36 public class SimpleDOMEntityOwnershipServiceTest {
37 private static final String FOO_TYPE = "foo";
38 private static final String BAR_TYPE = "bar";
40 private static final DOMEntity FOO_FOO_ENTITY = new DOMEntity(FOO_TYPE, "foo");
41 private static final DOMEntity FOO_BAR_ENTITY = new DOMEntity(FOO_TYPE, "bar");
43 private DOMEntityOwnershipService service;
47 service = new SimpleDOMEntityOwnershipService();
51 public void testNonExistingEntity() {
52 assertFalse(service.isCandidateRegistered(FOO_FOO_ENTITY));
53 final Optional<EntityOwnershipState> state = service.getOwnershipState(FOO_FOO_ENTITY);
55 assertFalse(state.isPresent());
59 public void testExistingEntity() throws CandidateAlreadyRegisteredException {
60 final DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(FOO_FOO_ENTITY);
63 assertTrue(service.isCandidateRegistered(FOO_FOO_ENTITY));
64 assertFalse(service.isCandidateRegistered(FOO_BAR_ENTITY));
66 final Optional<EntityOwnershipState> state = service.getOwnershipState(FOO_FOO_ENTITY);
68 assertTrue(state.isPresent());
69 assertEquals(EntityOwnershipState.IS_OWNER, state.get());
72 assertFalse(service.isCandidateRegistered(FOO_FOO_ENTITY));
75 @Test(expected = CandidateAlreadyRegisteredException.class)
76 public void testDuplicateRegistration() throws CandidateAlreadyRegisteredException {
77 final DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(FOO_FOO_ENTITY);
81 service.registerCandidate(FOO_FOO_ENTITY);
85 public void testListener() throws CandidateAlreadyRegisteredException {
86 final DOMEntityOwnershipCandidateRegistration entityReg = service.registerCandidate(FOO_FOO_ENTITY);
87 assertNotNull(entityReg);
89 // Mismatched type, not triggered
90 final DOMEntityOwnershipListener barListener = mock(DOMEntityOwnershipListener.class);
91 doNothing().when(barListener).ownershipChanged(any(DOMEntityOwnershipChange.class));
92 final DOMEntityOwnershipListenerRegistration barReg = service.registerListener(BAR_TYPE, barListener);
93 verifyZeroInteractions(barListener);
95 // Matching type should be triggered
96 final DOMEntityOwnershipListener fooListener = mock(DOMEntityOwnershipListener.class);
97 doNothing().when(fooListener).ownershipChanged(any(DOMEntityOwnershipChange.class));
98 final DOMEntityOwnershipListenerRegistration fooReg = service.registerListener(FOO_TYPE, fooListener);
99 final ArgumentCaptor<DOMEntityOwnershipChange> fooCaptor = ArgumentCaptor.forClass(
100 DOMEntityOwnershipChange.class);
101 verify(fooListener).ownershipChanged(fooCaptor.capture());
103 DOMEntityOwnershipChange fooChange = fooCaptor.getValue();
104 assertEquals(FOO_FOO_ENTITY, fooChange.getEntity());
105 assertEquals(EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, fooChange.getState());
108 doNothing().when(fooListener).ownershipChanged(any(DOMEntityOwnershipChange.class));
110 verifyZeroInteractions(barListener);
111 verify(fooListener).ownershipChanged(fooCaptor.capture());
112 fooChange = fooCaptor.getValue();
113 assertEquals(FOO_FOO_ENTITY, fooChange.getEntity());
114 assertEquals(EntityOwnershipChangeState.LOCAL_OWNERSHIP_LOST_NO_OWNER, fooChange.getState());
121 public void testToString() throws CandidateAlreadyRegisteredException {
122 final UUID uuid = UUID.randomUUID();
123 final String expected = String.format("SimpleDOMEntityOwnershipService{uuid=%s, entities={}, listeners={}}",
125 assertEquals(expected, new SimpleDOMEntityOwnershipService(uuid).toString());