blob: b505cd5118aefcb5cf2f651c3a1f23d96bec8299 [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;
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 Lic132c112016-01-28 20:27:34 -080039import org.onosproject.net.DeviceId;
Ray Milkey7c251822016-04-06 17:38:25 -070040import org.onosproject.rest.resources.ResourceTest;
Jian Lic132c112016-01-28 20:27:34 -080041
Jian Li7eed4172016-04-07 22:12:03 -070042import javax.ws.rs.client.Entity;
43import javax.ws.rs.client.WebTarget;
44import javax.ws.rs.core.MediaType;
45import javax.ws.rs.core.Response;
46import java.io.InputStream;
47import java.net.HttpURLConnection;
48import java.util.Collections;
49import java.util.Map;
50import java.util.Optional;
51
Jian Lic5cb4a12016-02-03 23:24:42 -080052import static org.easymock.EasyMock.anyInt;
Jian Lic132c112016-01-28 20:27:34 -080053import static org.easymock.EasyMock.anyObject;
Jian Liba6b1172016-02-01 22:40:42 -080054import static org.easymock.EasyMock.anyString;
Jian Lic132c112016-01-28 20:27:34 -080055import static org.easymock.EasyMock.createMock;
56import static org.easymock.EasyMock.expectLastCall;
57import static org.easymock.EasyMock.replay;
58import static org.hamcrest.Matchers.is;
59import static org.hamcrest.Matchers.notNullValue;
60import static org.junit.Assert.assertThat;
61
62/**
63 * Unit test for ControlMetricsCollector.
64 */
Ray Milkey7c251822016-04-06 17:38:25 -070065public class ControlMetricsCollectorResourceTest extends ResourceTest {
Jian Lic132c112016-01-28 20:27:34 -080066
67 final ControlPlaneMonitorService mockControlPlaneMonitorService =
68 createMock(ControlPlaneMonitorService.class);
Jian Li7eed4172016-04-07 22:12:03 -070069 final MetricsService mockMetricsService = new MockMetricsService();
Jian Lic132c112016-01-28 20:27:34 -080070
Jian Li54df73e2016-02-01 17:09:03 -080071 private static final String PREFIX = "collector";
72
Jian Lic132c112016-01-28 20:27:34 -080073 /**
Jian Li1fdd2242016-02-05 10:01:19 -080074 * Constructs a control metrics collector resource test instance.
75 */
76 public ControlMetricsCollectorResourceTest() {
Jian Li9d616492016-03-09 10:52:49 -080077 super(ResourceConfig.forApplicationClass(CPManWebApplication.class));
Jian Li1fdd2242016-02-05 10:01:19 -080078 }
79
80 /**
Jian Lic132c112016-01-28 20:27:34 -080081 * Sets up the global values for all the tests.
82 */
83 @Before
84 public void setUpTest() {
85 ServiceDirectory testDirectory =
86 new TestServiceDirectory()
Jian Li7eed4172016-04-07 22:12:03 -070087 .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService)
88 .add(MetricsService.class, mockMetricsService);
Jian Lic132c112016-01-28 20:27:34 -080089 BaseResource.setServiceDirectory(testDirectory);
90 }
91
Jian Li1fdd2242016-02-05 10:01:19 -080092 /**
93 * Tests CPU metrics POST through REST API.
94 */
Jian Lic132c112016-01-28 20:27:34 -080095 @Test
96 public void testCpuMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -080097 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -080098 (Optional<DeviceId>) anyObject());
99 expectLastCall().times(5);
100 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700101
Jian Li54df73e2016-02-01 17:09:03 -0800102 basePostTest("cpu-metrics-post.json", PREFIX + "/cpu_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800103 }
104
Jian Li1fdd2242016-02-05 10:01:19 -0800105 /**
106 * Tests memory metrics POST through REST API.
107 */
Jian Lic132c112016-01-28 20:27:34 -0800108 @Test
109 public void testMemoryMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800110 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -0800111 (Optional<DeviceId>) anyObject());
112 expectLastCall().times(4);
113 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700114
Jian Li54df73e2016-02-01 17:09:03 -0800115 basePostTest("memory-metrics-post.json", PREFIX + "/memory_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800116 }
117
Jian Li1fdd2242016-02-05 10:01:19 -0800118 /**
119 * Tests disk metrics POST through REST API.
120 */
Jian Lic132c112016-01-28 20:27:34 -0800121 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800122 public void testDiskMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800123 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800124 expectLastCall().times(4);
Jian Lic132c112016-01-28 20:27:34 -0800125 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700126
Jian Li54df73e2016-02-01 17:09:03 -0800127 basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800128 }
129
Jian Li1fdd2242016-02-05 10:01:19 -0800130 /**
131 * Tests network metrics POST through REST API.
132 */
Jian Lic132c112016-01-28 20:27:34 -0800133 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800134 public void testNetworkMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800135 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800136 expectLastCall().times(8);
Jian Lic132c112016-01-28 20:27:34 -0800137 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700138
Jian Li54df73e2016-02-01 17:09:03 -0800139 basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800140 }
141
142 @Test
Jian Li1a424692016-02-03 16:21:18 -0800143 public void testSystemInfoPost() {
144 basePostTest("system-info-post.json", PREFIX + "/system_info");
145
146 SystemInfo si = SystemInfoFactory.getInstance().getSystemInfo();
147 assertThat(si.cpuSpeed(), is(2048));
148 assertThat(si.coreCount(), is(6));
149 assertThat(si.cpuCount(), is(2));
150 assertThat(si.totalMemory(), is(4096));
Jian Lic132c112016-01-28 20:27:34 -0800151 }
152
Jian Li9d616492016-03-09 10:52:49 -0800153 private Response baseTest(String jsonFile, String path) {
154 final WebTarget wt = target();
Jian Lic132c112016-01-28 20:27:34 -0800155 InputStream jsonStream = ControlMetricsCollectorResourceTest.class
156 .getResourceAsStream(jsonFile);
157
158 assertThat(jsonStream, notNullValue());
159
Jian Li9d616492016-03-09 10:52:49 -0800160 return wt.path(path)
161 .request(MediaType.APPLICATION_JSON_TYPE)
162 .post(Entity.json(jsonStream));
Jian Liba6b1172016-02-01 22:40:42 -0800163 }
164
165 private void basePostTest(String jsonFile, String path) {
Jian Li9d616492016-03-09 10:52:49 -0800166 Response response = baseTest(jsonFile, path);
Jian Lic132c112016-01-28 20:27:34 -0800167 assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
168 }
Jian Li7eed4172016-04-07 22:12:03 -0700169
170 private class MockMetricsService implements MetricsService {
171
172 @Override
173 public MetricsComponent registerComponent(String name) {
174 MetricsComponent metricsComponent = new MetricsComponent(name);
175 return metricsComponent;
176 }
177
178 @Override
179 public MetricRegistry getMetricRegistry() {
180 return null;
181 }
182
183 @Override
184 public Counter createCounter(MetricsComponent component, MetricsFeature feature,
185 String metricName) {
186 return null;
187 }
188
189 @Override
190 public Histogram createHistogram(MetricsComponent component,
191 MetricsFeature feature, String metricName) {
192 return null;
193 }
194
195 @Override
196 public Timer createTimer(MetricsComponent component,
197 MetricsFeature feature, String metricName) {
198 return null;
199 }
200
201 @Override
202 public Meter createMeter(MetricsComponent component,
203 MetricsFeature feature, String metricName) {
204 return new Meter();
205 }
206
207 @Override
208 public <T extends Metric> T registerMetric(MetricsComponent component,
209 MetricsFeature feature,
210 String metricName, T metric) {
211 return null;
212 }
213
214 @Override
Jian Li55cbd5c2016-04-06 09:50:20 -0700215 public void registerReporter(MetricsReporter reporter) {
216 }
217
218 @Override
219 public void unregisterReporter(MetricsReporter reporter) {
220 }
221
222 @Override
223 public void notifyReporters() {
224 }
225
226 @Override
Jian Li7eed4172016-04-07 22:12:03 -0700227 public boolean removeMetric(MetricsComponent component,
228 MetricsFeature feature, String metricName) {
229 return false;
230 }
231
232 @Override
233 public Map<String, Timer> getTimers(MetricFilter filter) {
234 return Collections.emptyMap();
235 }
236
237 @Override
238 public Map<String, Gauge> getGauges(MetricFilter filter) {
239 return Collections.emptyMap();
240 }
241
242 @Override
243 public Map<String, Counter> getCounters(MetricFilter filter) {
244 return Collections.emptyMap();
245 }
246
247 @Override
248 public Map<String, Meter> getMeters(MetricFilter filter) {
249 return Collections.emptyMap();
250 }
251
252 @Override
253 public Map<String, Histogram> getHistograms(MetricFilter filter) {
254 return Collections.emptyMap();
255 }
256
257 @Override
258 public Map<String, Metric> getMetrics() {
259 return Collections.emptyMap();
260 }
261
262 @Override
263 public void removeMatching(MetricFilter filter) {
264
265 }
266 }
Jian Lic132c112016-01-28 20:27:34 -0800267}