Aggregate system metrics using metrics service

Change-Id: I617fa21973b7e01b92f311a6fa5687e1f0f870c2
diff --git a/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java b/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java
index a0ef91c..e4fa11f 100644
--- a/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java
+++ b/apps/cpman/app/src/test/java/org/onosproject/cpman/rest/ControlMetricsCollectorResourceTest.java
@@ -15,28 +15,42 @@
  */
 package org.onosproject.cpman.rest;
 
-import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.util.Optional;
-
-import javax.ws.rs.client.Entity;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Gauge;
+import com.codahale.metrics.Histogram;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.Metric;
+import com.codahale.metrics.MetricFilter;
+import com.codahale.metrics.MetricRegistry;
+import com.codahale.metrics.Timer;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.Before;
 import org.junit.Test;
+import org.onlab.metrics.MetricsComponent;
+import org.onlab.metrics.MetricsFeature;
+import org.onlab.metrics.MetricsService;
 import org.onlab.osgi.ServiceDirectory;
 import org.onlab.osgi.TestServiceDirectory;
 import org.onlab.rest.BaseResource;
 import org.onosproject.cpman.ControlPlaneMonitorService;
 import org.onosproject.cpman.SystemInfo;
 import org.onosproject.cpman.impl.SystemInfoFactory;
+import org.onosproject.cpman.impl.SystemMetricsAggregator;
 import org.onosproject.net.DeviceId;
 import org.onosproject.rest.resources.ResourceTest;
 
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Optional;
+
 import static org.easymock.EasyMock.anyInt;
+import static org.easymock.EasyMock.anyLong;
 import static org.easymock.EasyMock.anyObject;
 import static org.easymock.EasyMock.anyString;
 import static org.easymock.EasyMock.createMock;
@@ -53,6 +67,10 @@
 
     final ControlPlaneMonitorService mockControlPlaneMonitorService =
                                      createMock(ControlPlaneMonitorService.class);
+    final MetricsService mockMetricsService = new MockMetricsService();
+    final MetricsComponent mockMetricsComponent = createMock(MetricsComponent.class);
+    final SystemMetricsAggregator mockAggregator = createMock(SystemMetricsAggregator.class);
+
 
     private static final String PREFIX = "collector";
 
@@ -70,7 +88,8 @@
     public void setUpTest() {
         ServiceDirectory testDirectory =
                 new TestServiceDirectory()
-                        .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService);
+                        .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService)
+                        .add(MetricsService.class, mockMetricsService);
         BaseResource.setServiceDirectory(testDirectory);
     }
 
@@ -83,6 +102,11 @@
                 (Optional<DeviceId>) anyObject());
         expectLastCall().times(5);
         replay(mockControlPlaneMonitorService);
+
+        mockAggregator.increment(anyObject(), anyLong());
+        expectLastCall();
+        replay(mockAggregator);
+
         basePostTest("cpu-metrics-post.json", PREFIX + "/cpu_metrics");
     }
 
@@ -95,6 +119,7 @@
                 (Optional<DeviceId>) anyObject());
         expectLastCall().times(4);
         replay(mockControlPlaneMonitorService);
+
         basePostTest("memory-metrics-post.json", PREFIX + "/memory_metrics");
     }
 
@@ -106,6 +131,7 @@
         mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
         expectLastCall().times(4);
         replay(mockControlPlaneMonitorService);
+
         basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
     }
 
@@ -117,6 +143,7 @@
         mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
         expectLastCall().times(8);
         replay(mockControlPlaneMonitorService);
+
         basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
     }
 
@@ -147,4 +174,90 @@
         Response response = baseTest(jsonFile, path);
         assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
     }
+
+    private class MockMetricsService implements MetricsService {
+
+        @Override
+        public MetricsComponent registerComponent(String name) {
+            MetricsComponent metricsComponent = new MetricsComponent(name);
+            return metricsComponent;
+        }
+
+        @Override
+        public MetricRegistry getMetricRegistry() {
+            return null;
+        }
+
+        @Override
+        public Counter createCounter(MetricsComponent component, MetricsFeature feature,
+                                     String metricName) {
+            return null;
+        }
+
+        @Override
+        public Histogram createHistogram(MetricsComponent component,
+                                         MetricsFeature feature, String metricName) {
+            return null;
+        }
+
+        @Override
+        public Timer createTimer(MetricsComponent component,
+                                 MetricsFeature feature, String metricName) {
+            return null;
+        }
+
+        @Override
+        public Meter createMeter(MetricsComponent component,
+                                 MetricsFeature feature, String metricName) {
+            return new Meter();
+        }
+
+        @Override
+        public <T extends Metric> T registerMetric(MetricsComponent component,
+                                                   MetricsFeature feature,
+                                                   String metricName, T metric) {
+            return null;
+        }
+
+        @Override
+        public boolean removeMetric(MetricsComponent component,
+                                    MetricsFeature feature, String metricName) {
+            return false;
+        }
+
+        @Override
+        public Map<String, Timer> getTimers(MetricFilter filter) {
+            return Collections.emptyMap();
+        }
+
+        @Override
+        public Map<String, Gauge> getGauges(MetricFilter filter) {
+            return Collections.emptyMap();
+        }
+
+        @Override
+        public Map<String, Counter> getCounters(MetricFilter filter) {
+            return Collections.emptyMap();
+        }
+
+        @Override
+        public Map<String, Meter> getMeters(MetricFilter filter) {
+            return Collections.emptyMap();
+        }
+
+        @Override
+        public Map<String, Histogram> getHistograms(MetricFilter filter) {
+            return Collections.emptyMap();
+        }
+
+        @Override
+        public Map<String, Metric> getMetrics() {
+            return Collections.emptyMap();
+        }
+
+        @Override
+        public void removeMatching(MetricFilter filter) {
+
+        }
+    }
 }