blob: edfc6d635745f069d5ef4bfe91097e7425d876ca [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
18import com.sun.jersey.api.client.ClientResponse;
19import com.sun.jersey.api.client.WebResource;
20import com.sun.jersey.spi.container.servlet.ServletContainer;
21import com.sun.jersey.test.framework.AppDescriptor;
22import com.sun.jersey.test.framework.JerseyTest;
23import com.sun.jersey.test.framework.WebAppDescriptor;
24import org.junit.Before;
25import org.junit.Test;
26import org.onlab.osgi.ServiceDirectory;
27import org.onlab.osgi.TestServiceDirectory;
28import org.onlab.rest.BaseResource;
29import org.onosproject.cpman.ControlPlaneMonitorService;
30import org.onosproject.net.DeviceId;
31
32import javax.ws.rs.core.MediaType;
33import java.io.IOException;
34import java.io.InputStream;
35import java.net.HttpURLConnection;
36import java.net.ServerSocket;
37import java.util.Optional;
38
39import static org.easymock.EasyMock.anyObject;
40import static org.easymock.EasyMock.createMock;
41import static org.easymock.EasyMock.expectLastCall;
42import static org.easymock.EasyMock.replay;
43import static org.hamcrest.Matchers.is;
44import static org.hamcrest.Matchers.notNullValue;
45import static org.junit.Assert.assertThat;
46
47/**
48 * Unit test for ControlMetricsCollector.
49 */
50public class ControlMetricsCollectorResourceTest extends JerseyTest {
51
52 final ControlPlaneMonitorService mockControlPlaneMonitorService =
53 createMock(ControlPlaneMonitorService.class);
54
Jian Li54df73e2016-02-01 17:09:03 -080055 private static final String PREFIX = "collector";
56
Jian Lic132c112016-01-28 20:27:34 -080057 /**
58 * Sets up the global values for all the tests.
59 */
60 @Before
61 public void setUpTest() {
62 ServiceDirectory testDirectory =
63 new TestServiceDirectory()
64 .add(ControlPlaneMonitorService.class, mockControlPlaneMonitorService);
65 BaseResource.setServiceDirectory(testDirectory);
66 }
67
68 @Test
69 public void testCpuMetricsPost() {
70 mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(),
71 (Optional<DeviceId>) anyObject());
72 expectLastCall().times(5);
73 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -080074 basePostTest("cpu-metrics-post.json", PREFIX + "/cpu_metrics");
Jian Lic132c112016-01-28 20:27:34 -080075 }
76
77 @Test
78 public void testMemoryMetricsPost() {
79 mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(),
80 (Optional<DeviceId>) anyObject());
81 expectLastCall().times(4);
82 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -080083 basePostTest("memory-metrics-post.json", PREFIX + "/memory_metrics");
Jian Lic132c112016-01-28 20:27:34 -080084 }
85
86 @Test
87 public void testDiskMetricsPost() {
88 mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(),
89 (Optional<DeviceId>) anyObject());
90 expectLastCall().times(2);
91 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -080092 basePostTest("disk-metrics-post.json", PREFIX + "/disk_metrics");
Jian Lic132c112016-01-28 20:27:34 -080093 }
94
95 @Test
96 public void testNetworkMetricsPost() {
97 mockControlPlaneMonitorService.updateMetric(anyObject(), anyObject(),
98 (Optional<DeviceId>) anyObject());
99 expectLastCall().times(4);
100 replay(mockControlPlaneMonitorService);
Jian Li54df73e2016-02-01 17:09:03 -0800101 basePostTest("network-metrics-post.json", PREFIX + "/network_metrics");
Jian Lic132c112016-01-28 20:27:34 -0800102 }
103
104 @Test
105 public void testSystemSpecsPost() {
Jian Li54df73e2016-02-01 17:09:03 -0800106 basePostTest("system-spec-post.json", PREFIX + "/system_specs");
Jian Lic132c112016-01-28 20:27:34 -0800107 }
108
109 private void basePostTest(String jsonFile, String path) {
110 final WebResource rs = resource();
111 InputStream jsonStream = ControlMetricsCollectorResourceTest.class
112 .getResourceAsStream(jsonFile);
113
114 assertThat(jsonStream, notNullValue());
115
116 ClientResponse response = rs.path(path)
117 .type(MediaType.APPLICATION_JSON_TYPE)
118 .post(ClientResponse.class, jsonStream);
119 assertThat(response.getStatus(), is(HttpURLConnection.HTTP_OK));
120 }
121
122 public ControlMetricsCollectorResourceTest() {
123 super(new WebAppDescriptor.Builder("javax.ws.rs.Application",
124 CPManWebApplication.class.getCanonicalName())
125 .servletClass(ServletContainer.class).build());
126 }
127
128 /**
129 * Assigns an available port for the test.
130 *
131 * @param defaultPort If a port cannot be determined, this one is used.
132 * @return free port
133 */
134 @Override
135 public int getPort(int defaultPort) {
136 try {
137 ServerSocket socket = new ServerSocket(0);
138 socket.setReuseAddress(true);
139 int port = socket.getLocalPort();
140 socket.close();
141 return port;
142 } catch (IOException ioe) {
143 return defaultPort;
144 }
145 }
146
147 @Override
148 public AppDescriptor configure() {
149 return new WebAppDescriptor.Builder("org.onosproject.cpman.rest").build();
150 }
151}