[ONOS-6624]Unit tests for Pi* core classes

Change-Id: Ia0a20712f8108549b3ac6434be8aee1bc6025bb2
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 fa8d5db..f6d1406 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
@@ -23,6 +23,7 @@
 import org.onlab.packet.MplsLabel;
 import org.onlab.packet.TpPort;
 import org.onlab.packet.VlanId;
+import org.onlab.util.ImmutableByteSequence;
 import org.onosproject.core.GroupId;
 import org.onosproject.net.ChannelSpacing;
 import org.onosproject.net.DeviceId;
@@ -31,6 +32,11 @@
 import org.onosproject.net.OduSignalId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.meter.MeterId;
+import org.onosproject.net.pi.runtime.PiAction;
+import org.onosproject.net.pi.runtime.PiActionId;
+import org.onosproject.net.pi.runtime.PiActionParam;
+import org.onosproject.net.pi.runtime.PiActionParamId;
+import org.onosproject.net.pi.runtime.PiTableAction;
 
 import java.util.List;
 
@@ -111,6 +117,7 @@
         assertThatClassIsImmutable(L2ModificationInstruction.ModMplsBosInstruction.class);
         assertThatClassIsImmutable(L2ModificationInstruction.ModMplsTtlInstruction.class);
         assertThatClassIsImmutable(L2ModificationInstruction.ModTunnelIdInstruction.class);
+        assertThatClassIsImmutable(PiInstruction.class);
     }
 
     //  NoActionInstruction
@@ -1307,4 +1314,43 @@
                 .testEquals();
     }
 
+    // PiInstruction
+    PiTableAction piTableAction1 = PiAction.builder()
+            .withId(PiActionId.of("set_egress_port_0"))
+            .withParameter(new PiActionParam(PiActionParamId.of("port"),
+                                                             ImmutableByteSequence.copyFrom(10))).build();
+    PiTableAction piTableAction2 = PiAction.builder()
+            .withId(PiActionId.of("set_egress_port_0"))
+            .withParameter(new PiActionParam(PiActionParamId.of("port"),
+                    ImmutableByteSequence.copyFrom(20))).build();
+    private final Instruction piSetEgressPortInstruction1 = new PiInstruction(piTableAction1);
+    private final Instruction sameAsPiSetEgressPortInstruction1 = new PiInstruction(piTableAction1);
+    private final Instruction piSetEgressPortInstruction2 = new PiInstruction(piTableAction2);
+
+    /**
+     * Test the PiInstruction() method.
+     */
+    @Test
+    public void testPiMethod() {
+        final Instruction instruction = new PiInstruction(piTableAction1);
+        final PiInstruction piInstruction = checkAndConvert(instruction,
+                Instruction.Type.PROTOCOL_INDEPENDENT, PiInstruction.class);
+
+        assertThat(piInstruction.action(), is(piTableAction1));
+        assertThat(piInstruction.type(), is(Instruction.Type.PROTOCOL_INDEPENDENT));
+    }
+
+    /**
+     * Tests the equals(), hashCode() and toString() methods of the
+     * PiInstruction class.
+     */
+
+    @Test
+    public void testPiInstructionEquals() {
+        new EqualsTester()
+                .addEqualityGroup(piSetEgressPortInstruction1, sameAsPiSetEgressPortInstruction1)
+                .addEqualityGroup(piSetEgressPortInstruction2)
+                .testEquals();
+    }
+
 }