Add getMetersByDeviceId REST method
Change-Id: I50b9158aac1c8b0789ee271276db0fa701fdb7df
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
index 801e46d..be484ef 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/MetersWebResource.java
@@ -73,10 +73,29 @@
}
/**
+ * Returns a collection of meters by the device id.
+ *
+ * @param deviceId device identifier
+ * @return array of meters which belongs to specified device
+ * @onos.rsModel Meters
+ */
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("{deviceId}")
+ public Response getMetersByDeviceId(@PathParam("deviceId") String deviceId) {
+ DeviceId did = DeviceId.deviceId(deviceId);
+ final Iterable<Meter> meters = meterService.getMeters(did);
+ if (meters != null) {
+ meters.forEach(meter -> metersNode.add(codec(Meter.class).encode(meter, this)));
+ }
+ return ok(root).build();
+ }
+
+ /**
* Returns a meter by the meter id.
*
* @param deviceId device identifier
- * @return array of all the groups in the system
+ * @return a meter, return 404 if no entry has been found
* @onos.rsModel Meter
*/
@GET
diff --git a/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java b/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
index 3714e48..fb027d1 100644
--- a/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
+++ b/web/api/src/test/java/org/onosproject/rest/MetersResourceTest.java
@@ -393,7 +393,35 @@
}
/**
- * Tests the result of a rest api GET for a device.
+ * Tests the results of a rest api GET for a device.
+ */
+ @Test
+ public void testMeterSingleDevice() {
+ setupMockMeters();
+
+ final Set<Meter> meters1 = new HashSet<>();
+ meters1.add(meter1);
+ meters1.add(meter2);
+
+ expect(mockMeterService.getMeters(anyObject())).andReturn(meters1).anyTimes();
+ replay(mockMeterService);
+ replay(mockDeviceService);
+
+ final WebResource rs = resource();
+ final String response = rs.path("meters/" + deviceId1.toString()).get(String.class);
+ final JsonObject result = JsonObject.readFrom(response);
+ assertThat(result, notNullValue());
+
+ assertThat(result.names(), hasSize(1));
+ assertThat(result.names().get(0), is("meters"));
+ final JsonArray jsonMeters = result.get("meters").asArray();
+ assertThat(jsonMeters, notNullValue());
+ assertThat(jsonMeters, hasMeter(meter1));
+ assertThat(jsonMeters, hasMeter(meter2));
+ }
+
+ /**
+ * Tests the result of a rest api GET for a device with meter id.
*/
@Test
public void testMeterSingleDeviceWithId() {