Migrate Optional.get() callers
[mdsal.git] / entityownership / mdsal-eos-dom-simple / src / test / java / org / opendaylight / mdsal / eos / dom / simple / SimpleDOMEntityOwnershipServiceTest.java
1 /*
2  * Copyright (c) 2017 Cisco 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.mdsal.eos.dom.simple;
9
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;
19
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;
35
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";
40
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");
43
44     public final DOMEntityOwnershipService service = new SimpleDOMEntityOwnershipService();
45
46     @Test
47     public void testNonExistingEntity() {
48         assertFalse(service.isCandidateRegistered(FOO_FOO_ENTITY));
49         final Optional<EntityOwnershipState> state = service.getOwnershipState(FOO_FOO_ENTITY);
50         assertNotNull(state);
51         assertFalse(state.isPresent());
52     }
53
54     @Test
55     public void testExistingEntity() throws CandidateAlreadyRegisteredException {
56         final DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(FOO_FOO_ENTITY);
57         assertNotNull(reg);
58
59         assertTrue(service.isCandidateRegistered(FOO_FOO_ENTITY));
60         assertFalse(service.isCandidateRegistered(FOO_BAR_ENTITY));
61
62         final Optional<EntityOwnershipState> state = service.getOwnershipState(FOO_FOO_ENTITY);
63         assertNotNull(state);
64         assertTrue(state.isPresent());
65         assertEquals(EntityOwnershipState.IS_OWNER, state.orElseThrow());
66
67         reg.close();
68         assertFalse(service.isCandidateRegistered(FOO_FOO_ENTITY));
69     }
70
71     @Test(expected = CandidateAlreadyRegisteredException.class)
72     public void testDuplicateRegistration() throws CandidateAlreadyRegisteredException {
73         final DOMEntityOwnershipCandidateRegistration reg = service.registerCandidate(FOO_FOO_ENTITY);
74         assertNotNull(reg);
75
76         // Should throw
77         service.registerCandidate(FOO_FOO_ENTITY);
78     }
79
80     @Test
81     public void testListener() throws CandidateAlreadyRegisteredException {
82         final DOMEntityOwnershipCandidateRegistration entityReg = service.registerCandidate(FOO_FOO_ENTITY);
83         assertNotNull(entityReg);
84
85         // Mismatched type, not triggered
86         final DOMEntityOwnershipListener barListener = mock(DOMEntityOwnershipListener.class);
87         final DOMEntityOwnershipListenerRegistration barReg = service.registerListener(BAR_TYPE, barListener);
88
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());
96
97         DOMEntityOwnershipChange fooChange = fooCaptor.getValue();
98         assertEquals(FOO_FOO_ENTITY, fooChange.getEntity());
99         assertEquals(EntityOwnershipChangeState.LOCAL_OWNERSHIP_GRANTED, fooChange.getState());
100
101         reset(fooListener);
102         doNothing().when(fooListener).ownershipChanged(any(DOMEntityOwnershipChange.class));
103         entityReg.close();
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());
108
109         fooReg.close();
110         barReg.close();
111     }
112
113     @Test
114     public void testToString() throws CandidateAlreadyRegisteredException {
115         final UUID uuid = UUID.randomUUID();
116         final String expected = String.format("SimpleDOMEntityOwnershipService{uuid=%s, entities={}, listeners={}}",
117             uuid);
118         assertEquals(expected, new SimpleDOMEntityOwnershipService(uuid).toString());
119     }
120 }