diff --git a/web/api/src/test/java/org/onosproject/rest/resources/DevicesResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/DevicesResourceTest.java
index 6b6386f..c4e474b 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/DevicesResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/DevicesResourceTest.java
@@ -19,6 +19,7 @@
 import com.eclipsesource.json.JsonArray;
 import com.eclipsesource.json.JsonObject;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import org.hamcrest.Description;
 import org.hamcrest.TypeSafeMatcher;
 import org.junit.After;
@@ -35,9 +36,17 @@
 import org.onosproject.net.MastershipRole;
 import org.onosproject.net.Port;
 import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.driver.DriverService;
+import org.onosproject.net.driver.DefaultDriver;
+import org.onosproject.net.driver.TestBehaviourImpl;
+import org.onosproject.net.driver.TestBehaviour;
+import org.onosproject.net.driver.TestBehaviourTwo;
+import org.onosproject.net.driver.TestBehaviourTwoImpl;
 
 import javax.ws.rs.NotFoundException;
 import javax.ws.rs.client.WebTarget;
+
+import java.util.ArrayList;
 import java.util.List;
 
 import static org.easymock.EasyMock.createMock;
@@ -61,6 +70,13 @@
  */
 public class DevicesResourceTest extends ResourceTest {
     DeviceService mockDeviceService;
+    DriverService mockDriverService;
+    DefaultDriver driver = new DefaultDriver("ovs", new ArrayList<>(), "Circus", "lux", "1.2a",
+            ImmutableMap.of(TestBehaviour.class,
+                    TestBehaviourImpl.class,
+                    TestBehaviourTwo.class,
+                    TestBehaviourTwoImpl.class),
+            ImmutableMap.of("foo", "bar"));
 
     /**
      * Hamcrest matcher to check that an device representation in JSON matches
@@ -99,6 +115,7 @@
 
             // check HW version field
             String jsonHwVersion = jsonDevice.get("hw").asString();
+
             if (!jsonHwVersion.equals(device.hwVersion())) {
                 reason = "hw Version " + device.hwVersion();
                 return false;
@@ -212,7 +229,7 @@
     @Before
     public void setUpMocks() {
         mockDeviceService = createMock(DeviceService.class);
-
+        mockDriverService = createMock(DriverService.class);
         expect(mockDeviceService.isAvailable(isA(DeviceId.class)))
                 .andReturn(true)
                 .anyTimes();
@@ -220,12 +237,14 @@
                 .andReturn(MastershipRole.MASTER)
                 .anyTimes();
 
+
         // Register the services needed for the test
         CodecManager codecService =  new CodecManager();
         codecService.activate();
         ServiceDirectory testDirectory =
                 new TestServiceDirectory()
                         .add(DeviceService.class, mockDeviceService)
+                        .add(DriverService.class, mockDriverService)
                         .add(CodecService.class, codecService);
 
         BaseResource.setServiceDirectory(testDirectory);
@@ -267,6 +286,22 @@
 
         replay(mockDeviceService);
 
+        expect(mockDriverService.getDriver(did("dev1")))
+                .andReturn(driver)
+                .anyTimes();
+
+        expect(mockDriverService.getDriver(did("dev2")))
+                .andReturn(driver)
+                .anyTimes();
+
+        expect(mockDriverService.getDriver(did("dev3")))
+                .andReturn(driver)
+                .anyTimes();
+
+        replay(mockDriverService);
+
+
+
         WebTarget wt = target();
         String response = wt.path("devices").request().get(String.class);
         assertThat(response, containsString("{\"devices\":["));
@@ -295,11 +330,14 @@
         String deviceIdString = "testdevice";
         DeviceId deviceId = did(deviceIdString);
         Device device = device(deviceIdString);
-
         expect(mockDeviceService.getDevice(deviceId))
                 .andReturn(device)
                 .once();
         replay(mockDeviceService);
+        expect(mockDriverService.getDriver(deviceId))
+                .andReturn(driver)
+                .anyTimes();
+        replay(mockDriverService);
 
         WebTarget wt = target();
         String response = wt.path("devices/" + deviceId).request().get(String.class);
@@ -317,6 +355,7 @@
         DeviceId deviceId = did(deviceIdString);
         Device device = device(deviceIdString);
 
+
         Port port1 = new DefaultPort(device, portNumber(1), true);
         Port port2 = new DefaultPort(device, portNumber(2), true);
         Port port3 = new DefaultPort(device, portNumber(3), true);
@@ -331,6 +370,12 @@
                 .once();
         replay(mockDeviceService);
 
+        expect(mockDriverService.getDriver(deviceId))
+                .andReturn(driver)
+                .anyTimes();
+        replay(mockDriverService);
+
+
         WebTarget wt = target();
         String response =
                 wt.path("devices/" + deviceId + "/ports").request()
