[Emu] Defining classes for ODU SIGID and SIGTYPE Fields in Flow Criteria and Instruction - Data Model and Tests only

Change-Id: I3a71520caa286a1fcc509c581036ef4848de9b5b
diff --git a/core/api/src/test/java/org/onosproject/net/OduSignalIdTest.java b/core/api/src/test/java/org/onosproject/net/OduSignalIdTest.java
new file mode 100644
index 0000000..2ed15ff
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/net/OduSignalIdTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * 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.net;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+import static org.onosproject.net.OduSignalId.oduSignalId;
+
+/**
+ * Test for OduSignalId.
+ */
+public class OduSignalIdTest {
+
+    private final OduSignalId odu1 = oduSignalId(7, 80, new byte[] {16, 16, 16, 16, 16, 16, 16, 16, 16, 16});
+    private final OduSignalId sameOdu1 = oduSignalId(7, 80, new byte[] {16, 16, 16, 16, 16, 16, 16, 16, 16, 16});
+    private final OduSignalId odu2 = oduSignalId(21, 80, new byte[] {10, 5, 10, 5, 10, 5, 10, 5, 10, 5});
+    private final OduSignalId sameOdu2 = oduSignalId(21, 80, new byte[] {10, 5, 10, 5, 10, 5, 10, 5, 10, 5});
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(odu1, sameOdu1)
+                .addEqualityGroup(odu2, sameOdu2)
+                .testEquals();
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java b/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java
index 95d605c..d86744d 100644
--- a/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java
+++ b/core/api/src/test/java/org/onosproject/net/flow/criteria/CriteriaTest.java
@@ -15,6 +15,16 @@
  */
 package org.onosproject.net.flow.criteria;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+import static org.onlab.junit.UtilityClassChecker.assertThatClassIsUtility;
+import static org.onosproject.net.OduSignalId.oduSignalId;
+import static org.onosproject.net.PortNumber.portNumber;
+
 import org.junit.Test;
 import org.onlab.packet.EthType;
 import org.onlab.packet.Ip6Address;
@@ -26,20 +36,12 @@
 import org.onosproject.net.ChannelSpacing;
 import org.onosproject.net.GridType;
 import org.onosproject.net.Lambda;
+import org.onosproject.net.OchSignalType;
+import org.onosproject.net.OduSignalId;
+import org.onosproject.net.OduSignalType;
 import org.onosproject.net.PortNumber;
 
 import com.google.common.testing.EqualsTester;
-import org.onosproject.net.OchSignalType;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
-import static org.onlab.junit.UtilityClassChecker.assertThatClassIsUtility;
-import static org.onosproject.net.PortNumber.portNumber;
-
 /**
  * Unit tests for the Criteria class and its subclasses.
  */
@@ -240,6 +242,18 @@
     Criterion matchOchSignal2 =
             Criteria.matchLambda(Lambda.ochSignal(GridType.DWDM, ChannelSpacing.CHL_50GHZ, 4, 8));
 
+    final OduSignalId odu1 = oduSignalId(1, 80, new byte [] {1, 1, 2, 2, 1, 2, 2, 1, 2, 2});
+    final OduSignalId odu2 = oduSignalId(3, 8, new byte [] {1, 0, 0, 0, 0, 0, 0, 0, 0, 0});
+    Criterion matchOduSignalId1 = Criteria.matchOduSignalId(odu1);
+    Criterion sameAsMatchOduSignalId1 = Criteria.matchOduSignalId(odu1);
+    Criterion matchOduSignalId2 = Criteria.matchOduSignalId(odu2);
+
+    final OduSignalType oduSigType1 = OduSignalType.ODU2;
+    final OduSignalType oduSigType2 = OduSignalType.ODU4;
+    Criterion matchOduSignalType1 = Criteria.matchOduSignalType(oduSigType1);
+    Criterion sameAsMatchOduSignalType1 = Criteria.matchOduSignalType(oduSigType1);
+    Criterion matchOduSignalType2 = Criteria.matchOduSignalType(oduSigType2);
+
     /**
      * Checks that a Criterion object has the proper type, and then converts
      * it to the proper type.
@@ -294,6 +308,8 @@
         assertThatClassIsImmutable(MplsCriterion.class);
         assertThatClassIsImmutable(IPv6ExthdrFlagsCriterion.class);
         assertThatClassIsImmutable(LambdaCriterion.class);
+        assertThatClassIsImmutable(OduSignalIdCriterion.class);
+        assertThatClassIsImmutable(OduSignalTypeCriterion.class);
     }
 
     // PortCriterion class
@@ -1070,4 +1086,57 @@
                 .addEqualityGroup(matchOchSignalType2)
                 .testEquals();
     }
+
+    /**
+     * Test the OduSignalId method.
+     */
+    @Test
+    public void testMatchOduSignalIdMethod() {
+        OduSignalId odu = oduSignalId(1, 80, new byte[]{2, 1, 1, 3, 1, 1, 3, 1, 1, 3});
+
+        Criterion matchoduSignalId = Criteria.matchOduSignalId(odu);
+        OduSignalIdCriterion oduSignalIdCriterion =
+                checkAndConvert(matchoduSignalId,
+                                Criterion.Type.ODU_SIGID,
+                                OduSignalIdCriterion.class);
+        assertThat(oduSignalIdCriterion.oduSignalId(), is(equalTo(odu)));
+    }
+
+    /**
+     * Test the equals() method of the OduSignalIdCriterion class.
+     */
+    @Test
+    public void testOduSignalIdCriterionEquals() {
+        new EqualsTester()
+                .addEqualityGroup(matchOduSignalId1, sameAsMatchOduSignalId1)
+                .addEqualityGroup(matchOduSignalId2)
+                .testEquals();
+    }
+
+    // OduSignalTypeCriterion class
+
+    /**
+     * Test the OduSignalType method.
+     */
+    @Test
+    public void testMatchOduSignalTypeMethod() {
+        OduSignalType oduSigType = OduSignalType.ODU2;
+        Criterion matchoduSignalType = Criteria.matchOduSignalType(oduSigType);
+        OduSignalTypeCriterion oduSignalTypeCriterion =
+                checkAndConvert(matchoduSignalType,
+                                Criterion.Type.ODU_SIGTYPE,
+                                OduSignalTypeCriterion.class);
+        assertThat(oduSignalTypeCriterion.signalType(), is(equalTo(oduSigType)));
+    }
+
+    /**
+     * Test the equals() method of the OduSignalTypeCriterion class.
+     */
+    @Test
+    public void testOduSignalTypeCriterionEquals() {
+        new EqualsTester()
+                .addEqualityGroup(matchOduSignalType1, sameAsMatchOduSignalType1)
+                .addEqualityGroup(matchOduSignalType2)
+                .testEquals();
+    }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/flow/instructions/InstructionsTest.java b/core/api/src/test/java/org/onosproject/net/flow/instructions/InstructionsTest.java
index 410349b..a25783f 100644
--- a/core/api/src/test/java/org/onosproject/net/flow/instructions/InstructionsTest.java
+++ b/core/api/src/test/java/org/onosproject/net/flow/instructions/InstructionsTest.java
@@ -25,6 +25,7 @@
 import org.onosproject.net.GridType;
 import org.onosproject.net.IndexedLambda;
 import org.onosproject.net.Lambda;
+import org.onosproject.net.OduSignalId;
 import org.onosproject.net.PortNumber;
 
 import com.google.common.testing.EqualsTester;
@@ -38,6 +39,7 @@
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 import static org.onlab.junit.UtilityClassChecker.assertThatClassIsUtility;
 import static org.onosproject.net.PortNumber.portNumber;
+import static org.onosproject.net.OduSignalId.oduSignalId;
 
 /**
  * Unit tests for the Instructions class.
@@ -96,6 +98,7 @@
         assertThatClassIsImmutable(Instructions.OutputInstruction.class);
         assertThatClassIsImmutable(L0ModificationInstruction.ModLambdaInstruction.class);
         assertThatClassIsImmutable(L0ModificationInstruction.ModOchSignalInstruction.class);
+        assertThatClassIsImmutable(L1ModificationInstruction.ModOduSignalIdInstruction.class);
         assertThatClassIsImmutable(L2ModificationInstruction.ModEtherInstruction.class);
         assertThatClassIsImmutable(L2ModificationInstruction.ModVlanIdInstruction.class);
         assertThatClassIsImmutable(L2ModificationInstruction.ModVlanPcpInstruction.class);
@@ -259,6 +262,44 @@
         assertThat(ochInstruction1.hashCode(), is(not(ochInstruction2.hashCode())));
     }
 
+    //  ModOduSignalIdInstruction
+
+    private final OduSignalId odu1 = oduSignalId(1, 80, new byte[] {8, 7, 6, 5, 7, 6, 5, 7, 6, 5});
+    private final OduSignalId odu2 = oduSignalId(2, 80, new byte[] {1, 1, 2, 2, 1, 2, 2, 1, 2, 2});
+    private final Instruction oduInstruction1 = Instructions.modL1OduSignalId(odu1);
+    private final Instruction sameAsOduInstruction1 = Instructions.modL1OduSignalId(odu1);
+    private final Instruction oduInstruction2 = Instructions.modL1OduSignalId(odu2);
+
+    /**
+     * Test the modL1OduSignalId().
+     */
+    @Test
+    public void testModL1OduSignalIdMethod() {
+        Instruction instruction = Instructions.modL1OduSignalId(odu1);
+        L1ModificationInstruction.ModOduSignalIdInstruction oduInstruction =
+                checkAndConvert(instruction, Instruction.Type.L1MODIFICATION,
+                        L1ModificationInstruction.ModOduSignalIdInstruction.class);
+        assertThat(oduInstruction.oduSignalId(), is(odu1));
+    }
+
+    /**
+     * Test the equals() method of the ModOduSignalInstruction class.
+     */
+    @Test
+    public void testModOduSignalIdInstructionEquals() {
+        checkEqualsAndToString(oduInstruction1, sameAsOduInstruction1, oduInstruction2);
+    }
+
+    /**
+     * Test the hashCode() method of the ModOduSignalInstruction class.
+     */
+    @Test
+    public void testModOduSignalIdInstructionHashCode() {
+        assertThat(oduInstruction1.hashCode(), is(sameAsOduInstruction1.hashCode()));
+        assertThat(oduInstruction1.hashCode(), is(not(oduInstruction2.hashCode())));
+    }
+
+
     //  ModEtherInstruction
 
     private static final String MAC1 = "00:00:00:00:00:01";