[Falcon][ONOS-3601] Add REST API for metrics service with unit test
Change-Id: I33ec561d1d83c6f1167e960bc2f684a117e6ea9c
diff --git a/web/api/src/test/java/org/onosproject/rest/MetricsResourceTest.java b/web/api/src/test/java/org/onosproject/rest/MetricsResourceTest.java
new file mode 100644
index 0000000..089c5fe
--- /dev/null
+++ b/web/api/src/test/java/org/onosproject/rest/MetricsResourceTest.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2014-2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.rest;
+
+import com.codahale.metrics.Counter;
+import com.codahale.metrics.Meter;
+import com.codahale.metrics.Metric;
+import com.eclipsesource.json.JsonArray;
+import com.eclipsesource.json.JsonObject;
+import com.google.common.collect.ImmutableMap;
+import com.sun.jersey.api.client.WebResource;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.metrics.MetricsService;
+import org.onlab.osgi.ServiceDirectory;
+import org.onlab.osgi.TestServiceDirectory;
+import org.onlab.rest.BaseResource;
+import org.onosproject.codec.CodecService;
+import org.onosproject.codec.impl.CodecManager;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.verify;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Unit tests for Metrics REST APIs.
+ */
+public class MetricsResourceTest extends ResourceTest {
+ MetricsService mockMetricsService;
+
+ /**
+ * Initializes test mocks and environment.
+ */
+ @Before
+ public void setUpTest() {
+ mockMetricsService = createMock(MetricsService.class);
+
+ // Register the services needed for the test
+ final CodecManager codecService = new CodecManager();
+ codecService.activate();
+ ServiceDirectory testDirectory =
+ new TestServiceDirectory()
+ .add(MetricsService.class, mockMetricsService)
+ .add(CodecService.class, codecService);
+ BaseResource.setServiceDirectory(testDirectory);
+ }
+
+ /**
+ * Verifies mocks.
+ */
+ @After
+ public void tearDownTest() {
+ verify(mockMetricsService);
+ }
+
+ /**
+ * Tests that a fetch of a non-existent object throws an exception.
+ */
+ @Test
+ public void testBadGet() {
+ Counter onosCounter = new Counter();
+ onosCounter.inc();
+
+ Meter onosMeter = new Meter();
+ onosMeter.mark();
+
+ ImmutableMap<String, Metric> metrics =
+ new ImmutableMap.Builder<String, Metric>()
+ .put("onosCounter", onosCounter)
+ .put("onosMeter", onosMeter)
+ .build();
+
+ expect(mockMetricsService.getMetrics())
+ .andReturn(metrics)
+ .anyTimes();
+
+ replay(mockMetricsService);
+
+ WebResource rs = resource();
+ String response = rs.path("metrics").get(String.class);
+ assertThat(response, containsString("{\"metrics\":["));
+
+ JsonObject result = JsonObject.readFrom(response);
+ assertThat(result, notNullValue());
+
+ JsonArray jsonMetrics = result.get("metrics").asArray();
+ assertThat(jsonMetrics, notNullValue());
+ assertThat(jsonMetrics.size(), is(2));
+ }
+}