Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 1 | /* |
Brian O'Connor | a09fe5b | 2017-08-03 21:12:30 -0700 | [diff] [blame] | 2 | * Copyright 2017-present Open Networking Foundation |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 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 | */ |
| 16 | package org.onosproject.drivers.microsemi.yang; |
| 17 | |
| 18 | import static org.junit.Assert.assertEquals; |
| 19 | import static org.junit.Assert.assertNotNull; |
| 20 | import static org.junit.Assert.assertTrue; |
| 21 | import static org.junit.Assert.fail; |
| 22 | |
| 23 | import java.io.UncheckedIOException; |
| 24 | |
| 25 | import org.junit.After; |
| 26 | import org.junit.Before; |
| 27 | import org.junit.Test; |
| 28 | import org.onlab.packet.Ip4Address; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 29 | import org.onosproject.drivers.microsemi.yang.MseaCfmNetconfService.DmEntryParts; |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 30 | import org.onosproject.drivers.microsemi.yang.impl.MseaCfmManager; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 31 | import org.onosproject.drivers.microsemi.yang.utils.MepIdUtil; |
| 32 | import org.onosproject.drivers.microsemi.yang.utils.MepIdUtil2; |
| 33 | import org.onosproject.drivers.microsemi.yang.utils.MepIdUtil3; |
| 34 | import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr; |
| 35 | import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr; |
| 36 | import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId; |
| 37 | import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException; |
| 38 | import org.onosproject.incubator.net.l2monitoring.soam.SoamId; |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 39 | import org.onosproject.netconf.DatastoreId; |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 40 | import org.onosproject.netconf.NetconfDeviceInfo; |
| 41 | import org.onosproject.netconf.NetconfException; |
| 42 | import org.onosproject.netconf.NetconfSession; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 43 | import org.onosproject.yang.gen.v1.ietfyangtypes.rev20130715.ietfyangtypes.MacAddress; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 44 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfm; |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 45 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.MseaCfmOpParam; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 46 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.DefaultMefCfm; |
| 47 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.MefCfm; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 48 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.AbortLoopbackInput; |
| 49 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.abortloopback.DefaultAbortLoopbackInput; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 50 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.DefaultMaintenanceDomain; |
| 51 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.MaintenanceDomain; |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 52 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.DefaultMaintenanceAssociation; |
| 53 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.MaintenanceAssociation; |
| 54 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.DefaultMaintenanceAssociationEndPoint; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 55 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.MaintenanceAssociationEndPoint; |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 56 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.DefaultNamePrimaryVid; |
| 57 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.NamePrimaryVid; |
| 58 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.maintenanceassociation.manameandtypecombo.nameprimaryvid.NamePrimaryVidUnion; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 59 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.DefaultNameCharacterString; |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 60 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.DefaultNameDomainName; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 61 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.NameCharacterString; |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 62 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.NameDomainName; |
| 63 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.mefcfm.maintenancedomain.mdnameandtypecombo.namedomainname.NameDomainNameUnion; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 64 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype.DefaultMacAddress; |
| 65 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.targetaddressgroup.addresstype.DefaultMepId; |
| 66 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.DefaultTransmitLoopbackInput; |
| 67 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.TransmitLoopbackInput; |
| 68 | import org.onosproject.yang.gen.v1.mseacfm.rev20160229.mseacfm.transmitloopback.transmitloopbackinput.DefaultTargetAddress; |
| 69 | import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.delaymeasurements.DelayMeasurement; |
| 70 | import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain.maintenanceassociation.maintenanceassociationendpoint.augmentedmseacfmmaintenanceassociationendpoint.lossmeasurements.lossmeasurement.MessagePeriodEnum; |
| 71 | import org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.sessionstatustype.SessionStatusTypeEnum; |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 72 | import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.Identifier45; |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 73 | import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.MepIdType; |
| 74 | import org.onosproject.yang.gen.v1.mseatypes.rev20160229.mseatypes.PriorityType; |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 75 | |
| 76 | public class MseaCfmManagerTest { |
| 77 | |
| 78 | MseaCfmManager mseaCfmService; |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 79 | NetconfSession session; |
| 80 | |
| 81 | @Before |
| 82 | public void setUp() throws Exception { |
| 83 | try { |
| 84 | mseaCfmService = new MockMseaCfmManager(); |
| 85 | mseaCfmService.activate(); |
| 86 | } catch (UncheckedIOException e) { |
| 87 | fail(e.getMessage()); |
| 88 | } |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 89 | NetconfDeviceInfo deviceInfo = new NetconfDeviceInfo("netconf", "netconf", |
| 90 | Ip4Address.valueOf("1.2.3.4"), 830); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 91 | session = new MockNetconfSessionEa1000(deviceInfo); |
| 92 | } |
| 93 | |
| 94 | @After |
| 95 | public void tearDown() throws Exception { |
| 96 | } |
| 97 | |
| 98 | @Test |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 99 | public void testGetConfigMseaCfmEssentials() |
| 100 | throws NetconfException, CfmConfigException { |
| 101 | MseaCfm mseaCfm = mseaCfmService.getMepEssentials( |
| 102 | MdIdCharStr.asMdId("md-1"), |
| 103 | MaIdCharStr.asMaId("ma-1-1"), |
| 104 | MepId.valueOf((short) 1), session); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 105 | assertNotNull(mseaCfm); |
| 106 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 107 | //See SAMPLE_MSEACFM_MD_MA_MEP_ESSENTIALS_REPLY in MockNetconfSessionEa1000 |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 108 | assertEquals(1, mseaCfm.mefCfm().maintenanceDomain().size()); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 109 | } |
| 110 | |
| 111 | @Test |
| 112 | public void testGetConfigMseaCfmFull() |
| 113 | throws NetconfException, CfmConfigException { |
| 114 | MseaCfm mseaCfm = mseaCfmService.getMepFull( |
| 115 | MdIdCharStr.asMdId("md-1"), |
| 116 | MaIdCharStr.asMaId("ma-1-1"), |
| 117 | MepId.valueOf((short) 1), session); |
| 118 | assertNotNull(mseaCfm); |
| 119 | |
| 120 | //See SAMPLE_MSEACFM_MD_MA_MEP_FULL_REPLY in MockNetconfSessionEa1000 |
| 121 | assertEquals(1, mseaCfm.mefCfm().maintenanceDomain().size()); |
| 122 | MaintenanceAssociationEndPoint mep = mseaCfm.mefCfm() |
| 123 | .maintenanceDomain().get(0) |
| 124 | .maintenanceAssociation().get(0) |
| 125 | .maintenanceAssociationEndPoint().get(0); |
| 126 | assertTrue(mep.administrativeState()); |
| 127 | assertEquals("00:b0:ae:03:ff:31", mep.macAddress().toString()); |
| 128 | |
| 129 | org.onosproject.yang.gen.v1.mseasoamfm.rev20160229.mseasoamfm.mefcfm.maintenancedomain |
| 130 | .maintenanceassociation.maintenanceassociationendpoint |
| 131 | .AugmentedMseaCfmMaintenanceAssociationEndPoint augmentedMep = |
| 132 | MepIdUtil2.convertFmAugmentedMep(mep); |
| 133 | |
| 134 | assertEquals("partially-active", augmentedMep.connectivityStatus().toString()); |
| 135 | assertEquals("up", augmentedMep.interfaceStatus().enumeration().toString()); |
| 136 | } |
| 137 | |
| 138 | /** |
| 139 | * Driven by SAMPLE_MSEACFM_DELAY_MEASUREMENT_FULL_REPLY. |
| 140 | * @throws NetconfException If there's a problem |
| 141 | */ |
| 142 | @Test |
| 143 | public void testGetSoamDm() throws NetconfException { |
| 144 | MseaCfm mseaCfmWithDm = mseaCfmService.getSoamDm( |
| 145 | MdIdCharStr.asMdId("md-1"), |
| 146 | MaIdCharStr.asMaId("ma-1-1"), |
| 147 | MepId.valueOf((short) 1), |
| 148 | SoamId.valueOf(1), |
| 149 | DmEntryParts.ALL_PARTS, session); |
| 150 | |
| 151 | assertNotNull(mseaCfmWithDm); |
| 152 | MaintenanceAssociationEndPoint mep = mseaCfmWithDm.mefCfm() |
| 153 | .maintenanceDomain().get(0) |
| 154 | .maintenanceAssociation().get(0) |
| 155 | .maintenanceAssociationEndPoint().get(0); |
| 156 | |
| 157 | //Because of a checkstyle problem with typecasts including really long |
| 158 | //package names, this has to be handed off to a different class |
| 159 | org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.mefcfm.maintenancedomain |
| 160 | .maintenanceassociation.maintenanceassociationendpoint |
| 161 | .AugmentedMseaCfmMaintenanceAssociationEndPoint augmentedMep = |
| 162 | MepIdUtil.convertPmAugmentedMep(mep); |
| 163 | |
| 164 | DelayMeasurement dm = augmentedMep.delayMeasurements().delayMeasurement().get(0); |
| 165 | assertEquals(true, dm.administrativeState()); |
| 166 | assertTrue(dm.measurementEnable().get(3)); //frame-delay-two-way-bins |
| 167 | assertTrue(dm.measurementEnable().get(1)); //frame-delay-two-way-max |
| 168 | |
| 169 | assertEquals(MessagePeriodEnum.YANGAUTOPREFIX3MS.name(), dm.messagePeriod().name()); |
| 170 | assertEquals(6, dm.priority().uint8()); |
| 171 | assertEquals(1000, dm.frameSize()); |
| 172 | assertEquals(15, dm.measurementInterval()); |
| 173 | assertEquals(32, dm.numberIntervalsStored()); |
| 174 | assertEquals(SessionStatusTypeEnum.ACTIVE.name(), |
| 175 | dm.sessionStatus().enumeration().name()); |
| 176 | assertEquals(100, dm.frameDelayTwoWay().uint32()); |
| 177 | assertEquals(101, dm.interFrameDelayVariationTwoWay().uint32()); |
| 178 | |
| 179 | //The remoteMep of the DM is a choice, which for mepId is a leafref object |
| 180 | org.onosproject.yang.gen.v1.mseasoampm.rev20160229.mseasoampm.remotemepgroup.remotemep |
| 181 | .DefaultMepId remoteMepId = MepIdUtil3.convertPmRemoteMepToMepId(dm.remoteMep()); |
| 182 | assertNotNull(remoteMepId); |
| 183 | assertEquals(10, ((MepIdType) remoteMepId.mepId()).uint16()); |
| 184 | |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 185 | } |
| 186 | |
| 187 | /** |
| 188 | * Create the Maintenance Domain "md-1". |
| 189 | * @throws NetconfException |
| 190 | */ |
| 191 | @Test |
| 192 | public void testSetMseaCfm() throws NetconfException { |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 193 | NameCharacterString mdName = new DefaultNameCharacterString(); |
| 194 | mdName.name(Identifier45.fromString("md-1")); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 195 | |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 196 | MaintenanceDomain yangMd = new DefaultMaintenanceDomain(); |
| 197 | yangMd.id((short) 1); |
| 198 | yangMd.mdNameAndTypeCombo(mdName); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 199 | |
Sean Condon | 06613e9 | 2017-06-09 15:14:01 +0100 | [diff] [blame] | 200 | MefCfm mefCfm = new DefaultMefCfm(); |
| 201 | mefCfm.addToMaintenanceDomain(yangMd); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 202 | //FIXME implement this |
| 203 | // MseaCfmOpParam mseaCfmOpParam = (MseaCfmOpParam) MseaCfmOpParam.builder().mefCfm(mefCfm).build(); |
| 204 | // mseaCfmService.setMseaCfm(mseaCfmOpParam, session, NcDsType.running); |
| 205 | } |
| 206 | |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 207 | /** |
| 208 | * Using mep Id 10. |
| 209 | */ |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 210 | @Test |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 211 | public void testDeleteMseaMep() { |
| 212 | MaintenanceAssociationEndPoint mep10 = new DefaultMaintenanceAssociationEndPoint(); |
| 213 | mep10.mepIdentifier(MepIdType.of(10)); |
| 214 | |
| 215 | MaintenanceAssociation ma1100 = new DefaultMaintenanceAssociation(); |
| 216 | NamePrimaryVid pvid1100Name = new DefaultNamePrimaryVid(); |
| 217 | pvid1100Name.namePrimaryVid(NamePrimaryVidUnion.fromString("1100")); |
| 218 | ma1100.maNameAndTypeCombo(pvid1100Name); |
| 219 | ma1100.id((short) 1100); |
| 220 | ma1100.addToMaintenanceAssociationEndPoint(mep10); |
| 221 | |
| 222 | MaintenanceDomain md = new DefaultMaintenanceDomain(); |
| 223 | NameCharacterString mdName = new DefaultNameCharacterString(); |
| 224 | mdName.name(new Identifier45("md-1")); |
| 225 | md.mdNameAndTypeCombo(mdName); |
| 226 | md.id((short) 1); |
| 227 | md.addToMaintenanceAssociation(ma1100); |
| 228 | |
| 229 | MefCfm mefCfm = new DefaultMefCfm(); |
| 230 | mefCfm.addToMaintenanceDomain(md); |
| 231 | MseaCfmOpParam mseaCfm = new MseaCfmOpParam(); |
| 232 | mseaCfm.mefCfm(mefCfm); |
| 233 | |
| 234 | try { |
| 235 | boolean deleted = mseaCfmService.deleteMseaMep(mseaCfm, session, DatastoreId.RUNNING); |
| 236 | assertTrue(deleted); |
| 237 | } catch (NetconfException e) { |
| 238 | e.printStackTrace(); |
| 239 | fail(); |
| 240 | } catch (CfmConfigException e) { |
| 241 | e.printStackTrace(); |
| 242 | fail(); |
| 243 | } |
| 244 | } |
| 245 | |
| 246 | /** |
| 247 | * Using mep Id 10. |
| 248 | */ |
| 249 | @Test |
| 250 | public void testDeleteMseaMa() { |
| 251 | MaintenanceAssociation ma1300 = new DefaultMaintenanceAssociation(); |
| 252 | NamePrimaryVid pvid1300Name = new DefaultNamePrimaryVid(); |
| 253 | pvid1300Name.namePrimaryVid(NamePrimaryVidUnion.fromString("1300")); |
| 254 | ma1300.id((short) 1300); |
| 255 | ma1300.maNameAndTypeCombo(pvid1300Name); |
| 256 | |
| 257 | MaintenanceDomain md = new DefaultMaintenanceDomain(); |
| 258 | NameCharacterString mdName = new DefaultNameCharacterString(); |
| 259 | mdName.name(new Identifier45("md-13")); |
| 260 | md.mdNameAndTypeCombo(mdName); |
| 261 | md.id((short) 13); |
| 262 | md.addToMaintenanceAssociation(ma1300); |
| 263 | |
| 264 | MefCfm mefCfm = new DefaultMefCfm(); |
| 265 | mefCfm.addToMaintenanceDomain(md); |
| 266 | MseaCfmOpParam mseaCfm = new MseaCfmOpParam(); |
| 267 | mseaCfm.mefCfm(mefCfm); |
| 268 | |
| 269 | try { |
| 270 | boolean deleted = mseaCfmService.deleteMseaMa(mseaCfm, session, DatastoreId.RUNNING); |
| 271 | assertTrue(deleted); |
| 272 | } catch (NetconfException e) { |
| 273 | e.printStackTrace(); |
| 274 | fail(); |
| 275 | } catch (CfmConfigException e) { |
| 276 | e.printStackTrace(); |
| 277 | fail(); |
| 278 | } |
| 279 | } |
| 280 | |
| 281 | |
| 282 | @Test |
| 283 | public void testDeleteMseaRemoteMep() { |
| 284 | MaintenanceAssociation ma1100 = new DefaultMaintenanceAssociation(); |
| 285 | NamePrimaryVid pvid1100Name = new DefaultNamePrimaryVid(); |
| 286 | pvid1100Name.namePrimaryVid(NamePrimaryVidUnion.fromString("1100")); |
| 287 | ma1100.maNameAndTypeCombo(pvid1100Name); |
| 288 | ma1100.id((short) 1100); |
| 289 | ma1100.addToRemoteMeps(MepIdType.of(100)); |
| 290 | ma1100.addToRemoteMeps(MepIdType.of(101)); |
| 291 | |
| 292 | MaintenanceDomain md = new DefaultMaintenanceDomain(); |
| 293 | NameCharacterString mdName = new DefaultNameCharacterString(); |
| 294 | mdName.name(new Identifier45("md-1")); |
| 295 | md.mdNameAndTypeCombo(mdName); |
| 296 | md.id((short) 1); |
| 297 | md.addToMaintenanceAssociation(ma1100); |
| 298 | |
| 299 | MefCfm mefCfm = new DefaultMefCfm(); |
| 300 | mefCfm.addToMaintenanceDomain(md); |
| 301 | MseaCfmOpParam mseaCfm = new MseaCfmOpParam(); |
| 302 | mseaCfm.mefCfm(mefCfm); |
| 303 | |
| 304 | try { |
| 305 | boolean deleted = mseaCfmService.deleteMseaMaRMep(mseaCfm, session, DatastoreId.RUNNING); |
| 306 | assertTrue(deleted); |
| 307 | } catch (NetconfException e) { |
| 308 | e.printStackTrace(); |
| 309 | fail(); |
| 310 | } catch (CfmConfigException e) { |
| 311 | e.printStackTrace(); |
| 312 | fail(); |
| 313 | } |
| 314 | } |
| 315 | |
| 316 | /** |
| 317 | * Using mep Id 10. |
| 318 | */ |
| 319 | @Test |
| 320 | public void testDeleteMseaMdById() { |
| 321 | |
| 322 | MaintenanceDomain md = new DefaultMaintenanceDomain(); |
| 323 | NameDomainName mdName = new DefaultNameDomainName(); |
| 324 | mdName.nameDomainName(NameDomainNameUnion.fromString("www.opennetworking.org")); |
| 325 | md.mdNameAndTypeCombo(mdName); |
| 326 | md.id((short) 10); |
| 327 | |
| 328 | MefCfm mefCfm = new DefaultMefCfm(); |
| 329 | mefCfm.addToMaintenanceDomain(md); |
| 330 | MseaCfmOpParam mseaCfm = new MseaCfmOpParam(); |
| 331 | mseaCfm.mefCfm(mefCfm); |
| 332 | |
| 333 | try { |
| 334 | boolean deleted = mseaCfmService.deleteMseaMd(mseaCfm, session, DatastoreId.RUNNING); |
| 335 | assertTrue(deleted); |
| 336 | } catch (NetconfException e) { |
| 337 | e.printStackTrace(); |
| 338 | fail(); |
| 339 | } catch (CfmConfigException e) { |
| 340 | e.printStackTrace(); |
| 341 | fail(); |
| 342 | } |
| 343 | } |
| 344 | |
| 345 | /** |
| 346 | * Using mep Id 10. |
| 347 | */ |
| 348 | @Test |
| 349 | public void testDeleteMseaMdByName() { |
| 350 | |
| 351 | MaintenanceDomain md = new DefaultMaintenanceDomain(); |
| 352 | NameDomainName mdName = new DefaultNameDomainName(); |
| 353 | mdName.nameDomainName(NameDomainNameUnion.fromString("www.opennetworking.org")); |
| 354 | md.mdNameAndTypeCombo(mdName); |
| 355 | |
| 356 | MefCfm mefCfm = new DefaultMefCfm(); |
| 357 | mefCfm.addToMaintenanceDomain(md); |
| 358 | MseaCfmOpParam mseaCfm = new MseaCfmOpParam(); |
| 359 | mseaCfm.mefCfm(mefCfm); |
| 360 | |
| 361 | try { |
| 362 | mseaCfmService.deleteMseaMd(mseaCfm, session, DatastoreId.RUNNING); |
| 363 | fail("Should not have succeeded as no numeric id was given"); |
| 364 | } catch (NetconfException | CfmConfigException e) { |
| 365 | assertEquals("An MD numeric ID must be given", e.getMessage()); |
| 366 | } |
| 367 | } |
| 368 | |
| 369 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 370 | /** |
| 371 | * Using Remote remote MEP ID and all arguments. |
| 372 | */ |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 373 | @Test |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 374 | public void testTransmitLoopback1() { |
| 375 | TransmitLoopbackInput lbTr1 = new DefaultTransmitLoopbackInput(); |
| 376 | lbTr1.maintenanceDomain(Short.valueOf((short) 1)); |
| 377 | lbTr1.maintenanceAssociation(Short.valueOf((short) 2)); |
| 378 | lbTr1.maintenanceAssociationEndPoint(Short.valueOf((short) 3)); |
| 379 | |
| 380 | DefaultTargetAddress ta = new DefaultTargetAddress(); |
| 381 | DefaultMepId mepId = new DefaultMepId(); |
| 382 | mepId.mepId(MepIdType.of(4)); |
Yuta HIGUCHI | 8dee145 | 2018-05-02 19:09:04 -0700 | [diff] [blame^] | 383 | ta.addressType(mepId); |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 384 | lbTr1.targetAddress(ta); |
| 385 | |
| 386 | // lbTr1.dataTlv(new byte[]{0x01, 0x02, 0x03}); Not supported in onos-yang-tools just yet |
| 387 | lbTr1.numberOfMessages(10); |
| 388 | lbTr1.vlanDropEligible(true); |
| 389 | lbTr1.vlanPriority(PriorityType.of((short) 1)); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 390 | try { |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 391 | mseaCfmService.transmitLoopback(lbTr1, session); |
| 392 | } catch (NetconfException e) { |
| 393 | fail("Calling of TransmitLoopback failed: " + e.getMessage()); |
| 394 | } |
| 395 | } |
| 396 | |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 397 | /** |
| 398 | * Using Remote Mac address in place of remote MEP ID and fewer arguments. |
| 399 | */ |
Sean Condon | 96b896d | 2017-12-11 12:44:29 -0800 | [diff] [blame] | 400 | @Test |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 401 | public void testTransmitLoopback2() { |
| 402 | TransmitLoopbackInput lbTr2 = new DefaultTransmitLoopbackInput(); |
| 403 | |
| 404 | lbTr2.maintenanceDomain(Short.valueOf((short) 63)); |
| 405 | lbTr2.maintenanceAssociation(Short.valueOf((short) 62)); |
| 406 | lbTr2.maintenanceAssociationEndPoint(Short.valueOf((short) 61)); |
| 407 | |
| 408 | DefaultTargetAddress ta = new DefaultTargetAddress(); |
| 409 | DefaultMacAddress macAddr = new DefaultMacAddress(); |
| 410 | macAddr.macAddress(MacAddress.of("FF:EE:DD:CC:BB:AA")); |
| 411 | ta.addressType(macAddr); |
| 412 | lbTr2.targetAddress(ta); |
| 413 | try { |
| 414 | mseaCfmService.transmitLoopback(lbTr2, session); |
| 415 | } catch (NetconfException e) { |
| 416 | fail("Calling of TransmitLoopback failed: " + e.getMessage()); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 417 | } |
| 418 | } |
| 419 | |
| 420 | @Test |
| 421 | public void testAbortLoopback() throws NetconfException { |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 422 | AbortLoopbackInput lbAbort = new DefaultAbortLoopbackInput(); |
| 423 | |
| 424 | lbAbort.maintenanceDomain((short) 70); |
| 425 | lbAbort.maintenanceAssociation((short) 71); |
| 426 | lbAbort.maintenanceAssociationEndPoint((short) 72); |
| 427 | |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 428 | try { |
Sean Condon | 0e89bda | 2017-03-21 14:23:19 +0000 | [diff] [blame] | 429 | mseaCfmService.abortLoopback(lbAbort, session); |
| 430 | } catch (NetconfException e) { |
| 431 | fail("Calling of AbortLoopback failed: " + e.getMessage()); |
Sean Condon | fae8e66 | 2016-12-15 10:25:13 +0000 | [diff] [blame] | 432 | } |
| 433 | } |
| 434 | |
| 435 | @Test |
| 436 | public void testTransmitLinktrace() throws NetconfException { |
| 437 | try { |
| 438 | mseaCfmService.transmitLinktrace(null, session); |
| 439 | } catch (UnsupportedOperationException e) { |
| 440 | assertTrue(e.getMessage().contains("Not yet implemented")); |
| 441 | } |
| 442 | } |
| 443 | |
| 444 | } |