diff --git a/apps/acl/BUILD b/apps/acl/BUILD
index 58e48ae..57963c7 100644
--- a/apps/acl/BUILD
+++ b/apps/acl/BUILD
@@ -6,6 +6,8 @@
 
 TEST_DEPS = TEST_REST + [
     "@jersey_server//jar",
+    "@minimal_json//jar",
+    "//web/api:onos-rest-tests",
 ]
 
 osgi_jar_with_tests(
diff --git a/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
index 972c1d9..21c3939 100644
--- a/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
+++ b/apps/acl/src/main/java/org/onosproject/acl/AclWebResource.java
@@ -40,7 +40,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
-import java.net.URISyntaxException;
 import java.util.List;
 
 import static org.onlab.util.Tools.readTreeFromStream;
@@ -50,6 +49,7 @@
  */
 @Path("rules")
 public class AclWebResource extends AbstractWebResource {
+    private static final int  MULTI_STATUS_RESPONSE = 207;
 
     /**
      * Get all ACL rules.
@@ -113,16 +113,19 @@
      * Add a new ACL rule.
      *
      * @param stream JSON data describing the rule
-     * @return 200 OK
-     * @throws URISyntaxException uri syntax exception
+     * @return 200 OK for successful aclRule application
      */
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
-    public Response addAclRule(InputStream stream) throws URISyntaxException {
-        AclRule newRule = jsonToRule(stream);
-        return get(AclService.class).addAclRule(newRule) ?
-                Response.created(new URI(newRule.id().toString())).build() :
-                Response.serverError().build();
+    public Response addAclRule(InputStream stream) {
+        try {
+            AclRule newRule = jsonToRule(stream);
+            return get(AclService.class).addAclRule(newRule) ?
+                    Response.created(new URI(newRule.id().toString())).build() :
+                    Response.serverError().build();
+        } catch (Exception e) {
+            return Response.status(MULTI_STATUS_RESPONSE).entity(e.getMessage()).build();
+        }
     }
 
     /**
diff --git a/apps/acl/src/test/java/org/onosproject/acl/AclWebResourceTest.java b/apps/acl/src/test/java/org/onosproject/acl/AclWebResourceTest.java
index 003cf8c..c3693cb 100644
--- a/apps/acl/src/test/java/org/onosproject/acl/AclWebResourceTest.java
+++ b/apps/acl/src/test/java/org/onosproject/acl/AclWebResourceTest.java
@@ -22,32 +22,34 @@
 package org.onosproject.acl;
 
 import org.glassfish.jersey.server.ResourceConfig;
-import org.glassfish.jersey.test.JerseyTest;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.onlab.junit.TestUtils;
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.osgi.TestServiceDirectory;
 import org.onlab.rest.BaseResource;
 import org.onosproject.core.IdGenerator;
+import org.onosproject.rest.resources.ResourceTest;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
-import java.io.IOException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
 
 import static org.easymock.EasyMock.*;
 import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 
 /**
  * Test class for ACL application REST resource.
  */
-public class AclWebResourceTest extends JerseyTest {
+public class AclWebResourceTest extends ResourceTest {
 
     final AclService mockAclService = createMock(AclService.class);
     final AclStore mockAclStore = createMock(AclStore.class);
@@ -66,8 +68,8 @@
         ServiceDirectory testDirectory = new TestServiceDirectory()
                 .add(AclService.class, mockAclService)
                 .add(AclStore.class, mockAclStore);
+        setServiceDirectory(testDirectory);
         TestUtils.setField(BaseResource.class, "services", testDirectory);
-
         AclRule.idGenerator = new MockIdGenerator();
     }
 
@@ -89,61 +91,89 @@
     }
 
     @Test
-    @Ignore("FIXME: This needs to get reworked")
-    public void addRule() throws IOException {
+    public void addInvalidRule() {
         WebTarget wt = target();
         String response;
-        String json;
+        InputStream jsonStream;
 
         replay(mockAclService);
 
-        // FIXME: following code snippet requires refactoring by extracting
-        // json string as a separated file
-
         // input a invalid JSON string that contains neither nw_src and nw_dst
-        json = "{\"ipProto\":\"TCP\",\"dstTpPort\":\"80\"}";
-        response = wt.request().post(Entity.json(json), String.class);
-        assertThat(response, containsString("Failed! Either srcIp or dstIp must be assigned."));
+        jsonStream = AclWebResourceTest.class
+                .getResourceAsStream("post-invalid-acl.json");
+        response = wt.path("rules").request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream), String.class);
+        assertThat(response.toString(), containsString("Either srcIp or dstIp must be assigned."));
+
 
         // input a invalid JSON string that doesn't contain CIDR mask bits
-        json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = wt.request().post(Entity.json(json), String.class);
+        jsonStream = AclWebResourceTest.class
+                .getResourceAsStream("post-invalid-ip-1.json");
+        response = wt.path("rules").request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream), String.class);
         assertThat(response, containsString("Malformed IPv4 prefix string: 10.0.0.1. " +
                                                     "Address must take form \"x.x.x.x/y\""));
 
         // input a invalid JSON string that contains a invalid IP address
-        json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.256/32\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = wt.request().post(Entity.json(json), String.class);
+        jsonStream = AclWebResourceTest.class
+                .getResourceAsStream("post-invalid-ip-2.json");
+        response = wt.path("rules").request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream), String.class);
         assertThat(response, containsString("Invalid IP address string: 10.0.0.256"));
 
         // input a invalid JSON string that contains a invalid IP address
