a32a494927dc450c4496afa8c11be684333d9ad4
[controller.git] / opendaylight / md-sal / sal-dom-broker / src / test / java / org / opendaylight / controller / md / sal / dom / clustering / impl / LegacyEntityOwnershipServiceAdapterTest.java
1 /*
2  * Copyright (c) 2016 Brocade Communications Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.controller.md.sal.dom.clustering.impl;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Matchers.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;
18 import static org.mockito.Mockito.verify;
19 import com.google.common.base.Optional;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.mockito.ArgumentCaptor;
23 import org.mockito.Mock;
24 import org.mockito.MockitoAnnotations;
25 import org.opendaylight.controller.md.sal.common.api.clustering.CandidateAlreadyRegisteredException;
26 import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
27 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipCandidateRegistration;
28 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipChange;
29 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListener;
30 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipListenerRegistration;
31 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipChangeState;
32 import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
33 import org.opendaylight.mdsal.eos.dom.api.DOMEntity;
34 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipCandidateRegistration;
35 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipChange;
36 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListener;
37 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipListenerRegistration;
38 import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
39
40 /**
41  * Unit tests for PreBoronEntityOwnershipServiceAdapter.
42  *
43  * @author Thomas Pantelis
44  */
45 public class LegacyEntityOwnershipServiceAdapterTest {
46     static Entity LEGACY_ENTITY = new Entity("foo", "bar");
47     static DOMEntity DOM_ENTITY = new DOMEntity("foo", LEGACY_ENTITY.getId());
48
49     @Mock
50     private DOMEntityOwnershipService mockDOMService;
51
52     private LegacyEntityOwnershipServiceAdapter adapter;
53
54     @Before
55     public void setup() {
56         MockitoAnnotations.initMocks(this);
57         adapter = new LegacyEntityOwnershipServiceAdapter(mockDOMService);
58     }
59
60     @Test
61     public void testRegisterCandidate() throws Exception {
62         DOMEntityOwnershipCandidateRegistration mockDOMReg = mock(DOMEntityOwnershipCandidateRegistration.class);
63         doNothing().when(mockDOMReg).close();
64         doReturn(mockDOMReg).when(mockDOMService).registerCandidate(DOM_ENTITY);
65
66         EntityOwnershipCandidateRegistration reg = adapter.registerCandidate(LEGACY_ENTITY);
67
68         assertNotNull("registerCandidate returned null", reg);
69         assertEquals("getInstance", LEGACY_ENTITY, reg.getInstance());
70
71         reg.close();
72         verify(mockDOMReg).close();
73     }
74
75     @Test(expected=CandidateAlreadyRegisteredException.class)
76     public void testAlreadyRegisteredCandidate() throws Exception {
77         doThrow(new org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException(DOM_ENTITY)).
78                 when(mockDOMService).registerCandidate(DOM_ENTITY);
79
80         adapter.registerCandidate(LEGACY_ENTITY);
81     }
82
83     @Test
84     public void testRegisterListener() {
85         DOMEntityOwnershipListenerRegistration mockDOMReg = mock(DOMEntityOwnershipListenerRegistration.class);
86         doNothing().when(mockDOMReg).close();
87         doReturn(mockDOMReg).when(mockDOMService).registerListener(eq(DOM_ENTITY.getType()),
88                 any(DOMEntityOwnershipListener.class));
89         EntityOwnershipListener mockListener = mock(EntityOwnershipListener.class);
90         doNothing().when(mockListener).ownershipChanged(any(EntityOwnershipChange.class));
91
92         EntityOwnershipListenerRegistration reg = adapter.registerListener(LEGACY_ENTITY.getType(), mockListener);
93
94         assertNotNull("registerListener returned null", reg);
95         assertEquals("getInstance", mockListener, reg.getInstance());
96         assertEquals("getEntityType", LEGACY_ENTITY.getType(), reg.getEntityType());
97
98         ArgumentCaptor<DOMEntityOwnershipListener> domListenerCaptor = ArgumentCaptor.forClass(DOMEntityOwnershipListener.class);
99         verify(mockDOMService).registerListener(eq(DOM_ENTITY.getType()),  domListenerCaptor.capture());
100
101         DOMEntityOwnershipChange domOwnershipChange = new DOMEntityOwnershipChange(DOM_ENTITY,
102                 EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED);
103         domListenerCaptor.getValue().ownershipChanged(domOwnershipChange );
104
105         ArgumentCaptor<EntityOwnershipChange> ownershipChangeCaptor = ArgumentCaptor.forClass(EntityOwnershipChange.class);
106         verify(mockListener).ownershipChanged(ownershipChangeCaptor.capture());
107
108         EntityOwnershipChange change = ownershipChangeCaptor.getValue();
109         assertEquals("getEntity", LEGACY_ENTITY, change.getEntity());
110         assertEquals("wasOwner", false, change.wasOwner());
111         assertEquals("isOwner", true, change.isOwner());
112         assertEquals("hasOwner", true, change.hasOwner());
113
114         reg.close();
115         verify(mockDOMReg).close();
116     }
117
118     @Test
119     public void testGetOwnershipState() {
120         testGetOwnershipState(EntityOwnershipState.IS_OWNER, true, true);
121         testGetOwnershipState(EntityOwnershipState.OWNED_BY_OTHER, false, true);
122         testGetOwnershipState(EntityOwnershipState.NO_OWNER, false, false);
123
124         doReturn(Optional.absent()).when(mockDOMService).getOwnershipState(DOM_ENTITY);
125         assertEquals("isPresent", false, adapter.getOwnershipState(LEGACY_ENTITY).isPresent());
126     }
127
128     @Test
129     public void testIsCandidateRegistered() {
130         doReturn(true).when(mockDOMService).isCandidateRegistered(DOM_ENTITY);
131         assertEquals("isCandidateRegistered", true, adapter.isCandidateRegistered(LEGACY_ENTITY));
132     }
133
134     private void testGetOwnershipState(EntityOwnershipState state, boolean expIsOwner, boolean expHasOwner) {
135         doReturn(Optional.of(state)).when(mockDOMService).getOwnershipState(DOM_ENTITY);
136
137         Optional<org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipState> actualState =
138                 adapter.getOwnershipState(LEGACY_ENTITY);
139
140         assertEquals("isPresent", true, actualState.isPresent());
141         assertEquals("isOwner", expIsOwner, actualState.get().isOwner());
142         assertEquals("hasOwner", expHasOwner, actualState.get().hasOwner());
143
144     }
145
146 }