blob: e4fa11fbd21aa449a49687402ad94b422b18a036 [file] [log] [blame]
Jian Lic132c112016-01-28 20:27:34 -08001/*
2 * Copyright 2016 Open Networking Laboratory
3 *
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;
31import org.onlab.metrics.MetricsService;
Jian Lic132c112016-01-28 20:27:34 -080032import org.onlab.osgi.ServiceDirectory;
33import org.onlab.osgi.TestServiceDirectory;
34import org.onlab.rest.BaseResource;
35import org.onosproject.cpman.ControlPlaneMonitorService;
Jian Li1a424692016-02-03 16:21:18 -080036import org.onosproject.cpman.SystemInfo;
37import org.onosproject.cpman.impl.SystemInfoFactory;
Jian Li7eed4172016-04-07 22:12:03 -070038import org.onosproject.cpman.impl.SystemMetricsAggregator;
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 Li7eed4172016-04-07 22:12:03 -070053import static org.easymock.EasyMock.anyLong;
Jian Lic132c112016-01-28 20:27:34 -080054import static org.easymock.EasyMock.anyObject;
Jian Liba6b1172016-02-01 22:40:42 -080055import static org.easymock.EasyMock.anyString;
Jian Lic132c112016-01-28 20:27:34 -080056import static org.easymock.EasyMock.createMock;
57import static org.easymock.EasyMock.expectLastCall;
58import static org.easymock.EasyMock.replay;
59import static org.hamcrest.Matchers.is;
60import static org.hamcrest.Matchers.notNullValue;
61import static org.junit.Assert.assertThat;
62
63/**
64 * Unit test for ControlMetricsCollector.
65 */
Ray Milkey7c251822016-04-06 17:38:25 -070066public class ControlMetricsCollectorResourceTest extends ResourceTest {
Jian Lic132c112016-01-28 20:27:34 -080067
68 final ControlPlaneMonitorService mockControlPlaneMonitorService =
69 createMock(ControlPlaneMonitorService.class);
Jian Li7eed4172016-04-07 22:12:03 -070070 final MetricsService mockMetricsService = new MockMetricsService();
71 final MetricsComponent mockMetricsComponent = createMock(MetricsComponent.class);
72 final SystemMetricsAggregator mockAggregator = createMock(SystemMetricsAggregator.class);
73
Jian Lic132c112016-01-28 20:27:34 -080074
Jian Li54df73e2016-02-01 17:09:03 -080075 private static final String PREFIX = "collector";
76
Jian Lic132c112016-01-28 20:27:34 -080077 /**
Jian Li1fdd2242016-02-05 10:01:19 -080078 * Constructs a control metrics collector resource test instance.
79 */
80 public ControlMetricsCollectorResourceTest() {
Jian Li9d616492016-03-09 10:52:49 -080081 super(ResourceConfig.forApplicationClass(CPManWebApplication.class));
Jian Li1fdd2242016-02-05 10:01:19 -080082 }
83
84 /**
Jian Lic132c112016-01-28 20:27:34 -080085 * Sets up the global values for all the tests.
86 */
87 @Before
88 public void setUpTest() {
89 ServiceDirectory testDirectory =
90 new TestServiceDirectory()
Jian Li7eed4172016-04-07 22:12:03 -070091 .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService)
92 .add(MetricsService.class, mockMetricsService);
Jian Lic132c112016-01-28 20:27:34 -080093 BaseResource.setServiceDirectory(testDirectory);
94 }
95
Jian Li1fdd2242016-02-05 10:01:19 -080096 /**
97 * Tests CPU metrics POST through REST API.
98 */
Jian Lic132c112016-01-28 20:27:34 -080099 @Test
100 public void testCpuMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800101 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -0800102 (Optional<DeviceId>) anyObject());
103 expectLastCall().times(5);
104 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700105
106 mockAggregator.increment(anyObject(), anyLong());
107 expectLastCall();
108 replay(mockAggregator);
109
Jian Li54df73e2016-02-01 17:09:03 -0800110 basePostTest("cpu-metrics-post.json", PREFIX + "/cpu_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800111 }
112
Jian Li1fdd2242016-02-05 10:01:19 -0800113 /**
114 * Tests memory metrics POST through REST API.
115 */
Jian Lic132c112016-01-28 20:27:34 -0800116 @Test
117 public void testMemoryMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800118 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -0800119 (Optional<DeviceId>) anyObject());
120 expectLastCall().times(4);
121 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700122
Jian Li54df73e2016-02-01 17:09:03 -0800123 basePostTest("memory-metrics-post.json", PREFIX + "/memory_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800124 }
125
Jian Li1fdd2242016-02-05 10:01:19 -0800126 /**
127 * Tests disk metrics POST through REST API.
128 */
Jian Lic132c112016-01-28 20:27:34 -0800129 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800130 public void testDiskMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800131 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800132 expectLastCall().times(4);
Jian Lic132c112016-01-28 20:27:34 -0800133 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700134
Jian Li54df73e2016-02-01 17:09:03 -0800135 basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800136 }
137
Jian Li1fdd2242016-02-05 10:01:19 -0800138 /**
139 * Tests network metrics POST through REST API.
140 */
Jian Lic132c112016-01-28 20:27:34 -0800141 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800142 public void testNetworkMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800143 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800144 expectLastCall().times(8);
Jian Lic132c112016-01-28 20:27:34 -0800145 replay(mockControlPlaneMonitorService);
Jian Li7eed4172016-04-07 22:12:03 -0700146
Jian Li54df73e2016-02-01 17:09:03 -0800147 basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800148 }
149
150 @Test
Jian Li1a424692016-02-03 16:21:18 -0800151 public void testSystemInfoPost() {
152 basePostTest("system-info-post.json", PREFIX + "/system_info");
153
154 SystemInfo si = SystemInfoFactory.getInstance().getSystemInfo();
155 assertThat(si.cpuSpeed(), is(2048));
156 assertThat(si.coreCount(), is(6));
157 assertThat(si.cpuCount(), is(2));
158 assertThat(si.totalMemory(), is(4096));
Jian Lic132c112016-01-28 20:27:34 -0800159 }
160
Jian Li9d616492016-03-09 10:52:49 -0800161 private Response baseTest(String jsonFile, String path) {
162 final WebTarget wt = target();
Jian Lic132c112016-01-28 20:27:34 -0800163 InputStream jsonStream = ControlMetricsCollectorResourceTest.class
164 .getResourceAsStream(jsonFile);
165
166 assertThat(jsonStream, notNullValue());
167
Jian Li9d616492016-03-09 10:52:49 -0800168 return wt.path(path)
169 .request(MediaType.APPLICATION_JSON_TYPE)
170 .post(Entity.json(jsonStream));
Jian Liba6b1172016-02-01 22:40:42 -0800171 }
172
173 private void basePostTest(String jsonFile, String path) {
Jian Li9d616492016-03-09 10:52:49 -0800174 Response response = baseTest(jsonFile, path);
Jian Lic132c112016-01-28 20:27:34 -0800175 assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
176 }
Jian Li7eed4172016-04-07 22:12:03 -0700177
178 private class MockMetricsService implements MetricsService {
179
180 @Override
181 public MetricsComponent registerComponent(String name) {
182 MetricsComponent metricsComponent = new MetricsComponent(name);
183 return metricsComponent;
184 }
185
186 @Override
187 public MetricRegistry getMetricRegistry() {
188 return null;
189 }
190
191 @Override
192 public Counter createCounter(MetricsComponent component, MetricsFeature feature,
193 String metricName) {
194 return null;
195 }
196
197 @Override
198 public Histogram createHistogram(MetricsComponent component,
199 MetricsFeature feature, String metricName) {
200 return null;
201 }
202
203 @Override
204 public Timer createTimer(MetricsComponent component,
205 MetricsFeature feature, String metricName) {
206 return null;
207 }
208
209 @Override
210 public Meter createMeter(MetricsComponent component,
211 MetricsFeature feature, String metricName) {
212 return new Meter();
213 }
214
215 @Override
216 public <T extends Metric> T registerMetric(MetricsComponent component,
217 MetricsFeature feature,
218 String metricName, T metric) {
219 return null;
220 }
221
222 @Override
223 public boolean removeMetric(MetricsComponent component,
224 MetricsFeature feature, String metricName) {
225 return false;
226 }
227
228 @Override
229 public Map<String, Timer> getTimers(MetricFilter filter) {
230 return Collections.emptyMap();
231 }
232
233 @Override
234 public Map<String, Gauge> getGauges(MetricFilter filter) {
235 return Collections.emptyMap();
236 }
237
238 @Override
239 public Map<String, Counter> getCounters(MetricFilter filter) {
240 return Collections.emptyMap();
241 }
242
243 @Override
244 public Map<String, Meter> getMeters(MetricFilter filter) {
245 return Collections.emptyMap();
246 }
247
248 @Override
249 public Map<String, Histogram> getHistograms(MetricFilter filter) {
250 return Collections.emptyMap();
251 }
252
253 @Override
254 public Map<String, Metric> getMetrics() {
255 return Collections.emptyMap();
256 }
257
258 @Override
259 public void removeMatching(MetricFilter filter) {
260
261 }
262 }
Jian Lic132c112016-01-28 20:27:34 -0800263}