blob: effb3de4f5d6b1c800d1f24e37e350ef751434e5 [file] [log] [blame]
Jian Lic132c112016-01-28 20:27:34 -08001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Jian Lic132c112016-01-28 20:27:34 -08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.cpman.rest;
17
Jian Li7eed4172016-04-07 22:12:03 -070018import com.codahale.metrics.Counter;
19import com.codahale.metrics.Gauge;
20import com.codahale.metrics.Histogram;
21import com.codahale.metrics.Meter;
22import com.codahale.metrics.Metric;
23import com.codahale.metrics.MetricFilter;
24import com.codahale.metrics.MetricRegistry;
25import com.codahale.metrics.Timer;
Jian Li9d616492016-03-09 10:52:49 -080026import org.glassfish.jersey.server.ResourceConfig;
Jian Lic132c112016-01-28 20:27:34 -080027import org.junit.Before;
28import org.junit.Test;
Jian Li7eed4172016-04-07 22:12:03 -070029import org.onlab.metrics.MetricsComponent;
30import org.onlab.metrics.MetricsFeature;
Jian Li55cbd5c2016-04-06 09:50:20 -070031import org.onlab.metrics.MetricsReporter;
Jian Li7eed4172016-04-07 22:12:03 -070032import org.onlab.metrics.MetricsService;
Jian Lic132c112016-01-28 20:27:34 -080033import org.onlab.osgi.ServiceDirectory;
34import org.onlab.osgi.TestServiceDirectory;
35import org.onlab.rest.BaseResource;
36import org.onosproject.cpman.ControlPlaneMonitorService;
Jian Li1a424692016-02-03 16:21:18 -080037import org.onosproject.cpman.SystemInfo;
38import org.onosproject.cpman.impl.SystemInfoFactory;
Jian Li7eed4172016-04-07 22:12:03 -070039import org.onosproject.cpman.impl.SystemMetricsAggregator;
Jian Lic132c112016-01-28 20:27:34 -080040import org.onosproject.net.DeviceId;
Ray Milkey7c251822016-04-06 17:38:25 -070041import org.onosproject.rest.resources.ResourceTest;
Jian Lic132c112016-01-28 20:27:34 -080042
Jian Li7eed4172016-04-07 22:12:03 -070043import javax.ws.rs.client.Entity;
44import javax.ws.rs.client.WebTarget;
45import javax.ws.rs.core.MediaType;
46import javax.ws.rs.core.Response;
47import java.io.InputStream;
48import java.net.HttpURLConnection;
49import java.util.Collections;
50import java.util.Map;
51import java.util.Optional;
52
Jian Lic5cb4a12016-02-03 23:24:42 -080053import static org.easymock.EasyMock.anyInt;
Jian Li7eed4172016-04-07 22:12:03 -070054import static org.easymock.EasyMock.anyLong;
Jian Lic132c112016-01-28 20:27:34 -080055import static org.easymock.EasyMock.anyObject;
Jian Liba6b1172016-02-01 22:40:42 -080056import static org.easymock.EasyMock.anyString;
Jian Lic132c112016-01-28 20:27:34 -080057import static org.easymock.EasyMock.createMock;
58import static org.easymock.EasyMock.expectLastCall;
59import static org.easymock.EasyMock.replay;
60import static org.hamcrest.Matchers.is;
61import static org.hamcrest.Matchers.notNullValue;
62import static org.junit.Assert.assertThat;
63
64/**
65 * Unit test for ControlMetricsCollector.
66 */
Ray Milkey7c251822016-04-06 17:38:25 -070067public class ControlMetricsCollectorResourceTest extends ResourceTest {
Jian Lic132c112016-01-28 20:27:34 -080068
69 final ControlPlaneMonitorService mockControlPlaneMonitorService =
70 createMock(ControlPlaneMonitorService.class);
Jian Li7eed4172016-04-07 22:12:03 -070071 final MetricsService mockMetricsService = new MockMetricsService();
72 final MetricsComponent mockMetricsComponent = createMock(MetricsComponent.class);
73 final SystemMetricsAggregator mockAggregator = createMock(SystemMetricsAggregator.class);
74
Jian Lic132c112016-01-28 20:27:34 -080075
Jian Li54df73e2016-02-01 17:09:03 -080076 private static final String PREFIX = "collector";
77
Jian Lic132c112016-01-28 20:27:34 -080078 /**
Jian Li1fdd2242016-02-05 10:01:19 -080079 * Constructs a control metrics collector resource test instance.
80 */
81 public ControlMetricsCollectorResourceTest() {
Jian Li9d616492016-03-09 10:52:49 -080082 super(ResourceConfig.forApplicationClass(CPManWebApplication.class));
Jian Li1fdd2242016-02-05 10:01:19 -080083 }
84
85 /**
Jian Lic132c112016-01-28 20:27:34 -080086 * Sets up the global values for all the tests.
87 */
88 @Before
89 public void setUpTest() {
90 ServiceDirectory testDirectory =
91 new TestServiceDirectory()
Jian Li7eed4172016-04-07 22:12:03 -070092 .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService)
93 .add(MetricsService.class, mockMetricsService);
Jian Lic132c112016-01-28 20:27:34 -080094 BaseResource.setServiceDirectory(testDirectory);
95 }
96
Jian Li1fdd2242016-02-05 10:01:19 -080097 /**
98 * Tests CPU metrics POST through REST API.
99 */
Jian Lic132c112016-01-28 20:27:34 -0800100 @Test
101 public void testCpuMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800102 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -0800103 (Optional<DeviceId>) anyObject());
104 expectLastCall().times(5);
105 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700106
107 mockAggregator.increment(anyObject(), anyLong());
108 expectLastCall();
109 replay(mockAggregator);
110
Jian Li54df73e2016-02-01 17:09:03 -0800111 basePostTest("cpu-metrics-post.json", PREFIX + "/cpu_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800112 }
113
Jian Li1fdd2242016-02-05 10:01:19 -0800114 /**
115 * Tests memory metrics POST through REST API.
116 */
Jian Lic132c112016-01-28 20:27:34 -0800117 @Test
118 public void testMemoryMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800119 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -0800120 (Optional<DeviceId>) anyObject());
121 expectLastCall().times(4);
122 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700123
Jian Li54df73e2016-02-01 17:09:03 -0800124 basePostTest("memory-metrics-post.json", PREFIX + "/memory_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800125 }
126
Jian Li1fdd2242016-02-05 10:01:19 -0800127 /**
128 * Tests disk metrics POST through REST API.
129 */
Jian Lic132c112016-01-28 20:27:34 -0800130 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800131 public void testDiskMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800132 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800133 expectLastCall().times(4);
Jian Lic132c112016-01-28 20:27:34 -0800134 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700135
Jian Li54df73e2016-02-01 17:09:03 -0800136 basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800137 }
138
Jian Li1fdd2242016-02-05 10:01:19 -0800139 /**
140 * Tests network metrics POST through REST API.
141 */
Jian Lic132c112016-01-28 20:27:34 -0800142 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800143 public void testNetworkMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800144 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800145 expectLastCall().times(8);
Jian Lic132c112016-01-28 20:27:34 -0800146 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700147
Jian Li54df73e2016-02-01 17:09:03 -0800148 basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800149 }
150
151 @Test
Jian Li1a424692016-02-03 16:21:18 -0800152 public void testSystemInfoPost() {
153 basePostTest("system-info-post.json", PREFIX + "/system_info");
154
155 SystemInfo si = SystemInfoFactory.getInstance().getSystemInfo();
156 assertThat(si.cpuSpeed(), is(2048));
157 assertThat(si.coreCount(), is(6));
158 assertThat(si.cpuCount(), is(2));
159 assertThat(si.totalMemory(), is(4096));
Jian Lic132c112016-01-28 20:27:34 -0800160 }
161
Jian Li9d616492016-03-09 10:52:49 -0800162 private Response baseTest(String jsonFile, String path) {
163 final WebTarget wt = target();
Jian Lic132c112016-01-28 20:27:34 -0800164 InputStream jsonStream = ControlMetricsCollectorResourceTest.class
165 .getResourceAsStream(jsonFile);
166
167 assertThat(jsonStream, notNullValue());
168
Jian Li9d616492016-03-09 10:52:49 -0800169 return wt.path(path)
170 .request(MediaType.APPLICATION_JSON_TYPE)
171 .post(Entity.json(jsonStream));
Jian Liba6b1172016-02-01 22:40:42 -0800172 }
173
174 private void basePostTest(String jsonFile, String path) {
Jian Li9d616492016-03-09 10:52:49 -0800175 Response response = baseTest(jsonFile, path);
Jian Lic132c112016-01-28 20:27:34 -0800176 assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
177 }
Jian Li7eed4172016-04-07 22:12:03 -0700178
179 private class MockMetricsService implements MetricsService {
180
181 @Override
182 public MetricsComponent registerComponent(String name) {
183 MetricsComponent metricsComponent = new MetricsComponent(name);
184 return metricsComponent;
185 }
186
187 @Override
188 public MetricRegistry getMetricRegistry() {
189 return null;
190 }
191
192 @Override
193 public Counter createCounter(MetricsComponent component, MetricsFeature feature,
194 String metricName) {
195 return null;
196 }
197
198 @Override
199 public Histogram createHistogram(MetricsComponent component,
200 MetricsFeature feature, String metricName) {
201 return null;
202 }
203
204 @Override
205 public Timer createTimer(MetricsComponent component,
206 MetricsFeature feature, String metricName) {
207 return null;
208 }
209
210 @Override
211 public Meter createMeter(MetricsComponent component,
212 MetricsFeature feature, String metricName) {
213 return new Meter();
214 }
215
216 @Override
217 public <T extends Metric> T registerMetric(MetricsComponent component,
218 MetricsFeature feature,
219 String metricName, T metric) {
220 return null;
221 }
222
223 @Override
Jian Li55cbd5c2016-04-06 09:50:20 -0700224 public void registerReporter(MetricsReporter reporter) {
225 }
226
227 @Override
228 public void unregisterReporter(MetricsReporter reporter) {
229 }
230
231 @Override
232 public void notifyReporters() {
233 }
234
235 @Override
Jian Li7eed4172016-04-07 22:12:03 -0700236 public boolean removeMetric(MetricsComponent component,
237 MetricsFeature feature, String metricName) {
238 return false;
239 }
240
241 @Override
242 public Map<String, Timer> getTimers(MetricFilter filter) {
243 return Collections.emptyMap();
244 }
245
246 @Override
247 public Map<String, Gauge> getGauges(MetricFilter filter) {
248 return Collections.emptyMap();
249 }
250
251 @Override
252 public Map<String, Counter> getCounters(MetricFilter filter) {
253 return Collections.emptyMap();
254 }
255
256 @Override
257 public Map<String, Meter> getMeters(MetricFilter filter) {
258 return Collections.emptyMap();
259 }
260
261 @Override
262 public Map<String, Histogram> getHistograms(MetricFilter filter) {
263 return Collections.emptyMap();
264 }
265
266 @Override
267 public Map<String, Metric> getMetrics() {
268 return Collections.emptyMap();
269 }
270
271 @Override
272 public void removeMatching(MetricFilter filter) {
273
274 }
275 }
Jian Lic132c112016-01-28 20:27:34 -0800276}