ONOS-6106 Adding Missing Fields in the " get flows and get devices" rest api

Change-Id: I6657b8d75388e850acaa53fe4f5be261e45a9bca
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/DevicesWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/DevicesWebResource.java
index 76641da..b16846e 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/DevicesWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/DevicesWebResource.java
@@ -88,8 +88,9 @@
     public Response removeDevice(@PathParam("id") String id) {
         Device device = nullIsNotFound(get(DeviceService.class).getDevice(deviceId(id)),
                                        DEVICE_NOT_FOUND);
+        ObjectNode result = codec(Device.class).encode(device, this);
         get(DeviceAdminService.class).removeDevice(deviceId(id));
-        return ok(codec(Device.class).encode(device, this)).build();
+        return ok(result).build();
     }
 
     /**
diff --git a/web/api/src/main/resources/definitions/DeviceGet.json b/web/api/src/main/resources/definitions/DeviceGet.json
index 03e67d5..5573359 100644
--- a/web/api/src/main/resources/definitions/DeviceGet.json
+++ b/web/api/src/main/resources/definitions/DeviceGet.json
@@ -10,6 +10,7 @@
     "hw",
     "sw",
     "serial",
+    "driver",
     "chassisId",
     "annotations"
   ],
@@ -46,6 +47,10 @@
       "type": "string",
       "example": "123"
     },
+    "driver": {
+      "type": "string",
+      "example": "ovs"
+    },
     "chassisId": {
       "type": "string",
       "example": "1"
@@ -67,6 +72,10 @@
           "type": "string",
           "example": "OF_13"
         },
+        "driver": {
+          "type": "string",
+          "example": "ovs"
+        },
         "channelId": {
           "type": "string",
           "example": "10.128.12.4:34689"
diff --git a/web/api/src/main/resources/definitions/DeviceGetPorts.json b/web/api/src/main/resources/definitions/DeviceGetPorts.json
index 3a5230c..9193e4a 100644
--- a/web/api/src/main/resources/definitions/DeviceGetPorts.json
+++ b/web/api/src/main/resources/definitions/DeviceGetPorts.json
@@ -10,6 +10,7 @@
     "hw",
     "sw",
     "serial",
+    "driver",
     "chassisId",
     "annotations"
   ],
@@ -46,6 +47,10 @@
       "type": "string",
       "example": "123"
     },
+    "driver": {
+      "type": "string",
+      "example": "ovs"
+    },
     "chassisId": {
       "type": "string",
       "example": "1"
@@ -129,4 +134,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/web/api/src/main/resources/definitions/DevicesGet.json b/web/api/src/main/resources/definitions/DevicesGet.json
index 4cf4d9d..937c684 100644
--- a/web/api/src/main/resources/definitions/DevicesGet.json
+++ b/web/api/src/main/resources/definitions/DevicesGet.json
@@ -23,6 +23,7 @@
           "hw",
           "sw",
           "serial",
+          "driver",
           "chassisId",
           "annotations"
         ],
@@ -59,6 +60,10 @@
             "type": "string",
             "example": "123"
           },
+          "driver": {
+            "type": "string",
+            "example": "ovs"
+          },
           "chassisId": {
             "type": "string",
             "example": "1"
diff --git a/web/api/src/main/resources/definitions/FlowEntries.json b/web/api/src/main/resources/definitions/FlowEntries.json
index 15f8628..edc4070 100644
--- a/web/api/src/main/resources/definitions/FlowEntries.json
+++ b/web/api/src/main/resources/definitions/FlowEntries.json
@@ -27,6 +27,7 @@
           "life",
           "packets",
           "bytes",
+          "liveType",
           "lastSeen"
         ],
         "properties": {
@@ -85,6 +86,10 @@
             "format": "int64",
             "example": 1826226
           },
+          "liveType": {
+            "type": "string",
+            "example": "UNKNOWN"
+          },
           "lastSeen": {
             "type": "integer",
             "format": "int64",
diff --git a/web/api/src/main/resources/definitions/FlowRules.json b/web/api/src/main/resources/definitions/FlowRules.json
index 026b726..acdbe7c 100644
--- a/web/api/src/main/resources/definitions/FlowRules.json
+++ b/web/api/src/main/resources/definitions/FlowRules.json
@@ -22,7 +22,8 @@
           "priority",
           "timeout",
           "isPermanent",
-          "deviceId"
+          "deviceId",
+          "liveType"
         ],
         "properties": {
           "id": {
@@ -61,6 +62,10 @@
             "type": "string",
             "example": "of:0000000000000003"
           },
+          "liveType": {
+            "type": "string",
+            "example": "UNKNOWN"
+          },
           "treatment": {
             "type": "object",
             "title": "treatment",
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()
diff --git a/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java
index ef08c9f..efabf66f 100644
--- a/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/resources/IntentsResourceTest.java
@@ -164,6 +164,11 @@
         }
 
         @Override
+        public FlowLiveType liveType() {
+            return FlowLiveType.IMMEDIATE;
+        }
+
+        @Override
         public long life(TimeUnit timeUnit) {
             return SECONDS.convert(baseValue + 11, timeUnit);
         }