blob: a0ef91c3d4dfc75e5d104be114d8b2f207bfe318 [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
Ray Milkey7c251822016-04-06 17:38:25 -070018import java.io.InputStream;
19import java.net.HttpURLConnection;
20import java.util.Optional;
21
22import javax.ws.rs.client.Entity;
23import javax.ws.rs.client.WebTarget;
24import javax.ws.rs.core.MediaType;
25import javax.ws.rs.core.Response;
26
Jian Li9d616492016-03-09 10:52:49 -080027import org.glassfish.jersey.server.ResourceConfig;
Jian Lic132c112016-01-28 20:27:34 -080028import org.junit.Before;
29import org.junit.Test;
30import org.onlab.osgi.ServiceDirectory;
31import org.onlab.osgi.TestServiceDirectory;
32import org.onlab.rest.BaseResource;
33import org.onosproject.cpman.ControlPlaneMonitorService;
Jian Li1a424692016-02-03 16:21:18 -080034import org.onosproject.cpman.SystemInfo;
35import org.onosproject.cpman.impl.SystemInfoFactory;
Jian Lic132c112016-01-28 20:27:34 -080036import org.onosproject.net.DeviceId;
Ray Milkey7c251822016-04-06 17:38:25 -070037import org.onosproject.rest.resources.ResourceTest;
Jian Lic132c112016-01-28 20:27:34 -080038
Jian Lic5cb4a12016-02-03 23:24:42 -080039import static org.easymock.EasyMock.anyInt;
Jian Lic132c112016-01-28 20:27:34 -080040import static org.easymock.EasyMock.anyObject;
Jian Liba6b1172016-02-01 22:40:42 -080041import static org.easymock.EasyMock.anyString;
Jian Lic132c112016-01-28 20:27:34 -080042import static org.easymock.EasyMock.createMock;
43import static org.easymock.EasyMock.expectLastCall;
44import static org.easymock.EasyMock.replay;
45import static org.hamcrest.Matchers.is;
46import static org.hamcrest.Matchers.notNullValue;
47import static org.junit.Assert.assertThat;
48
49/**
50 * Unit test for ControlMetricsCollector.
51 */
Ray Milkey7c251822016-04-06 17:38:25 -070052public class ControlMetricsCollectorResourceTest extends ResourceTest {
Jian Lic132c112016-01-28 20:27:34 -080053
54 final ControlPlaneMonitorService mockControlPlaneMonitorService =
55 createMock(ControlPlaneMonitorService.class);
56
Jian Li54df73e2016-02-01 17:09:03 -080057 private static final String PREFIX = "collector";
58
Jian Lic132c112016-01-28 20:27:34 -080059 /**
Jian Li1fdd2242016-02-05 10:01:19 -080060 * Constructs a control metrics collector resource test instance.
61 */
62 public ControlMetricsCollectorResourceTest() {
Jian Li9d616492016-03-09 10:52:49 -080063 super(ResourceConfig.forApplicationClass(CPManWebApplication.class));
Jian Li1fdd2242016-02-05 10:01:19 -080064 }
65
66 /**
Jian Lic132c112016-01-28 20:27:34 -080067 * Sets up the global values for all the tests.
68 */
69 @Before
70 public void setUpTest() {
71 ServiceDirectory testDirectory =
72 new TestServiceDirectory()
73 .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService);
74 BaseResource.setServiceDirectory(testDirectory);
75 }
76
Jian Li1fdd2242016-02-05 10:01:19 -080077 /**
78 * Tests CPU metrics POST through REST API.
79 */
Jian Lic132c112016-01-28 20:27:34 -080080 @Test
81 public void testCpuMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -080082 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -080083 (Optional<DeviceId>) anyObject());
84 expectLastCall().times(5);
85 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -080086 basePostTest("cpu-metrics-post.json", PREFIX + "/cpu_metrics");
Jian Lic132c112016-01-28 20:27:34 -080087 }
88
Jian Li1fdd2242016-02-05 10:01:19 -080089 /**
90 * Tests memory metrics POST through REST API.
91 */
Jian Lic132c112016-01-28 20:27:34 -080092 @Test
93 public void testMemoryMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -080094 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -080095 (Optional<DeviceId>) anyObject());
96 expectLastCall().times(4);
97 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -080098 basePostTest("memory-metrics-post.json", PREFIX + "/memory_metrics");
Jian Lic132c112016-01-28 20:27:34 -080099 }
100
Jian Li1fdd2242016-02-05 10:01:19 -0800101 /**
102 * Tests disk metrics POST through REST API.
103 */
Jian Lic132c112016-01-28 20:27:34 -0800104 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800105 public void testDiskMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800106 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800107 expectLastCall().times(4);
Jian Lic132c112016-01-28 20:27:34 -0800108 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -0800109 basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800110 }
111
Jian Li1fdd2242016-02-05 10:01:19 -0800112 /**
113 * Tests network metrics POST through REST API.
114 */
Jian Lic132c112016-01-28 20:27:34 -0800115 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800116 public void testNetworkMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800117 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800118 expectLastCall().times(8);
Jian Lic132c112016-01-28 20:27:34 -0800119 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -0800120 basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800121 }
122
123 @Test
Jian Li1a424692016-02-03 16:21:18 -0800124 public void testSystemInfoPost() {
125 basePostTest("system-info-post.json", PREFIX + "/system_info");
126
127 SystemInfo si = SystemInfoFactory.getInstance().getSystemInfo();
128 assertThat(si.cpuSpeed(), is(2048));
129 assertThat(si.coreCount(), is(6));
130 assertThat(si.cpuCount(), is(2));
131 assertThat(si.totalMemory(), is(4096));
Jian Lic132c112016-01-28 20:27:34 -0800132 }
133
Jian Li9d616492016-03-09 10:52:49 -0800134 private Response baseTest(String jsonFile, String path) {
135 final WebTarget wt = target();
Jian Lic132c112016-01-28 20:27:34 -0800136 InputStream jsonStream = ControlMetricsCollectorResourceTest.class
137 .getResourceAsStream(jsonFile);
138
139 assertThat(jsonStream, notNullValue());
140
Jian Li9d616492016-03-09 10:52:49 -0800141 return wt.path(path)
142 .request(MediaType.APPLICATION_JSON_TYPE)
143 .post(Entity.json(jsonStream));
Jian Liba6b1172016-02-01 22:40:42 -0800144 }
145
146 private void basePostTest(String jsonFile, String path) {
Jian Li9d616492016-03-09 10:52:49 -0800147 Response response = baseTest(jsonFile, path);
Jian Lic132c112016-01-28 20:27:34 -0800148 assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
149 }
Jian Lic132c112016-01-28 20:27:34 -0800150}