2 * Copyright (c) 2015 Brocade Communications 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.binding.dom.adapter;
10 import static org.junit.jupiter.api.Assertions.assertNotNull;
11 import static org.junit.jupiter.api.Assertions.assertSame;
12 import static org.junit.jupiter.api.Assertions.assertTrue;
13 import static org.mockito.ArgumentMatchers.eq;
14 import static org.mockito.Mockito.doNothing;
15 import static org.mockito.Mockito.doReturn;
16 import static org.mockito.Mockito.doThrow;
17 import static org.mockito.Mockito.mock;
19 import java.util.Optional;
20 import org.eclipse.jdt.annotation.NonNull;
21 import org.junit.jupiter.api.BeforeEach;
22 import org.junit.jupiter.api.Test;
23 import org.junit.jupiter.api.extension.ExtendWith;
24 import org.mockito.ArgumentCaptor;
25 import org.mockito.Mock;
26 import org.mockito.junit.jupiter.MockitoExtension;
27 import org.opendaylight.mdsal.binding.dom.adapter.ConstantAdapterContext;
28 import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
29 import org.opendaylight.mdsal.eos.binding.api.Entity;
30 import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
31 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
32 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipStateChange;
33 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
34 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener;
35 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
36 import org.opendaylight.yangtools.concepts.Registration;
39 * Unit tests for BindingDOMEntityOwnershipServiceAdapter.
41 * @author Thomas Pantelis
43 @ExtendWith(MockitoExtension.class)
44 class DefaultEntityOwnershipServiceTest {
45 private static final @NonNull Entity BINDING_ENTITY = new Entity("foo", "bar");
46 private static final @NonNull DOMEntity DOM_ENTITY = new DOMEntity("foo", "bar");
49 private BindingDOMCodecServices mockCodecRegistry;
51 private DOMEntityOwnershipService mockDOMService;
53 private DefaultEntityOwnershipService adapter;
57 adapter = new DefaultEntityOwnershipService(mockDOMService, new ConstantAdapterContext(mockCodecRegistry));
60 private void mockToBinding() {
61 doReturn(BINDING_ENTITY.getIdentifier()).when(mockCodecRegistry).fromYangInstanceIdentifier(
62 DOM_ENTITY.getIdentifier());
65 private void mockToDom() {
66 doReturn(DOM_ENTITY.getIdentifier()).when(mockCodecRegistry)
67 .toYangInstanceIdentifier(BINDING_ENTITY.getIdentifier());
71 void testRegisterCandidate() throws Exception {
73 final var mockDOMReg = mock(Registration.class);
74 doReturn(mockDOMReg).when(mockDOMService).registerCandidate(DOM_ENTITY);
76 try (var reg = adapter.registerCandidate(BINDING_ENTITY)) {
82 void testRegisterListener() {
85 final var mockDOMReg = mock(Registration.class);
86 final var domListenerCaptor = ArgumentCaptor.forClass(DOMEntityOwnershipListener.class);
87 doReturn(mockDOMReg).when(mockDOMService).registerListener(eq(DOM_ENTITY.getType()),
88 domListenerCaptor.capture());
89 final var mockListener = mock(EntityOwnershipListener.class);
91 try (var reg = adapter.registerListener(BINDING_ENTITY.getType(), mockListener)) {
94 doNothing().when(mockListener).ownershipChanged(BINDING_ENTITY,
95 EntityOwnershipStateChange.LOCAL_OWNERSHIP_GRANTED, true);
96 domListenerCaptor.getValue().ownershipChanged(DOM_ENTITY,
97 EntityOwnershipStateChange.LOCAL_OWNERSHIP_GRANTED, true);
102 void testGetOwnershipState() {
105 final var expectedState = Optional.of(EntityOwnershipState.IS_OWNER);
106 doReturn(expectedState).when(mockDOMService).getOwnershipState(DOM_ENTITY);
107 assertSame(expectedState, adapter.getOwnershipState(BINDING_ENTITY));
111 void testIsCandidateRegistered() {
114 doReturn(true).when(mockDOMService).isCandidateRegistered(DOM_ENTITY);
115 assertTrue(adapter.isCandidateRegistered(BINDING_ENTITY));
119 void testOwnershipChangeWithException() {
122 final var listener = mock(EntityOwnershipListener.class);
123 doThrow(IllegalStateException.class).when(listener).ownershipChanged(BINDING_ENTITY,
124 EntityOwnershipStateChange.LOCAL_OWNERSHIP_GRANTED, false);
126 final var domAdapter = new DOMEntityOwnershipListenerAdapter(listener,
127 new ConstantAdapterContext(mockCodecRegistry));
129 domAdapter.ownershipChanged(DOM_ENTITY, EntityOwnershipStateChange.LOCAL_OWNERSHIP_GRANTED, false);