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) {
+
+        }
+    }
 }