-        json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.01/32\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = wt.request().post(Entity.json(json), String.class);
+
+        jsonStream = AclWebResourceTest.class
+                .getResourceAsStream("post-invalid-ip-3.json");
+        response = wt.path("rules").request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream), String.class);
         assertThat(response, containsString("Invalid IP address string: 10.0.01"));
 
         // input a invalid JSON string that contains a invalid CIDR mask bits
-        json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1/a\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = wt.request().post(Entity.json(json), String.class);
-        assertThat(response, containsString("Failed! For input string: \"a\""));
+        jsonStream = AclWebResourceTest.class
+                .getResourceAsStream("post-invalid-cidr-1.json");
+        response = wt.path("rules").request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream), String.class);
+        assertThat(response, containsString("For input string: \"a\""));
 
         // input a invalid JSON string that contains a invalid CIDR mask bits
-        json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1/33\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = wt.request().post(Entity.json(json), String.class);
+        jsonStream = AclWebResourceTest.class
+                .getResourceAsStream("post-invalid-cidr-2.json");
+        response = wt.path("rules").request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream), String.class);
         assertThat(response, containsString("Invalid prefix length 33. The value must be in the interval [0, 32]"));
 
         // input a invalid JSON string that contains a invalid ipProto value
-        json = "{\"ipProto\":\"ARP\",\"srcIp\":\"10.0.0.1/32\",\"dstTpPort\":\"80\",\"action\":\"DENY\"}";
-        response = wt.request().post(Entity.json(json), String.class);
-        assertThat(response, containsString("ipProto must be assigned to TCP, UDP, or ICMP."));
-
-        // input a invalid JSON string that contains a invalid dstTpPort value
-        json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1/32\",\"dstTpPort\":\"a\",\"action\":\"DENY\"}";
-        response = wt.request().post(Entity.json(json), String.class);
-        assertThat(response, containsString("dstTpPort must be assigned to a numerical value."));
+        jsonStream = AclWebResourceTest.class
+                .getResourceAsStream("post-invalid-proto.json");
+        response = wt.path("rules").request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream), String.class);
+        assertThat(response, containsString("ipProto must be assigned to TCP, UDP, or ICMP"));
 
         // input a invalid JSON string that contains a invalid action value
-        json = "{\"ipProto\":\"TCP\",\"srcIp\":\"10.0.0.1/32\",\"dstTpPort\":\"80\",\"action\":\"PERMIT\"}";
-        response = wt.request().post(Entity.json(json), String.class);
-        assertThat(response, containsString("action must be assigned to ALLOW or DENY."));
+        jsonStream = AclWebResourceTest.class
+                .getResourceAsStream("post-invalid-action.json");
+        response = wt.path("rules").request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream), String.class);
+        assertThat(response, containsString("action must be ALLOW or DENY"));
     }
