diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
index 2628827..f2fd5e5 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionCodecTest.java
@@ -49,6 +49,7 @@
 import org.onosproject.net.pi.runtime.PiExactFieldMatch;
 import org.onosproject.net.pi.runtime.PiFieldMatch;
 import org.onosproject.net.pi.runtime.PiLpmFieldMatch;
+import org.onosproject.net.pi.runtime.PiOptionalFieldMatch;
 import org.onosproject.net.pi.runtime.PiRangeFieldMatch;
 import org.onosproject.net.pi.runtime.PiTernaryFieldMatch;
 
@@ -519,6 +520,12 @@
                 .matchRange(ipv4MatchFieldId, matchRangeBytes1, matchRangeHighBytes).build();
         ObjectNode rangeResult = criterionCodec.encode(rangeBytesCriterion, context);
         assertThat(rangeResult, matchesCriterion(rangeBytesCriterion));
+
+        byte[] matchOptionalBytes = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55};
+        Criterion optionalBytesCriterion = PiCriterion.builder().matchOptional(ethMatchFieldId,
+                                                                               matchOptionalBytes).build();
+        ObjectNode optionalResult = criterionCodec.encode(optionalBytesCriterion, context);
+        assertThat(optionalResult, matchesCriterion(optionalBytesCriterion));
     }
 
     /**
@@ -556,6 +563,11 @@
                     Assert.assertThat(((PiRangeFieldMatch) piFieldMatch).lowValue(),
                                       is(copyFrom((byte) 0x10)));
                     break;
+                case OPTIONAL:
+                    Assert.assertThat(piFieldMatch.fieldId().id(), is("eth_dst"));
+                    Assert.assertThat(((PiOptionalFieldMatch) piFieldMatch).value(),
+                                      is(copyFrom(new byte[]{0x00, 0x11, 0x22, 0x33, 0x44, 0x55})));
+                    break;
                 default:
                     Assert.fail();
             }
diff --git a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
index b19ee53..d1e1f19 100644
--- a/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
+++ b/core/common/src/test/java/org/onosproject/codec/impl/CriterionJsonMatcher.java
@@ -57,6 +57,7 @@
 import org.onosproject.net.pi.runtime.PiExactFieldMatch;
 import org.onosproject.net.pi.runtime.PiFieldMatch;
 import org.onosproject.net.pi.runtime.PiLpmFieldMatch;
+import org.onosproject.net.pi.runtime.PiOptionalFieldMatch;
 import org.onosproject.net.pi.runtime.PiRangeFieldMatch;
 import org.onosproject.net.pi.runtime.PiTernaryFieldMatch;
 
@@ -633,6 +634,14 @@
                             return false;
                         }
                         break;
+                    case OPTIONAL:
+                        if (!Objects.equals(copyFrom(HexString.fromHexString(matchNode.get("value")
+                                                                                     .textValue(), null)),
+                                            ((PiOptionalFieldMatch) fieldMatch).value())) {
+                            description.appendText("match value was " + ((PiOptionalFieldMatch) fieldMatch).value());
+                            return false;
+                        }
+                        break;
                     default:
                         description.appendText("match type was " + fieldMatch.type().name().toLowerCase());
                         return false;
