blob: 42c73cc53ee30c5e7473cea9697860342161baa6 [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 Li9d616492016-03-09 10:52:49 -080018import org.glassfish.jersey.server.ResourceConfig;
19import org.glassfish.jersey.test.JerseyTest;
Jian Lic132c112016-01-28 20:27:34 -080020import org.junit.Before;
21import org.junit.Test;
22import org.onlab.osgi.ServiceDirectory;
23import org.onlab.osgi.TestServiceDirectory;
24import org.onlab.rest.BaseResource;
25import org.onosproject.cpman.ControlPlaneMonitorService;
Jian Li1a424692016-02-03 16:21:18 -080026import org.onosproject.cpman.SystemInfo;
27import org.onosproject.cpman.impl.SystemInfoFactory;
Jian Lic132c112016-01-28 20:27:34 -080028import org.onosproject.net.DeviceId;
29
Jian Li9d616492016-03-09 10:52:49 -080030import javax.ws.rs.client.Entity;
31import javax.ws.rs.client.WebTarget;
Jian Lic132c112016-01-28 20:27:34 -080032import javax.ws.rs.core.MediaType;
Jian Li9d616492016-03-09 10:52:49 -080033import javax.ws.rs.core.Response;
Jian Lic132c112016-01-28 20:27:34 -080034import java.io.InputStream;
35import java.net.HttpURLConnection;
Jian Lic132c112016-01-28 20:27:34 -080036import java.util.Optional;
37
Jian Lic5cb4a12016-02-03 23:24:42 -080038import static org.easymock.EasyMock.anyInt;
Jian Lic132c112016-01-28 20:27:34 -080039import static org.easymock.EasyMock.anyObject;
Jian Liba6b1172016-02-01 22:40:42 -080040import static org.easymock.EasyMock.anyString;
Jian Lic132c112016-01-28 20:27:34 -080041import static org.easymock.EasyMock.createMock;
42import static org.easymock.EasyMock.expectLastCall;
43import static org.easymock.EasyMock.replay;
44import static org.hamcrest.Matchers.is;
45import static org.hamcrest.Matchers.notNullValue;
46import static org.junit.Assert.assertThat;
47
48/**
49 * Unit test for ControlMetricsCollector.
50 */
51public class ControlMetricsCollectorResourceTest extends JerseyTest {
52
53 final ControlPlaneMonitorService mockControlPlaneMonitorService =
54 createMock(ControlPlaneMonitorService.class);
55
Jian Li54df73e2016-02-01 17:09:03 -080056 private static final String PREFIX = "collector";
57
Jian Lic132c112016-01-28 20:27:34 -080058 /**
Jian Li1fdd2242016-02-05 10:01:19 -080059 * Constructs a control metrics collector resource test instance.
60 */
61 public ControlMetricsCollectorResourceTest() {
Jian Li9d616492016-03-09 10:52:49 -080062 super(ResourceConfig.forApplicationClass(CPManWebApplication.class));
Jian Li1fdd2242016-02-05 10:01:19 -080063 }
64
65 /**
Jian Lic132c112016-01-28 20:27:34 -080066 * Sets up the global values for all the tests.
67 */
68 @Before
69 public void setUpTest() {
70 ServiceDirectory testDirectory =
71 new TestServiceDirectory()
72 .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService);
73 BaseResource.setServiceDirectory(testDirectory);
74 }
75
Jian Li1fdd2242016-02-05 10:01:19 -080076 /**
77 * Tests CPU metrics POST through REST API.
78 */
Jian Lic132c112016-01-28 20:27:34 -080079 @Test
80 public void testCpuMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -080081 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -080082 (Optional<DeviceId>) anyObject());
83 expectLastCall().times(5);
84 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -080085 basePostTest("cpu-metrics-post.json", PREFIX + "/cpu_metrics");
Jian Lic132c112016-01-28 20:27:34 -080086 }
87
Jian Li1fdd2242016-02-05 10:01:19 -080088 /**
89 * Tests memory metrics POST through REST API.
90 */
Jian Lic132c112016-01-28 20:27:34 -080091 @Test
92 public void testMemoryMetricsPost() {
Jian Lic5cb4a12016-02-03 23:24:42 -080093 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(),
Jian Lic132c112016-01-28 20:27:34 -080094 (Optional<DeviceId>) anyObject());
95 expectLastCall().times(4);
96 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -080097 basePostTest("memory-metrics-post.json", PREFIX + "/memory_metrics");
Jian Lic132c112016-01-28 20:27:34 -080098 }
99
Jian Li1fdd2242016-02-05 10:01:19 -0800100 /**
101 * Tests disk metrics POST through REST API.
102 */
Jian Lic132c112016-01-28 20:27:34 -0800103 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800104 public void testDiskMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800105 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800106 expectLastCall().times(4);
Jian Lic132c112016-01-28 20:27:34 -0800107 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -0800108 basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800109 }
110
Jian Li1fdd2242016-02-05 10:01:19 -0800111 /**
112 * Tests network metrics POST through REST API.
113 */
Jian Lic132c112016-01-28 20:27:34 -0800114 @Test
Jian Li1fdd2242016-02-05 10:01:19 -0800115 public void testNetworkMetrics() {
Jian Lic5cb4a12016-02-03 23:24:42 -0800116 mockControlPlaneMonitorService.updateMetric(anyObject(), anyInt(), anyString());
Jian Liba6b1172016-02-01 22:40:42 -0800117 expectLastCall().times(8);
Jian Lic132c112016-01-28 20:27:34 -0800118 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -0800119 basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800120 }
121
122 @Test
Jian Li1a424692016-02-03 16:21:18 -0800123 public void testSystemInfoPost() {
124 basePostTest("system-info-post.json", PREFIX + "/system_info");
125
126 SystemInfo si = SystemInfoFactory.getInstance().getSystemInfo();
127 assertThat(si.cpuSpeed(), is(2048));
128 assertThat(si.coreCount(), is(6));
129 assertThat(si.cpuCount(), is(2));
130 assertThat(si.totalMemory(), is(4096));
Jian Lic132c112016-01-28 20:27:34 -0800131 }
132
Jian Li9d616492016-03-09 10:52:49 -0800133 private Response baseTest(String jsonFile, String path) {
134 final WebTarget wt = target();
Jian Lic132c112016-01-28 20:27:34 -0800135 InputStream jsonStream = ControlMetricsCollectorResourceTest.class
136 .getResourceAsStream(jsonFile);
137
138 assertThat(jsonStream, notNullValue());
139
Jian Li9d616492016-03-09 10:52:49 -0800140 return wt.path(path)
141 .request(MediaType.APPLICATION_JSON_TYPE)
142 .post(Entity.json(jsonStream));
Jian Liba6b1172016-02-01 22:40:42 -0800143 }
144
145 private void basePostTest(String jsonFile, String path) {
Jian Li9d616492016-03-09 10:52:49 -0800146 Response response = baseTest(jsonFile, path);
Jian Lic132c112016-01-28 20:27:34 -0800147 assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
148 }
Jian Lic132c112016-01-28 20:27:34 -0800149}