+
+    @Test
+    public void addRule() {
+        mockAclService.addAclRule(anyObject());
+        expectLastCall().andReturn(true).anyTimes();
+        replay(mockAclService);
+
+        WebTarget wt = target();
+        InputStream jsonStream;
+
+        jsonStream = AclWebResourceTest.class
+                .getResourceAsStream("post-valid-acl.json");
+        Response response = wt.path("rules").request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
+        assertEquals(response.getLocation().getPath(), "/0x0");
+
+    }
+
+
 }
diff --git a/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-acl.json b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-acl.json
new file mode 100644
index 0000000..aace96c
--- /dev/null
+++ b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-acl.json
@@ -0,0 +1,3 @@
+{"ipProto":"TCP",
+"dstTpPort":"80"
+}
\ No newline at end of file
diff --git a/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-action.json b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-action.json
new file mode 100644
index 0000000..41b594a
--- /dev/null
+++ b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-action.json
@@ -0,0 +1,5 @@
+{"ipProto":"TCP",
+  "srcIp":"10.0.0.1/32",
+  "dstTpPort":"80",
+  "action":"PERMIT"
+}
\ No newline at end of file
diff --git a/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-cidr-1.json b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-cidr-1.json
new file mode 100644
index 0000000..f569fc4
--- /dev/null
+++ b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-cidr-1.json
@@ -0,0 +1,5 @@
+{"ipProto":"TCP",
+  "srcIp":"10.0.0.1/a",
+  "dstTpPort":"80",
+  "action":"DENY"
+}
\ No newline at end of file
diff --git a/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-cidr-2.json b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-cidr-2.json
new file mode 100644
index 0000000..f51aa96
--- /dev/null
+++ b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-cidr-2.json
@@ -0,0 +1,5 @@
+{"ipProto":"TCP",
+  "srcIp":"10.0.0.1/33",
+  "dstTpPort":"80",
+  "action":"DENY"
+}
\ No newline at end of file
diff --git a/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-ip-1.json b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-ip-1.json
new file mode 100644
index 0000000..237bf3c
--- /dev/null
+++ b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-ip-1.json
@@ -0,0 +1,5 @@
+{"ipProto":"TCP",
+  "srcIp":"10.0.0.1",
+  "dstTpPort":"80",
+  "action":"DENY"
+}
\ No newline at end of file
diff --git a/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-ip-2.json b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-ip-2.json
new file mode 100644
index 0000000..b1cef9c
--- /dev/null
+++ b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-ip-2.json
@@ -0,0 +1,5 @@
+{"ipProto":"TCP",
+  "srcIp":"10.0.0.256/32",
+  "dstTpPort":"80",
+  "action":"DENY"
+}
\ No newline at end of file
diff --git a/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-ip-3.json b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-ip-3.json
new file mode 100644
index 0000000..2fee651
--- /dev/null
+++ b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-ip-3.json
@@ -0,0 +1,5 @@
+{"ipProto":"TCP",
+  "srcIp":"10.0.01/32",
+  "dstTpPort":"80",
+  "action":"DENY"
+}
\ No newline at end of file
diff --git a/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-proto.json b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-proto.json
new file mode 100644
index 0000000..b69b89d
--- /dev/null
+++ b/apps/acl/src/test/resources/org/onosproject/acl/post-invalid-proto.json
@@ -0,0 +1,5 @@
+{"ipProto":"ARP",
+  "srcIp":"10.0.0.1/32",
+  "dstTpPort":"80",
+  "action":"DENY"
+}
\ No newline at end of file
diff --git a/apps/acl/src/test/resources/org/onosproject/acl/post-valid-acl.json b/apps/acl/src/test/resources/org/onosproject/acl/post-valid-acl.json
new file mode 100644
index 0000000..9e0ed99
--- /dev/null
+++ b/apps/acl/src/test/resources/org/onosproject/acl/post-valid-acl.json
@@ -0,0 +1,9 @@
+{"ipProto":"TCP",
+  "srcMac":"11:22:33:11:22:33",
+  "dstMac":"22:11:33:22:11:33",
+  "srcIp":"10.0.0.1/32",
+  "dstIp":"10.0.0.2/32",
+  "dstTpPort":20,
+  "srcTpPort":30,
+  "action":"DENY"
+}
\ No newline at end of file
