blob: a22511386c17982159ce9c9a89ade357a12d51f4 [file] [log] [blame]
Jian Lic132c112016-01-28 20:27:34 -08001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
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;
Jian Lic132c112016-01-28 20:27:34 -080035import org.onosproject.cpman.ControlPlaneMonitorService;
Jian Li1a424692016-02-03 16:21:18 -080036import org.onosproject.cpman.SystemInfo;
37import org.onosproject.cpman.impl.SystemInfoFactory;
Jian Lic132c112016-01-28 20:27:34 -080038import org.onosproject.net.DeviceId;
Ray Milkey7c251822016-04-06 17:38:25 -070039import org.onosproject.rest.resources.ResourceTest;
Jian Lic132c112016-01-28 20:27:34 -080040
Jian Li7eed4172016-04-07 22:12:03 -070041import javax.ws.rs.client.Entity;
42import javax.ws.rs.client.WebTarget;
43import javax.ws.rs.core.MediaType;
44import javax.ws.rs.core.Response;
45import java.io.InputStream;
46import java.net.HttpURLConnection;
47import java.util.Collections;
48import java.util.Map;
49import java.util.Optional;
50
Jian Lic5cb4a12016-02-03 23:24:42 -080051import static org.easymock.EasyMock.anyInt;
Jian Lic132c112016-01-28 20:27:34 -080052import static org.easymock.EasyMock.anyObject;
Jian Liba6b1172016-02-01 22:40:42 -080053import static org.easymock.EasyMock.anyString;
Jian Lic132c112016-01-28 20:27:34 -080054import static org.easymock.EasyMock.createMock;
55import static org.easymock.EasyMock.expectLastCall;
56import static org.easymock.EasyMock.replay;
57import static org.hamcrest.Matchers.is;
58import static org.hamcrest.Matchers.notNullValue;
59import static org.junit.Assert.assertThat;
60
61/**
62 * Unit test for ControlMetricsCollector.
63 */
Ray Milkey7c251822016-04-06 17:38:25 -070064public class ControlMetricsCollectorResourceTest extends ResourceTest {
Jian Lic132c112016-01-28 20:27:34 -080065
66 final ControlPlaneMonitorService mockControlPlaneMonitorService =
67 createMock(ControlPlaneMonitorService.class);
Jian Li7eed4172016-04-07 22:12:03 -070068 final MetricsService mockMetricsService = new MockMetricsService();
Jian Lic132c112016-01-28 20:27:34 -080069
Jian Li54df73e2016-02-01 17:09:03 -080070 private static final String PREFIX = "collector";
71
Jian Lic132c112016-01-28 20:27:34 -080072 /**
Jian Li1fdd2242016-02-05 10:01:19 -080073 * Constructs a control metrics collector resource test instance.
74 */
75 public ControlMetricsCollectorResourceTest() {
Jian Li9d616492016-03-09 10:52:49 -080076 super(ResourceConfig.forApplicationClass(CPManWebApplication.class));
Jian Li1fdd2242016-02-05 10:01:19 -080077 }
78
79 /**
Jian Lic132c112016-01-28 20:27:34 -080080 * Sets up the global values for all the tests.
81 */
82 @Before
83 public void setUpTest() {
84 ServiceDirectory testDirectory =
85 new TestServiceDirectory()
Jian Li7eed4172016-04-07 22:12:03 -070086 .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService)
87 .add(MetricsService.class, mockMetricsService);
Ray Milkey094a1352018-01-22 14:03:54 -080088 setServiceDirectory(testDirectory);
Jian Lic132c112016-01-28 20:27:34 -080089 }
90
Jian Li1fdd2242016-02-05 10:01:19 -080091 /**
92 * Tests CPU metrics POST through REST API.
93 */
Jian Lic132c112016-01-28 20:27:34 -080094 @Test
95 public void testCpuMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -080096 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -080097 (Optional<DeviceId>) anyObject());
98 expectLastCall().times(5);
99 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700100
Jian Li54df73e2016-02-01 17:09:03 -0800101 basePostTest("cpu-metrics-post.json", PREFIX + "/cpu_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800102 }
103
Jian Li1fdd2242016-02-05 10:01:19 -0800104 /**
105 * Tests memory metrics POST through REST API.
106 */
Jian Lic132c112016-01-28 20:27:34 -0800107 @Test
108 public void testMemoryMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800109 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -0800110 (Optional<DeviceId>) anyObject());
111 expectLastCall().times(4);
112 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700113
Jian Li54df73e2016-02-01 17:09:03 -0800114 basePostTest("memory-metrics-post.json", PREFIX + "/memory_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800115 }
116
Jian Li1fdd2242016-02-05 10:01:19 -0800117 /**
118 * Tests disk metrics POST through REST API.
119 */
Jian Lic132c112016-01-28 20:27:34 -0800120 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800121 public void testDiskMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800122 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800123 expectLastCall().times(4);
Jian Lic132c112016-01-28 20:27:34 -0800124 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700125
Jian Li54df73e2016-02-01 17:09:03 -0800126 basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800127 }
128
Jian Li1fdd2242016-02-05 10:01:19 -0800129 /**
130 * Tests network metrics POST through REST API.
131 */
Jian Lic132c112016-01-28 20:27:34 -0800132 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800133 public void testNetworkMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800134 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800135 expectLastCall().times(8);
Jian Lic132c112016-01-28 20:27:34 -0800136 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700137
Jian Li54df73e2016-02-01 17:09:03 -0800138 basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800139 }
140
141 @Test
Jian Li1a424692016-02-03 16:21:18 -0800142 public void testSystemInfoPost() {
143 basePostTest("system-info-post.json", PREFIX + "/system_info");
144
145 SystemInfo si = SystemInfoFactory.getInstance().getSystemInfo();
146 assertThat(si.cpuSpeed(), is(2048));
147 assertThat(si.coreCount(), is(6));
148 assertThat(si.cpuCount(), is(2));
149 assertThat(si.totalMemory(), is(4096));
Jian Lic132c112016-01-28 20:27:34 -0800150 }
151
Jian Li9d616492016-03-09 10:52:49 -0800152 private Response baseTest(String jsonFile, String path) {
153 final WebTarget wt = target();
Jian Lic132c112016-01-28 20:27:34 -0800154 InputStream jsonStream = ControlMetricsCollectorResourceTest.class
155 .getResourceAsStream(jsonFile);
156
157 assertThat(jsonStream, notNullValue());
158
Jian Li9d616492016-03-09 10:52:49 -0800159 return wt.path(path)
160 .request(MediaType.APPLICATION_JSON_TYPE)
161 .post(Entity.json(jsonStream));
Jian Liba6b1172016-02-01 22:40:42 -0800162 }
163
164 private void basePostTest(String jsonFile, String path) {
Jian Li9d616492016-03-09 10:52:49 -0800165 Response response = baseTest(jsonFile, path);
Jian Lic132c112016-01-28 20:27:34 -0800166 assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
167 }
Jian Li7eed4172016-04-07 22:12:03 -0700168
169 private class MockMetricsService implements MetricsService {
170
171 @Override
172 public MetricsComponent registerComponent(String name) {
173 MetricsComponent metricsComponent = new MetricsComponent(name);
174 return metricsComponent;
175 }
176
177 @Override
178 public MetricRegistry getMetricRegistry() {
179 return null;
180 }
181
182 @Override
183 public Counter createCounter(MetricsComponent component, MetricsFeature feature,
184 String metricName) {
185 return null;
186 }
187
188 @Override
189 public Histogram createHistogram(MetricsComponent component,
190 MetricsFeature feature, String metricName) {
191 return null;
192 }
193
194 @Override
195 public Timer createTimer(MetricsComponent component,
196 MetricsFeature feature, String metricName) {
197 return null;
198 }
199
200 @Override
201 public Meter createMeter(MetricsComponent component,
202 MetricsFeature feature, String metricName) {
203 return new Meter();
204 }
205
206 @Override
207 public <T extends Metric> T registerMetric(MetricsComponent component,
208 MetricsFeature feature,
209 String metricName, T metric) {
210 return null;
211 }
212
213 @Override
Jian Li55cbd5c2016-04-06 09:50:20 -0700214 public void registerReporter(MetricsReporter reporter) {
215 }
216
217 @Override
218 public void unregisterReporter(MetricsReporter reporter) {
219 }
220
221 @Override
222 public void notifyReporters() {
223 }
224
225 @Override
Jian Li7eed4172016-04-07 22:12:03 -0700226 public boolean removeMetric(MetricsComponent component,
227 MetricsFeature feature, String metricName) {
228 return false;
229 }
230
231 @Override
232 public Map<String, Timer> getTimers(MetricFilter filter) {
233 return Collections.emptyMap();
234 }
235
236 @Override
237 public Map<String, Gauge> getGauges(MetricFilter filter) {
238 return Collections.emptyMap();
239 }
240
241 @Override
242 public Map<String, Counter> getCounters(MetricFilter filter) {
243 return Collections.emptyMap();
244 }
245
246 @Override
247 public Map<String, Meter> getMeters(MetricFilter filter) {
248 return Collections.emptyMap();
249 }
250
251 @Override
252 public Map<String, Histogram> getHistograms(MetricFilter filter) {
253 return Collections.emptyMap();
254 }
255
256 @Override
257 public Map<String, Metric> getMetrics() {
258 return Collections.emptyMap();
259 }
260
261 @Override
262 public void removeMatching(MetricFilter filter) {
263
264 }
265 }
Jian Lic132c112016-01-28 20:27:34 -0800266}