diff --git a/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/CiscoRestDriversLoaderTest.java b/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/CiscoRestDriversLoaderTest.java
new file mode 100644
index 0000000..838e437
--- /dev/null
+++ b/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/CiscoRestDriversLoaderTest.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2017-present 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.drivers.cisco.rest;
+
+import org.junit.Before;
+import org.onosproject.net.driver.AbstractDriverLoaderTest;
+
+
+/**
+ * Cisco REST drivers loader test.
+ */
+public class CiscoRestDriversLoaderTest extends AbstractDriverLoaderTest {
+
+    @Before
+    public void setUp() {
+        loader = new CiscoRestDriversLoader();
+    }
+}
diff --git a/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/NxApiRequestTest.java b/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/NxApiRequestTest.java
new file mode 100644
index 0000000..4ef61da
--- /dev/null
+++ b/drivers/cisco/rest/src/test/java/org/onosproject/drivers/cisco/rest/NxApiRequestTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2017-present 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.drivers.cisco.rest;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests Cisco NX-API request message generator for Cisco NXOS devices.
+ */
+public class NxApiRequestTest {
+    public static final String REQ_FILE1 = "/testNxApiRequest1.json";
+    public static final String REQ_FILE2 = "/testNxApiRequest2.json";
+
+    @Test
+    public void oneRequestTest() throws IOException {
+        InputStream streamOrig = getClass().getResourceAsStream(REQ_FILE1);
+        ObjectMapper om = new ObjectMapper();
+        JsonNode node1 = om.readTree(streamOrig);
+
+        ArrayList<String> cmds = new ArrayList<>();
+        cmds.add("show interface");
+
+        JsonNode node2 = om.readTree(NxApiRequest.generate(cmds, NxApiRequest.CommandType.CLI));
+
+        assertEquals(node1.toString(), node2.toString());
+    }
+
+    @Test
+    public void manyRequestsTest() throws IOException {
+        InputStream streamOrig = getClass().getResourceAsStream(REQ_FILE2);
+        ObjectMapper om = new ObjectMapper();
+        JsonNode node1 = om.readTree(streamOrig);
+
+        ArrayList<String> cmds = new ArrayList<>();
+        cmds.add("show interface");
+        cmds.add("show ver");
+
+        JsonNode node2 = om.readTree(NxApiRequest.generate(cmds, NxApiRequest.CommandType.CLI));
+
+        assertEquals(node1.toString(), node2.toString());
+    }
+}
diff --git a/drivers/cisco/rest/src/test/resources/testNxApiRequest1.json b/drivers/cisco/rest/src/test/resources/testNxApiRequest1.json
new file mode 100644
index 0000000..84335fe
--- /dev/null
+++ b/drivers/cisco/rest/src/test/resources/testNxApiRequest1.json
@@ -0,0 +1,11 @@
+[
+  {
+    "jsonrpc": "2.0",
+    "method": "cli",
+    "params": {
+      "cmd": "show interface",
+      "version": 1
+    },
+    "id": 1
+  }
+]
\ No newline at end of file
diff --git a/drivers/cisco/rest/src/test/resources/testNxApiRequest2.json b/drivers/cisco/rest/src/test/resources/testNxApiRequest2.json
new file mode 100644
index 0000000..687e4c6
--- /dev/null
+++ b/drivers/cisco/rest/src/test/resources/testNxApiRequest2.json
@@ -0,0 +1,20 @@
+[
+  {
+    "jsonrpc": "2.0",
+    "method": "cli",
+    "params": {
+      "cmd": "show interface",
+      "version": 1
+    },
+    "id": 1
+  },
+  {
+    "jsonrpc": "2.0",
+    "method": "cli",
+    "params": {
+      "cmd": "show ver",
+      "version": 1
+    },
+    "id": 2
+  }
+]
\ No newline at end of file
