diff --git a/impl/src/test/java/org/onosproject/segmentrouting/policy/api/DropPolicyCodecTest.java b/impl/src/test/java/org/onosproject/segmentrouting/policy/api/DropPolicyCodecTest.java
new file mode 100644
index 0000000..5d95625
--- /dev/null
+++ b/impl/src/test/java/org/onosproject/segmentrouting/policy/api/DropPolicyCodecTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2021-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.segmentrouting.policy.api;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import junit.framework.TestCase;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.codec.impl.MockCodecContext;
+
+import java.io.InputStream;
+
+public class DropPolicyCodecTest extends TestCase {
+    private DropPolicy dropPolicy;
+
+    private CodecContext context;
+    private JsonCodec<DropPolicy> codec;
+
+    @Before
+    public void setUp() throws Exception {
+        context = new MockCodecContext();
+        codec = new DropPolicyCodec();
+
+        dropPolicy = new DropPolicy();
+    }
+
+    @Test
+    public void testEncode() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+
+        InputStream jsonStream1 = RedirectPolicyCodecTest.class.getResourceAsStream("/droppolicy.json");
+        JsonNode expected = mapper.readTree(jsonStream1);
+
+        JsonNode actual = codec.encode(dropPolicy, context);
+
+        assertEquals(expected.get(RedirectPolicyCodec.POLICY_ID), actual.get(RedirectPolicyCodec.POLICY_ID));
+        assertEquals(expected.get(RedirectPolicyCodec.POLICY_TYPE), actual.get(RedirectPolicyCodec.POLICY_TYPE));
+    }
+
+    @Test
+    public void testDecode() throws Exception  {
+        ObjectMapper mapper = new ObjectMapper();
+
+        InputStream jsonStream1 = RedirectPolicyCodecTest.class.getResourceAsStream("/droppolicy.json");
+        ObjectNode json = mapper.readTree(jsonStream1).deepCopy();
+
+        DropPolicy actual = codec.decode(json, context);
+
+        assertEquals(dropPolicy, actual);
+    }
+}
\ No newline at end of file
diff --git a/impl/src/test/java/org/onosproject/segmentrouting/policy/api/RedirectPolicyCodecTest.java b/impl/src/test/java/org/onosproject/segmentrouting/policy/api/RedirectPolicyCodecTest.java
new file mode 100644
index 0000000..7541436
--- /dev/null
+++ b/impl/src/test/java/org/onosproject/segmentrouting/policy/api/RedirectPolicyCodecTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2021-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.segmentrouting.policy.api;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import junit.framework.TestCase;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.codec.impl.MockCodecContext;
+import org.onosproject.net.DeviceId;
+
+import java.io.InputStream;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+public class RedirectPolicyCodecTest extends TestCase {
+    private RedirectPolicy redirectPolicy;
+
+    private CodecContext context;
+    private JsonCodec<RedirectPolicy> codec;
+
+    @Before
+    public void setUp() throws Exception {
+        context = new MockCodecContext();
+        codec = new RedirectPolicyCodec();
+
+        List<DeviceId> deviceIds = new LinkedList<>();
+        deviceIds.add(DeviceId.deviceId("of:0000000000000001"));
+        deviceIds.add(DeviceId.deviceId("of:0000000000000002"));
+        deviceIds.add(DeviceId.deviceId("of:0000000000000003"));
+        redirectPolicy = new RedirectPolicy(Set.copyOf(deviceIds));
+    }
+
+    @Test
+    public void testEncode() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+
+        InputStream jsonStream1 = RedirectPolicyCodecTest.class.getResourceAsStream("/redirectpolicy.json");
+        JsonNode expected = mapper.readTree(jsonStream1);
+
+        JsonNode actual = codec.encode(redirectPolicy, context);
+
+        assertEquals(expected.get(RedirectPolicyCodec.POLICY_ID), actual.get(RedirectPolicyCodec.POLICY_ID));
+        assertEquals(expected.get(RedirectPolicyCodec.POLICY_TYPE), actual.get(RedirectPolicyCodec.POLICY_TYPE));
+        assertEquals(expected.get(RedirectPolicyCodec.DEVICE_ID), actual.get(RedirectPolicyCodec.DEVICE_ID));
+    }
+
+    @Test
+    public void testDecode() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+
+        InputStream jsonStream1 = RedirectPolicyCodecTest.class.getResourceAsStream("/redirectpolicy.json");
+        ObjectNode json = mapper.readTree(jsonStream1).deepCopy();
+
+        RedirectPolicy actual = codec.decode(json, context);
+
+        assertEquals(redirectPolicy, actual);
+    }
+}
\ No newline at end of file
diff --git a/impl/src/test/java/org/onosproject/segmentrouting/policy/api/TrafficMatchCodecTest.java b/impl/src/test/java/org/onosproject/segmentrouting/policy/api/TrafficMatchCodecTest.java
new file mode 100644
index 0000000..c70eb7c
--- /dev/null
+++ b/impl/src/test/java/org/onosproject/segmentrouting/policy/api/TrafficMatchCodecTest.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2021-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.segmentrouting.policy.api;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import junit.framework.TestCase;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.Ip4Address;
+import org.onlab.packet.TpPort;
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.codec.impl.MockCodecContext;
+import org.onosproject.net.flow.DefaultTrafficSelector;
+import org.onosproject.net.flow.TrafficSelector;
+
+import java.io.InputStream;
+
+public class TrafficMatchCodecTest extends TestCase {
+    private TrafficMatch trafficMatch;
+    private TrafficSelector trafficSelector;
+    private PolicyId policyId;
+
+    private CodecContext context;
+    private JsonCodec<TrafficMatch> codec;
+
+    @Before
+    public void setUp() throws Exception {
+        context = new MockCodecContext();
+        codec = new TrafficMatchCodec();
+
+        trafficSelector = DefaultTrafficSelector.builder()
+                .matchIPProtocol((byte) 0x06)
+                .matchIPSrc(Ip4Address.valueOf("10.0.0.1").toIpPrefix())
+                .matchIPDst(Ip4Address.valueOf("10.0.0.2").toIpPrefix())
+                .matchTcpSrc(TpPort.tpPort(80))
+                .matchTcpDst(TpPort.tpPort(81))
+                .build();
+        policyId = PolicyId.of("DROP");
+
+        trafficMatch = new TrafficMatch(trafficSelector, policyId);
+    }
+
+    @Test
+    public void testEncode() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+
+        InputStream jsonStream1 = RedirectPolicyCodecTest.class.getResourceAsStream("/trafficmatch.json");
+        JsonNode expected = mapper.readTree(jsonStream1);
+
+        JsonNode actual = codec.encode(trafficMatch, context);
+
+        assertEquals(expected.get(TrafficMatchCodec.TRAFFIC_MATCH_ID), actual.get(TrafficMatchCodec.TRAFFIC_MATCH_ID));
+        assertEquals(expected.get(TrafficMatchCodec.POLICY_ID), actual.get(TrafficMatchCodec.POLICY_ID));
+        for (int i = 0; i < trafficMatch.trafficSelector().criteria().size(); i++) {
+            assertEquals(expected.get(TrafficMatchCodec.TRAFFIC_SELECTOR).get(i),
+                    actual.get(TrafficMatchCodec.TRAFFIC_SELECTOR).get(i));
+        }
+    }
+
+    @Test
+    public void testDecode() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+
+        InputStream jsonStream1 = RedirectPolicyCodecTest.class.getResourceAsStream("/trafficmatch.json");
+        ObjectNode json = mapper.readTree(jsonStream1).deepCopy();
+
+        TrafficMatch actual = codec.decode(json, context);
+
+        assertEquals(trafficMatch, actual);
+    }
+}
\ No newline at end of file
diff --git a/impl/src/test/resources/droppolicy.json b/impl/src/test/resources/droppolicy.json
new file mode 100644
index 0000000..9a0e0ee
--- /dev/null
+++ b/impl/src/test/resources/droppolicy.json
@@ -0,0 +1,4 @@
+{
+  "policy_id": "DROP",
+  "policy_type": "DROP"
+}
\ No newline at end of file
diff --git a/impl/src/test/resources/redirectpolicy.json b/impl/src/test/resources/redirectpolicy.json
new file mode 100644
index 0000000..928788d
--- /dev/null
+++ b/impl/src/test/resources/redirectpolicy.json
@@ -0,0 +1,11 @@
+{
+  "policy_id": "REDIRECT[of:0000000000000001, of:0000000000000002, of:0000000000000003]",
+  "policy_type": "REDIRECT",
+  "spinesToEnforce": {
+    "deviceId": [
+      "of:0000000000000001",
+      "of:0000000000000002",
+      "of:0000000000000003"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/impl/src/test/resources/trafficmatch.json b/impl/src/test/resources/trafficmatch.json
new file mode 100644
index 0000000..aea9585
--- /dev/null
+++ b/impl/src/test/resources/trafficmatch.json
@@ -0,0 +1,28 @@
+{
+  "traffic_match_id": "-1756753738",
+  "policy_id": "DROP",
+  "selector": {
+    "criteria": [
+      {
+        "type": "IP_PROTO",
+        "protocol": 6
+      },
+      {
+        "type": "IPV4_SRC",
+        "ip": "10.0.0.1/32"
+      },
+      {
+        "type": "IPV4_DST",
+        "ip": "10.0.0.2/32"
+      },
+      {
+        "type": "TCP_SRC",
+        "tcpPort": 80
+      },
+      {
+        "type": "TCP_DST",
+        "tcpPort": 81
+      }
+    ]
+  }
+}
\ No newline at end of file
