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.ArgumentMatchers.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;
20 import java.util.Optional;
21 import java.util.UUID;
22 import org.junit.Test;
23 import org.junit.runner.RunWith;
24 import org.mockito.ArgumentCaptor;
25 import org.mockito.junit.MockitoJUnitRunner;
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 @RunWith(MockitoJUnitRunner.StrictStubs.class)
37 public class SimpleDOMEntityOwnershipServiceTest {
38 public static final String FOO_TYPE = "foo";
39 public static final String BAR_TYPE = "bar";
41 public static final DOMEntity FOO_FOO_ENTITY = new DOMEntity(FOO_TYPE, "foo");
42 public static final DOMEntity FOO_BAR_ENTITY = new DOMEntity(FOO_TYPE, "bar");
44 public final DOMEntityOwnershipService service = new SimpleDOMEntityOwnershipService();
47 public void testNonExistingEntity() {
48 assertFalse(service.isCandidateRegistered(FOO_FOO_ENTITY));
49 final Optional<EntityOwnershipState> state = service.getOwnershipState(FOO_FOO_ENTITY);
51 assertFalse(state.isPresent());
55 public void testExistingEntity() throws CandidateAlreadyRegisteredException {
56 final DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(FOO_FOO_ENTITY);
59 assertTrue(service.isCandidateRegistered(FOO_FOO_ENTITY));
60 assertFalse(service.isCandidateRegistered(FOO_BAR_ENTITY));
62 final Optional<EntityOwnershipState> state = service.getOwnershipState(FOO_FOO_ENTITY);
64 assertTrue(state.isPresent());
65 assertEquals(EntityOwnershipState.IS_OWNER, state.orElseThrow());
68 assertFalse(service.isCandidateRegistered(FOO_FOO_ENTITY));
71 @Test(expected = CandidateAlreadyRegisteredException.class)
72 public void testDuplicateRegistration() throws CandidateAlreadyRegisteredException {
73 final DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(FOO_FOO_ENTITY);
77 service.registerCandidate(FOO_FOO_ENTITY);
81 public void testListener() throws CandidateAlreadyRegisteredException {
82 final DOMEntityOwnershipCandidateRegistration entityReg = service.registerCandidate(FOO_FOO_ENTITY);
83 assertNotNull(entityReg);
85 // Mismatched type, not triggered
86 final DOMEntityOwnershipListener barListener = mock(DOMEntityOwnershipListener.class);
87 final DOMEntityOwnershipListenerRegistration barReg = service.registerListener(BAR_TYPE, barListener);
89 // Matching type should be triggered
90 final DOMEntityOwnershipListener fooListener = mock(DOMEntityOwnershipListener.class);
91 doNothing().when(fooListener).ownershipChanged(any(DOMEntityOwnershipChange.class));
92 final DOMEntityOwnershipListenerRegistration fooReg = service.registerListener(FOO_TYPE, fooListener);
93 final ArgumentCaptor<DOMEntityOwnershipChange> fooCaptor = ArgumentCaptor.forClass(
94 DOMEntityOwnershipChange.class);
95 verify(fooListener).ownershipChanged(fooCaptor.capture());
97 DOMEntityOwnershipChange fooChange = fooCaptor.getValue();
98 assertEquals(FOO_FOO_ENTITY, fooChange.getEntity());
99 assertEquals(EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, fooChange.getState());
102 doNothing().when(fooListener).ownershipChanged(any(DOMEntityOwnershipChange.class));
104 verify(fooListener).ownershipChanged(fooCaptor.capture());
105 fooChange = fooCaptor.getValue();
106 assertEquals(FOO_FOO_ENTITY, fooChange.getEntity());
107 assertEquals(EntityOwnershipChangeState.LOCAL_OWNERSHIP_LOST_NO_OWNER, fooChange.getState());
114 public void testToString() throws CandidateAlreadyRegisteredException {
115 final UUID uuid = UUID.randomUUID();
116 final String expected = String.format("SimpleDOMEntityOwnershipService{uuid=%s, entities={}, listeners={}}",
118 assertEquals(expected, new SimpleDOMEntityOwnershipService(uuid).toString());