Initial import of CFM and SOAM api
Change-Id: Icf5cc2d5fb34b75460e80e8cced0d70265bcd33b
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/l2monitoring/cfm/MepTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/l2monitoring/cfm/MepTest.java
new file mode 100644
index 0000000..eee1f97
--- /dev/null
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/l2monitoring/cfm/MepTest.java
@@ -0,0 +1,275 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.incubator.net.l2monitoring.cfm;
+
+import java.time.Duration;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.VlanId;
+import org.onosproject.incubator.net.l2monitoring.cfm.DefaultMep.DefaultMepBuilder;
+import org.onosproject.incubator.net.l2monitoring.cfm.Mep.FngAddress;
+import org.onosproject.incubator.net.l2monitoring.cfm.Mep.FngAddressType;
+import org.onosproject.incubator.net.l2monitoring.cfm.Mep.LowestFaultDefect;
+import org.onosproject.incubator.net.l2monitoring.cfm.Mep.MepDirection;
+import org.onosproject.incubator.net.l2monitoring.cfm.Mep.Priority;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MaIdCharStr;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MdIdCharStr;
+import org.onosproject.incubator.net.l2monitoring.cfm.identifier.MepId;
+import org.onosproject.incubator.net.l2monitoring.cfm.service.CfmConfigException;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+
+import static org.junit.Assert.*;
+
+public class MepTest {
+ private Mep mep1;
+
+ @Before
+ public void setUp() throws Exception {
+ try {
+ mep1 = DefaultMep.builder(MepId.valueOf((short) 1),
+ DeviceId.deviceId("of:12345678"),
+ PortNumber.portNumber(0),
+ MepDirection.UP_MEP,
+ MdIdCharStr.asMdId("md-1"),
+ MaIdCharStr.asMaId("ma-1-1"))
+ .primaryVid(VlanId.vlanId((short) 1000))
+ .administrativeState(true)
+ .cciEnabled(true)
+ .ccmLtmPriority(Priority.PRIO6)
+ .fngAddress(FngAddress.ipV4Address(IpAddress.valueOf("10.2.3.1")))
+ .lowestFaultPriorityDefect(LowestFaultDefect.ERROR_FD_PLUS)
+ .defectPresentTime(Duration.ofSeconds(1))
+ .defectAbsentTime(Duration.ofSeconds(2))
+ .build();
+ } catch (CfmConfigException e) {
+ throw new Exception(e);
+ }
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void testPortError() {
+ try {
+ DefaultMep.builder(MepId.valueOf((short) 1),
+ DeviceId.deviceId("of:12345678"),
+ PortNumber.FLOOD,
+ MepDirection.UP_MEP,
+ MdIdCharStr.asMdId("md-1"),
+ MaIdCharStr.asMaId("ma-1-1"))
+ .build();
+ fail("Port = FLOOD should throw exception");
+ } catch (CfmConfigException e) {
+ assertTrue(e.getMessage().contains("Port must be physical"));
+ }
+ }
+
+ @Test
+ public void testMdNameErrorNull() {
+ try {
+ DefaultMep.builder(MepId.valueOf((short) 1),
+ DeviceId.deviceId("of:12345678"),
+ PortNumber.portNumber(0),
+ MepDirection.UP_MEP,
+ null,
+ MaIdCharStr.asMaId("ma-1-1"))
+ .build();
+ fail("Null md Name should throw exception");
+ } catch (CfmConfigException e) {
+ assertTrue(e.getMessage().contains("MdId is null"));
+ }
+ }
+
+ @Test
+ public void testMaNameErrorNull() {
+ try {
+ DefaultMep.builder(MepId.valueOf((short) 1),
+ DeviceId.deviceId("of:12345678"),
+ PortNumber.portNumber(0),
+ MepDirection.UP_MEP,
+ MdIdCharStr.asMdId("md-1"),
+ null)
+ .build();
+ fail("Null ma Name should throw exception");
+ } catch (CfmConfigException e) {
+ assertTrue(e.getMessage().contains("MaId is null"));
+ }
+ }
+
+ @Test
+ public void testMepCopyConstructor() throws CfmConfigException {
+ Mep mep2 = (new DefaultMepBuilder(mep1)).build();
+ assertEquals(1, mep2.mepId().value());
+ assertEquals("md-1", mep2.mdId().mdName());
+ }
+
+ @Test
+ public void testMepId() {
+ assertEquals(1, mep1.mepId().value());
+ }
+
+ @Test
+ public void testDeviceId() {
+ assertEquals("of:12345678", mep1.deviceId().toString());
+ }
+
+ @Test
+ public void testPort() {
+ assertEquals(0, mep1.port().toLong());
+ }
+
+ @Test
+ public void testDirection() {
+ assertEquals(MepDirection.UP_MEP, mep1.direction());
+ }
+
+ @Test
+ public void testPrimaryVid() {
+ assertEquals(1000, mep1.primaryVid().id().intValue());
+ }
+
+ @Test
+ public void testAdministrativeState() {
+ assertTrue(mep1.administrativeState());
+ }
+
+ @Test
+ public void testWithAdministrativeState() {
+ Mep mep2 = mep1.withAdministrativeState(false);
+ assertFalse(mep2.administrativeState());
+ assertEquals(1, mep2.mepId().value());
+ }
+
+ @Test
+ public void testCciEnabled() {
+ assertTrue(mep1.cciEnabled());
+ }
+
+ @Test
+ public void testWithCciEnabled() {
+ Mep mep2 = mep1.withCciEnabled(false);
+ assertFalse(mep2.cciEnabled());
+ }
+
+ @Test
+ public void testCcmLtmPriority() {
+ assertEquals(6, mep1.ccmLtmPriority().ordinal());
+ }
+
+ @Test
+ public void testWithCcmLtmPriority() throws CfmConfigException {
+ Mep mep2 = mep1.withCcmLtmPriority(Priority.PRIO5);
+ assertEquals(5, mep2.ccmLtmPriority().ordinal());
+ assertEquals(1, mep2.mepId().value());
+ }
+
+ @Test
+ public void testWithFngAddress() {
+ Mep mep2 = mep1.withFngAddress(FngAddress.ipV4Address(IpAddress.valueOf("10.2.3.2")));
+ assertEquals(FngAddressType.IPV4, mep2.fngAddress().addressType());
+ assertEquals(IpAddress.valueOf("10.2.3.2"), mep2.fngAddress().ipAddress());
+ }
+
+ @Test
+ public void testFngAddress() {
+ assertEquals(FngAddressType.IPV4, mep1.fngAddress().addressType());
+ assertEquals(IpAddress.valueOf("10.2.3.1"), mep1.fngAddress().ipAddress());
+ }
+
+ @Test
+ public void testLowestFaultPriorityDefect() {
+ assertEquals(LowestFaultDefect.ERROR_FD_PLUS, mep1.lowestFaultPriorityDefect());
+ }
+
+ @Test
+ public void testWithLowestFaultPriorityDefect() {
+ Mep mep2 = mep1.withLowestFaultPriorityDefect(LowestFaultDefect.XCON_FD_ONLY);
+ assertEquals(LowestFaultDefect.XCON_FD_ONLY, mep2.lowestFaultPriorityDefect());
+ }
+
+ @Test
+ public void testDefectPresetTime() {
+ assertEquals(1000, mep1.defectPresentTime().toMillis());
+ }
+
+ @Test
+ public void testWithDefectPresentTime() {
+ Mep mep2 = mep1.withDefectPresentTime(Duration.ofMillis(1500L));
+ assertEquals(1500, mep2.defectPresentTime().toMillis());
+ }
+
+ @Test
+ public void testDefectAbsentTime() {
+ assertEquals(2000, mep1.defectAbsentTime().toMillis());
+ }
+
+ @Test
+ public void testWithDefectAbsentTime() {
+ Mep mep2 = mep1.withDefectAbsentTime(Duration.ofMillis(2500L));
+ assertEquals(2500, mep2.defectAbsentTime().toMillis());
+ }
+
+ @Test
+ public void testEqualsObject() throws CfmConfigException {
+ Mep mep2 = mep1.withPrimaryVid(VlanId.vlanId((short) 5));
+ assertNotEquals(mep1, mep2);
+ }
+
+ @Test
+ public void testMepToString() {
+ assertEquals(mep1.toString(), "DefaultMep{" +
+ "mepId=1, " +
+ "deviceId=of:12345678, " +
+ "port=0, " +
+ "direction=UP_MEP, " +
+ "mdId=md-1, " +
+ "maId=ma-1-1, " +
+ "primaryVid=1000, " +
+ "administrativeState=true, " +
+ "cciEnabled=true, " +
+ "ccmLtmPriority=PRIO6, " +
+ "fngAddress=FngAddress{addressType=IPV4, ipAddress=10.2.3.1}, " +
+ "lowestFaultPriorityDefect=ERROR_FD_PLUS, " +
+ "defectPresentTime=PT1S, " +
+ "defectAbsentTime=PT2S}");
+ }
+
+ @Test
+ public void testEquality() throws CfmConfigException {
+ assertFalse(mep1.equals(null));
+ assertTrue(mep1.equals(mep1));
+ assertFalse(mep1.equals(new String("test")));
+
+ Mep mep2 = new DefaultMepBuilder(mep1).build();
+ assertTrue(mep1.equals(mep2));
+ assertEquals(mep1.hashCode(), mep2.hashCode());
+
+ Mep mep3 = DefaultMep.builder(MepId.valueOf((short) 2),
+ DeviceId.deviceId("of:12345680"),
+ PortNumber.portNumber(0),
+ MepDirection.UP_MEP,
+ MdIdCharStr.asMdId("md-3"),
+ MaIdCharStr.asMaId("ma-3-3"))
+ .build();
+ assertFalse(mep1.equals(mep3));
+ }
+}