2 * Copyright (c) 2017 Cisco Systems, Inc. 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.lispflowmapping.neutron.mappingmanager;
10 import java.lang.reflect.Field;
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.junit.Test;
14 import org.junit.runner.RunWith;
15 import org.mockito.Mockito;
16 import org.mockito.junit.MockitoJUnitRunner;
17 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
18 import org.opendaylight.lispflowmapping.neutron.LispUtil;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecord;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.AddMappingInput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.OdlMappingserviceService;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.RemoveMappingInput;
25 import org.powermock.core.classloader.annotations.PrepareForTest;
26 import org.powermock.modules.junit4.PowerMockRunner;
27 import org.powermock.modules.junit4.PowerMockRunnerDelegate;
30 * Created by Shakib Ahmed on 2/7/17.
32 @RunWith(PowerMockRunner.class)
33 @PowerMockRunnerDelegate(MockitoJUnitRunner.class)
34 @PrepareForTest(HostInformationManager.class)
35 public class HostInformationManagerTest {
37 private final OdlMappingserviceService lfmDbService = Mockito.mock(OdlMappingserviceService.class);
39 private static final String HOST_ID = "compute0";
41 private static final Rloc SAMPLE_RLOC = Mockito.mock(Rloc.class);
43 private static final Eid SAMPLE_EID_1 = Mockito.mock(Eid.class);
44 private static final Eid SAMPLE_EID_2 = Mockito.mock(Eid.class);
45 private static final Eid SAMPLE_EID_3 = Mockito.mock(Eid.class);
46 private static final PortData PORT_DATA_1 = new PortData("1", SAMPLE_EID_1);
47 private static final PortData PORT_DATA_2 = new PortData("2", SAMPLE_EID_2);
49 private static final PortData PORT_DATA_1_1 = new PortData("1", SAMPLE_EID_3);
52 public void testScenarioRlocFirst() {
53 HostInformationManager hostInformationManager = getDefaultHostInformationManager();
55 addRlocData(hostInformationManager);
57 Mockito.verify(lfmDbService, Mockito.times(0))
58 .addMapping(Mockito.any(AddMappingInput.class));
60 addPortData1(hostInformationManager);
62 AddMappingInput desiredMappingRecord = createAddMappingInput(SAMPLE_RLOC, SAMPLE_EID_1);
63 Mockito.verify(lfmDbService).addMapping(desiredMappingRecord);
65 destroySingleton(hostInformationManager);
69 public void testScenarioPortDataFirst() {
70 HostInformationManager hostInformationManager = getDefaultHostInformationManager();
72 addPortData1(hostInformationManager);
74 Mockito.verify(lfmDbService, Mockito.times(0))
75 .addMapping(Mockito.any(AddMappingInput.class));
77 addRlocData(hostInformationManager);
79 AddMappingInput desiredMappingRecord = createAddMappingInput(SAMPLE_RLOC, SAMPLE_EID_1);
80 Mockito.verify(lfmDbService).addMapping(desiredMappingRecord);
82 destroySingleton(hostInformationManager);
86 public void testScenarioMultiplePortDataAndThenRloc() {
87 HostInformationManager hostInformationManager = getDefaultHostInformationManager();
89 addPortData1(hostInformationManager);
90 addPortData2(hostInformationManager);
92 Mockito.verify(lfmDbService, Mockito.times(0))
93 .addMapping(Mockito.any(AddMappingInput.class));
95 addRlocData(hostInformationManager);
97 AddMappingInput desiredMappingRecord1 = createAddMappingInput(SAMPLE_RLOC, SAMPLE_EID_1);
98 Mockito.verify(lfmDbService).addMapping(desiredMappingRecord1);
100 AddMappingInput desiredMappingRecord2 = createAddMappingInput(SAMPLE_RLOC, SAMPLE_EID_2);
101 Mockito.verify(lfmDbService).addMapping(desiredMappingRecord2);
103 destroySingleton(hostInformationManager);
107 public void testOnlyUnprocessedPortDataIsBeingProcessed() {
108 HostInformationManager hostInformationManager = getDefaultHostInformationManager();
110 addPortData1(hostInformationManager);
112 Mockito.verify(lfmDbService, Mockito.times(0))
113 .addMapping(Mockito.any(AddMappingInput.class));
115 addRlocData(hostInformationManager);
117 addPortData2(hostInformationManager);
119 Mockito.verify(lfmDbService, Mockito.times(2))
120 .addMapping(Mockito.any(AddMappingInput.class));
122 AddMappingInput desiredMappingRecord1 = createAddMappingInput(SAMPLE_RLOC, SAMPLE_EID_1);
123 Mockito.verify(lfmDbService).addMapping(desiredMappingRecord1);
125 AddMappingInput desiredMappingRecord2 = createAddMappingInput(SAMPLE_RLOC, SAMPLE_EID_2);
126 Mockito.verify(lfmDbService).addMapping(desiredMappingRecord2);
128 destroySingleton(hostInformationManager);
132 public void testProperMappingRecordRemoval() {
133 HostInformationManager hostInformationManager = getDefaultHostInformationManager();
135 addPortData1(hostInformationManager);
137 addRlocData(hostInformationManager);
139 addUpdatedPortData1(hostInformationManager);
141 RemoveMappingInput removeMappingInput = LispUtil.buildRemoveMappingInput(PORT_DATA_1.getPortEid());
142 Mockito.verify(lfmDbService).removeMapping(removeMappingInput);
144 AddMappingInput addMappingInput = createAddMappingInput(SAMPLE_RLOC, SAMPLE_EID_3);
145 Mockito.verify(lfmDbService).addMapping(addMappingInput);
147 destroySingleton(hostInformationManager);
150 private void addRlocData(HostInformationManager hostInformationManager) {
151 hostInformationManager.addHostRelatedInfo(HOST_ID, SAMPLE_RLOC);
154 private void addPortData1(HostInformationManager hostInformationManager) {
155 hostInformationManager.addHostRelatedInfo(HOST_ID, PORT_DATA_1);
158 private void addPortData2(HostInformationManager hostInformationManager) {
159 hostInformationManager.addHostRelatedInfo(HOST_ID, PORT_DATA_2);
162 private void addUpdatedPortData1(HostInformationManager hostInformationManager) {
163 hostInformationManager.addHostRelatedInfo(HOST_ID, PORT_DATA_1_1);
166 private AddMappingInput createAddMappingInput(Rloc rloc, Eid eid) {
167 List<Rloc> rlocList = new ArrayList<>();
169 List<LocatorRecord> locatorRecordList = LispAddressUtil.asLocatorRecords(rlocList);
171 return LispUtil.buildAddMappingInput(eid, locatorRecordList);
174 private HostInformationManager getDefaultHostInformationManager() {
175 HostInformationManager hostInformationManager = HostInformationManager.getInstance();
176 hostInformationManager.setOdlMappingserviceService(lfmDbService);
177 return hostInformationManager;
180 private void destroySingleton(HostInformationManager hostInformationManager) {
182 Field field = hostInformationManager.getClass().getDeclaredField("instance");
183 field.setAccessible(true);
184 field.set(hostInformationManager, null);
185 } catch (NoSuchFieldException e) {
187 } catch (IllegalAccessException e) {