blob: bf5af67d2075516fe9b863cd9fedfea673153491 [file] [log] [blame]
Sean Condon0e89bda2017-03-21 14:23:19 +00001/*
2 * Copyright 2017-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.incubator.net.l2monitoring.soam.impl;
17
18import org.junit.After;
19import org.junit.Before;
20import org.junit.Test;
21import org.onlab.junit.TestUtils;
22import org.onlab.packet.ChassisId;
23import org.onosproject.common.event.impl.TestEventDispatcher;
24import org.onosproject.core.CoreServiceAdapter;
25import org.onosproject.core.IdGenerator;
26import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMepEntry;
27import org.onosproject.incubator.net.l2monitoring.cfm.MaintenanceAssociation;
28import org.onosproject.incubator.net.l2monitoring.cfm.Mep;
29import org.onosproject.incubator.net.l2monitoring.cfm.MepEntry;
30import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr;
31import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdShort;
32import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdId;
33import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
34import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
35import org.onosproject.incubator.net.l2monitoring.cfm.impl.TestCfmMepProgrammable;
36import org.onosproject.incubator.net.l2monitoring.cfm.impl.TestDeviceDiscoveryBehavior;
37import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
38import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMdService;
39import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepProgrammable;
40import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmMepService;
41import org.onosproject.incubator.net.l2monitoring.soam.SoamConfigException;
42import org.onosproject.incubator.net.l2monitoring.soam.SoamDmProgrammable;
43import org.onosproject.incubator.net.l2monitoring.soam.SoamId;
44import org.onosproject.incubator.net.l2monitoring.soam.SoamService;
45import org.onosproject.incubator.net.l2monitoring.soam.delay.DefaultDelayMeasurementCreate;
46import org.onosproject.incubator.net.l2monitoring.soam.delay.DefaultDelayMeasurementEntry;
47import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementCreate;
48import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementEntry;
49import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatCurrent;
50import org.onosproject.incubator.net.l2monitoring.soam.delay.DelayMeasurementStatHistory;
51import org.onosproject.net.AbstractProjectableModel;
52import org.onosproject.net.AnnotationKeys;
53import org.onosproject.net.DefaultAnnotations;
54import org.onosproject.net.DefaultDevice;
55import org.onosproject.net.Device;
56import org.onosproject.net.DeviceId;
57import org.onosproject.net.PortNumber;
58import org.onosproject.net.device.DeviceDescriptionDiscovery;
59import org.onosproject.net.device.DeviceService;
60import org.onosproject.net.driver.Behaviour;
61import org.onosproject.net.driver.DefaultDriver;
62import org.onosproject.net.driver.Driver;
63import org.onosproject.net.driver.DriverService;
64import org.onosproject.net.provider.ProviderId;
65
66import java.time.Instant;
67import java.util.ArrayList;
68import java.util.Collection;
69import java.util.HashMap;
70import java.util.Map;
71import java.util.concurrent.atomic.AtomicLong;
72
73import static junit.framework.TestCase.assertEquals;
74import static junit.framework.TestCase.assertNotNull;
75import static junit.framework.TestCase.fail;
76import static org.easymock.EasyMock.createMock;
77import static org.easymock.EasyMock.expect;
78import static org.easymock.EasyMock.replay;
79import static org.junit.Assert.assertTrue;
80import static org.onosproject.net.NetTestTools.injectEventDispatcher;
81
82/**
83 * Services OAM Manager test.
84 */
85public class SoamManagerTest {
86 private static final String TEST_MFR = "testMfr";
87 private static final String TEST_HW_VERSION = "testHwVersion";
88 private static final String TEST_SW_VERSION = "testSwVersion";
89 private static final String TEST_SN = "testSn";
90 private static final String TEST_DRIVER = "testDriver";
91 public static final String TEST_DRIVER_3 = "testDriver3";
92 public static final String TEST_SW_3 = "testSw3";
93
94
95 protected static final MdId MDNAME1 = MdIdCharStr.asMdId("md-1");
96 protected static final MaIdShort MANAME1 = MaIdCharStr.asMaId("ma-1-1");
97 protected static final MepId MEPID1 = MepId.valueOf((short) 10);
98 protected static final DeviceId DEVICE_ID1 = DeviceId.deviceId("netconf:1.2.3.4:830");
99 protected static final SoamId DMID101 = SoamId.valueOf(101);
100 protected static final SoamId DMID102 = SoamId.valueOf(102);
101 protected static final SoamId LMID101 = SoamId.valueOf(201);
102
103 private MaintenanceAssociation ma1;
104 private MepEntry mep1;
105
106 private SoamManager soamManager;
107 private SoamService soamService;
108
109 private final CfmMdService mdService = createMock(CfmMdService.class);
110 private CfmMepService mepService = createMock(CfmMepService.class);
111 private final DeviceService deviceService = createMock(DeviceService.class);
112 private final DriverService driverService = createMock(DriverService.class);
113 private Device device1;
114 private Driver testDriver;
115
116 @Before
117 public void setup() throws CfmConfigException, SoamConfigException {
118 soamManager = new SoamManager();
119 TestUtils.setField(soamManager, "coreService", new TestCoreService());
120 TestUtils.setField(soamManager, "cfmMepService", mepService);
121 TestUtils.setField(soamManager, "deviceService", deviceService);
122
123 injectEventDispatcher(soamManager, new TestEventDispatcher());
124 soamService = soamManager;
125 soamManager.activate();
126
127 DelayMeasurementEntry dmEntry1 = DefaultDelayMeasurementEntry
128 .builder(DMID101, DelayMeasurementCreate.DmType.DM1DMTX,
129 DelayMeasurementCreate.Version.Y17312011,
130 MepId.valueOf((short) 11), Mep.Priority.PRIO5).build();
131 DelayMeasurementEntry dmEntry2 = DefaultDelayMeasurementEntry
132 .builder(DMID102, DelayMeasurementCreate.DmType.DM1DMTX,
133 DelayMeasurementCreate.Version.Y17312011,
134 MepId.valueOf((short) 11), Mep.Priority.PRIO6).build();
135
136 mep1 = DefaultMepEntry.builder(MEPID1, DEVICE_ID1, PortNumber.P0,
137 Mep.MepDirection.UP_MEP, MDNAME1, MANAME1)
138 .addToDelayMeasurementList(dmEntry1)
139 .addToDelayMeasurementList(dmEntry2)
140 .buildEntry();
141
142 device1 = new DefaultDevice(
143 ProviderId.NONE, DEVICE_ID1, Device.Type.SWITCH,
144 TEST_MFR, TEST_HW_VERSION, TEST_SW_VERSION, TEST_SN,
145 new ChassisId(1),
146 DefaultAnnotations.builder().set(AnnotationKeys.DRIVER, TEST_DRIVER).build());
147
148 AbstractProjectableModel.setDriverService(null, driverService);
149
150 Map<Class<? extends Behaviour>, Class<? extends Behaviour>> behaviours = new HashMap<>();
151 behaviours.put(DeviceDescriptionDiscovery.class, TestDeviceDiscoveryBehavior.class);
152 behaviours.put(CfmMepProgrammable.class, TestCfmMepProgrammable.class);
153 behaviours.put(SoamDmProgrammable.class, TestSoamDmProgrammable.class);
154
155 testDriver = new DefaultDriver(
156 TEST_DRIVER, new ArrayList<Driver>(),
157 TEST_MFR, TEST_HW_VERSION, TEST_SW_VERSION,
158 behaviours, new HashMap<>());
159
160 }
161
162 @After
163 public void tearDown() {
164// soamManager.deactivate();
165 }
166
167 @Test
168 public void testGetAllDms() throws CfmConfigException, SoamConfigException {
Sean Condon085621b2017-10-29 23:27:32 +0000169 expect(deviceService.getDevice(DEVICE_ID1)).andReturn(device1).anyTimes();
170 replay(deviceService);
Sean Condon0e89bda2017-03-21 14:23:19 +0000171
172 expect(mepService.getMep(MDNAME1, MANAME1, MEPID1)).andReturn(mep1).anyTimes();
173 replay(mepService);
174
Carmelo Cascone0761cd32018-08-29 19:22:50 -0700175 expect(driverService.getDriver(DEVICE_ID1)).andReturn(testDriver).anyTimes();
Sean Condon085621b2017-10-29 23:27:32 +0000176 replay(driverService);
177
Sean Condon0e89bda2017-03-21 14:23:19 +0000178 Collection<DelayMeasurementEntry> dmEntries =
179 soamManager.getAllDms(MDNAME1, MANAME1, MEPID1);
Sean Condon085621b2017-10-29 23:27:32 +0000180 assertNotNull(dmEntries);
181 assertEquals(1, dmEntries.size());
Sean Condon0e89bda2017-03-21 14:23:19 +0000182 }
183
184 @Test
185 public void testGetDm() throws CfmConfigException, SoamConfigException {
186 expect(deviceService.getDevice(DEVICE_ID1)).andReturn(device1).anyTimes();
187 replay(deviceService);
188
189 expect(mepService.getMep(MDNAME1, MANAME1, MEPID1)).andReturn(mep1).anyTimes();
190 replay(mepService);
191
Carmelo Cascone0761cd32018-08-29 19:22:50 -0700192 expect(driverService.getDriver(DEVICE_ID1)).andReturn(testDriver).anyTimes();
Sean Condon0e89bda2017-03-21 14:23:19 +0000193 replay(driverService);
194
195 DelayMeasurementEntry dmEntry =
196 soamManager.getDm(MDNAME1, MANAME1, MEPID1, DMID101);
197
198 assertNotNull(dmEntry);
199 assertEquals(DMID101, dmEntry.dmId());
200 }
201
202 @Test
203 public void testGetDmCurrentStat() throws CfmConfigException, SoamConfigException {
204 expect(deviceService.getDevice(DEVICE_ID1)).andReturn(device1).anyTimes();
205 replay(deviceService);
206
207 expect(mepService.getMep(MDNAME1, MANAME1, MEPID1)).andReturn(mep1).anyTimes();
208 replay(mepService);
209
Carmelo Cascone0761cd32018-08-29 19:22:50 -0700210 expect(driverService.getDriver(DEVICE_ID1)).andReturn(testDriver).anyTimes();
Sean Condon0e89bda2017-03-21 14:23:19 +0000211 replay(driverService);
212
213 DelayMeasurementStatCurrent dmCurrentStat =
214 soamManager.getDmCurrentStat(MDNAME1, MANAME1, MEPID1, DMID101);
215
216 assertNotNull(dmCurrentStat);
217 assertTrue(dmCurrentStat.startTime().isBefore(Instant.now()));
218 }
219
220 @Test
221 public void testGetDmHistoryStats() throws CfmConfigException, SoamConfigException {
222 expect(deviceService.getDevice(DEVICE_ID1)).andReturn(device1).anyTimes();
223 replay(deviceService);
224
225 expect(mepService.getMep(MDNAME1, MANAME1, MEPID1)).andReturn(mep1).anyTimes();
226 replay(mepService);
227
Carmelo Cascone0761cd32018-08-29 19:22:50 -0700228 expect(driverService.getDriver(DEVICE_ID1)).andReturn(testDriver).anyTimes();
Sean Condon0e89bda2017-03-21 14:23:19 +0000229 replay(driverService);
230
231 Collection<DelayMeasurementStatHistory> dmHistoricalStats =
232 soamManager.getDmHistoricalStats(MDNAME1, MANAME1, MEPID1, DMID101);
233
234 assertNotNull(dmHistoricalStats);
235 assertEquals(2, dmHistoricalStats.size());
236 }
237
238 @Test
239 public void testCreateDm() throws CfmConfigException, SoamConfigException {
240 expect(deviceService.getDevice(DEVICE_ID1)).andReturn(device1).anyTimes();
241 replay(deviceService);
242
243 expect(mepService.getMep(MDNAME1, MANAME1, MEPID1)).andReturn(mep1).anyTimes();
244 replay(mepService);
245
Carmelo Cascone0761cd32018-08-29 19:22:50 -0700246 expect(driverService.getDriver(DEVICE_ID1)).andReturn(testDriver).anyTimes();
Sean Condon0e89bda2017-03-21 14:23:19 +0000247 replay(driverService);
248
249 DelayMeasurementCreate dmCreate1 = DefaultDelayMeasurementCreate
250 .builder(DelayMeasurementCreate.DmType.DM1DMTX,
251 DelayMeasurementCreate.Version.Y17312011,
252 MepId.valueOf((short) 11), Mep.Priority.PRIO3)
253 .binsPerFdInterval((short) 4)
254 .binsPerFdrInterval((short) 5)
255 .binsPerIfdvInterval((short) 6)
256 .build();
257
258 assertEquals(1000, soamManager.createDm(
259 MDNAME1, MANAME1, MEPID1, dmCreate1).get().value());
260 }
261
262 @Test
263 public void testCreateDmNoBehavior() throws CfmConfigException, SoamConfigException {
264 final DeviceId deviceId3 = DeviceId.deviceId("netconf:3.2.3.4:830");
265 final MepId mepId3 = MepId.valueOf((short) 3);
266
267 Map<Class<? extends Behaviour>, Class<? extends Behaviour>> behaviours = new HashMap<>();
268 behaviours.put(DeviceDescriptionDiscovery.class, TestDeviceDiscoveryBehavior.class);
269
270 Driver testDriver3 = new DefaultDriver(
271 TEST_DRIVER_3, new ArrayList<Driver>(),
272 TEST_MFR, TEST_HW_VERSION, TEST_SW_3,
273 behaviours, new HashMap<>());
274
275 Device device3 = new DefaultDevice(
276 ProviderId.NONE, deviceId3, Device.Type.SWITCH,
277 TEST_MFR, TEST_HW_VERSION, TEST_SW_3, TEST_SN,
278 new ChassisId(2),
279 DefaultAnnotations.builder().set(AnnotationKeys.DRIVER, TEST_DRIVER_3).build());
280
281 expect(deviceService.getDevice(deviceId3)).andReturn(device3).anyTimes();
282 replay(deviceService);
283
284 MepEntry mep3 = DefaultMepEntry.builder(mepId3, deviceId3, PortNumber.P0,
285 Mep.MepDirection.UP_MEP, MDNAME1, MANAME1)
286 .buildEntry();
287
288 expect(mepService.getMep(MDNAME1, MANAME1, mepId3)).andReturn(mep3).anyTimes();
289 replay(mepService);
290
Carmelo Cascone0761cd32018-08-29 19:22:50 -0700291 expect(driverService.getDriver(deviceId3)).andReturn(testDriver3).anyTimes();
Sean Condon0e89bda2017-03-21 14:23:19 +0000292 replay(driverService);
293
294 DelayMeasurementCreate dmCreate1 = DefaultDelayMeasurementCreate
295 .builder(DelayMeasurementCreate.DmType.DM1DMTX,
296 DelayMeasurementCreate.Version.Y17312011,
297 MepId.valueOf((short) 11), Mep.Priority.PRIO3)
298 .binsPerFdInterval((short) 4)
299 .binsPerFdrInterval((short) 5)
300 .binsPerIfdvInterval((short) 6)
301 .build();
302
303 try {
304 soamManager.createDm(MDNAME1, MANAME1, mepId3, dmCreate1);
305 fail("Expecting exception since device does not support behavior");
306 } catch (CfmConfigException e) {
307 assertEquals("Device netconf:3.2.3.4:830 from MEP :md-1/" +
308 "ma-1-1/3 does not implement SoamDmProgrammable", e.getMessage());
309 }
310 }
311
312 @Test
313 public void testAbortAllDmOnMep() throws CfmConfigException {
314 //TODO: Implement underlying method
315 try {
316 soamManager.abortDm(MDNAME1, MANAME1, MEPID1);
317 fail("Expecting UnsupportedOperationException");
318 } catch (UnsupportedOperationException e) {
319 }
320 }
321
322 @Test
323 public void testAbortOneDm() throws CfmConfigException {
324 //TODO: Implement underlying method
325 try {
326 soamManager.abortDm(MDNAME1, MANAME1, MEPID1, DMID101);
327 fail("Expecting UnsupportedOperationException");
328 } catch (UnsupportedOperationException e) {
329 }
330 }
331
332 @Test
333 public void testClearAllDmHistoriesOnMep() throws CfmConfigException {
334 //TODO: Implement underlying method
335 try {
336 soamManager.clearDelayHistoryStats(MDNAME1, MANAME1, MEPID1);
337 fail("Expecting UnsupportedOperationException");
338 } catch (UnsupportedOperationException e) {
339 }
340 }
341
342 @Test
343 public void testClearOneDmHistories() throws CfmConfigException {
344 //TODO: Implement underlying method
345 try {
346 soamManager.clearDelayHistoryStats(MDNAME1, MANAME1, MEPID1, DMID101);
347 fail("Expecting UnsupportedOperationException");
348 } catch (UnsupportedOperationException e) {
349 }
350 }
351
352 @Test
353 public void testGetAllLmsOnMep() throws CfmConfigException {
354 //TODO: Implement underlying method
355 try {
356 soamManager.getAllLms(MDNAME1, MANAME1, MEPID1);
357 fail("Expecting UnsupportedOperationException");
358 } catch (UnsupportedOperationException e) {
359 }
360 }
361
362 @Test
363 public void testGetLm() throws CfmConfigException {
364 //TODO: Implement underlying method
365 try {
366 soamManager.getLm(MDNAME1, MANAME1, MEPID1, LMID101);
367 fail("Expecting UnsupportedOperationException");
368 } catch (UnsupportedOperationException e) {
369 }
370 }
371
372 @Test
373 public void testGetLmCurrentStat() {
374 //TODO: Implement underlying method
375 try {
376 soamManager.getLmCurrentStat(MDNAME1, MANAME1, MEPID1, LMID101);
377 fail("Expecting UnsupportedOperationException");
378 } catch (UnsupportedOperationException e) {
379 }
380 }
381
382 @Test
383 public void testGetLmhistoricalStats() {
384 //TODO: Implement underlying method
385 try {
386 soamManager.getLmHistoricalStats(MDNAME1, MANAME1, MEPID1, LMID101);
387 fail("Expecting UnsupportedOperationException");
388 } catch (UnsupportedOperationException e) {
389 }
390 }
391
392 @Test
393 public void testCreateLm() throws CfmConfigException {
394 //TODO: Implement underlying method
395 try {
396 soamManager.createLm(MDNAME1, MANAME1, MEPID1, null);
397 fail("Expecting UnsupportedOperationException");
398 } catch (UnsupportedOperationException e) {
399 }
400 }
401
402 @Test
403 public void testAbortAllLmOnMep() throws CfmConfigException {
404 //TODO: Implement underlying method
405 try {
406 soamManager.abortLm(MDNAME1, MANAME1, MEPID1);
407 fail("Expecting UnsupportedOperationException");
408 } catch (UnsupportedOperationException e) {
409 }
410 }
411
412 @Test
413 public void testAbortOneLm() throws CfmConfigException {
414 //TODO: Implement underlying method
415 try {
416 soamManager.abortLm(MDNAME1, MANAME1, MEPID1, LMID101);
417 fail("Expecting UnsupportedOperationException");
418 } catch (UnsupportedOperationException e) {
419 }
420 }
421
422 @Test
423 public void testClearAllLossHistoryStatsOnMep() throws CfmConfigException {
424 //TODO: Implement underlying method
425 try {
426 soamManager.clearLossHistoryStats(MDNAME1, MANAME1, MEPID1);
427 fail("Expecting UnsupportedOperationException");
428 } catch (UnsupportedOperationException e) {
429 }
430 }
431
432 @Test
433 public void testClearLossHistoryStatsOnLm() throws CfmConfigException {
434 //TODO: Implement underlying method
435 try {
436 soamManager.clearLossHistoryStats(MDNAME1, MANAME1, MEPID1, LMID101);
437 fail("Expecting UnsupportedOperationException");
438 } catch (UnsupportedOperationException e) {
439 }
440 }
441
442 @Test
443 public void testCreateTestSignal() throws CfmConfigException {
444 //TODO: Implement underlying method
445 try {
446 soamManager.createTestSignal(MDNAME1, MANAME1, MEPID1, null);
447 fail("Expecting UnsupportedOperationException");
448 } catch (UnsupportedOperationException e) {
449 }
450 }
451
452 @Test
453 public void testAbortTestSignal() throws CfmConfigException {
454 //TODO: Implement underlying method
455 try {
456 soamManager.abortTestSignal(MDNAME1, MANAME1, MEPID1);
457 fail("Expecting UnsupportedOperationException");
458 } catch (UnsupportedOperationException e) {
459 }
460 }
461
462 protected class TestCoreService extends CoreServiceAdapter {
463
464 @Override
465 public IdGenerator getIdGenerator(String topic) {
466 return new IdGenerator() {
467 private AtomicLong counter = new AtomicLong(0);
468
469 @Override
470 public long getNewId() {
471 return counter.getAndIncrement();
472 }
473 };
474 }
475 }
476}