blob: d0a24b3e26f084d5d55cca957d75cc175ea03a55 [file] [log] [blame]
Jian Li96abb152018-02-21 17:06:58 +09001/*
2 * Copyright 2018-present Open Networking Foundation
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.openstacknetworking.web;
17
18import org.glassfish.jersey.server.ResourceConfig;
19import org.junit.Before;
20import org.junit.Test;
21import org.onlab.osgi.ServiceDirectory;
22import org.onlab.osgi.TestServiceDirectory;
23import org.onosproject.openstacknetworking.api.OpenstackRouterAdminService;
24import org.onosproject.rest.resources.ResourceTest;
25
26import javax.ws.rs.client.Entity;
27import javax.ws.rs.client.WebTarget;
28import javax.ws.rs.core.MediaType;
29import javax.ws.rs.core.Response;
30import java.io.InputStream;
31
32import static org.easymock.EasyMock.anyObject;
33import static org.easymock.EasyMock.anyString;
34import static org.easymock.EasyMock.createMock;
35import static org.easymock.EasyMock.expectLastCall;
36import static org.easymock.EasyMock.replay;
37import static org.easymock.EasyMock.verify;
38import static org.hamcrest.Matchers.is;
39import static org.junit.Assert.assertThat;
40
41/**
42 * Unit test for openstack router REST API.
43 */
44public class OpenstackRouterWebResourceTest extends ResourceTest {
45
46 final OpenstackRouterAdminService mockOpenstackRouterAdminService =
47 createMock(OpenstackRouterAdminService.class);
48 private static final String PATH = "routers";
49
50 /**
51 * Constructs an openstack router test instance.
52 */
53 public OpenstackRouterWebResourceTest() {
54 super(ResourceConfig.forApplicationClass(OpenstackNetworkingWebApplication.class));
55 }
56
57 /**
58 * Sets up the global values for all tests.
59 */
60 @Before
61 public void setUpTest() {
62 ServiceDirectory testDirectory =
63 new TestServiceDirectory()
64 .add(OpenstackRouterAdminService.class,
65 mockOpenstackRouterAdminService);
66 setServiceDirectory(testDirectory);
67 }
68
69 /**
70 * Tests the results of the REST API POST with creation operation.
71 */
72 @Test
73 public void testCreateRouterWithCreationOperation() {
74 mockOpenstackRouterAdminService.createRouter(anyObject());
75 replay(mockOpenstackRouterAdminService);
76
77 final WebTarget wt = target();
78 InputStream jsonStream = OpenstackRouterWebResourceTest.class
79 .getResourceAsStream("openstack-router.json");
80
81 Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
82 .post(Entity.json(jsonStream));
83 final int status = response.getStatus();
84
85 assertThat(status, is(201));
86
87 verify(mockOpenstackRouterAdminService);
88 }
89
90 /**
91 * Tests the results of the REST API POST with incorrect input.
92 */
93 @Test
94 public void testCreateRouterWithIncorrectInput() {
95 final WebTarget wt = target();
96 InputStream jsonStream = OpenstackRouterWebResourceTest.class
97 .getResourceAsStream("dummy.json");
98
99 Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
100 .post(Entity.json(jsonStream));
101 final int status = response.getStatus();
102
103 assertThat(status, is(400));
104 }
105
106 /**
107 * Tests the results of the REST API POST with duplicated router ID.
108 */
109 @Test
110 public void testCreateRouterWithDuplicatedId() {
111 mockOpenstackRouterAdminService.createRouter(anyObject());
112 expectLastCall().andThrow(new IllegalArgumentException());
113 replay(mockOpenstackRouterAdminService);
114
115 final WebTarget wt = target();
116 InputStream jsonStream = OpenstackRouterWebResourceTest.class
117 .getResourceAsStream("openstack-router.json");
118
119 Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
120 .post(Entity.json(jsonStream));
121 final int status = response.getStatus();
122
123 assertThat(status, is(400));
124
125 verify(mockOpenstackRouterAdminService);
126 }
127
128 /**
129 * Tests the results of the REST API PUT with updating operation.
130 */
131 @Test
132 public void testUpdateRouterWithUpdatingOperation() {
133 mockOpenstackRouterAdminService.updateRouter(anyObject());
134 replay(mockOpenstackRouterAdminService);
135
136 final WebTarget wt = target();
137 InputStream jsonStream = OpenstackRouterWebResourceTest.class
138 .getResourceAsStream("openstack-router.json");
139
140 Response response = wt.path(PATH + "/f49a1319-423a-4ee6-ba54-1d95a4f6cc68")
141 .request(MediaType.APPLICATION_JSON_TYPE)
142 .put(Entity.json(jsonStream));
143 final int status = response.getStatus();
144
145 assertThat(status, is(200));
146
147 verify(mockOpenstackRouterAdminService);
148 }
149
150 /**
151 * Tests the results of the REST API PUT with incorrect input.
152 */
153 @Test
154 public void testUpdateRouterWithIncorrectInput() {
155 final WebTarget wt = target();
156 InputStream jsonStream = OpenstackRouterWebResourceTest.class
157 .getResourceAsStream("dummy.json");
158
159 Response response = wt.path(PATH + "/f49a1319-423a-4ee6-ba54-1d95a4f6cc68")
160 .request(MediaType.APPLICATION_JSON_TYPE)
161 .put(Entity.json(jsonStream));
162 final int status = response.getStatus();
163
164 assertThat(status, is(400));
165 }
166
167 /**
168 * Tests the results of the REST API PUT with non-existing router ID.
169 */
170 @Test
171 public void testUpdateRouterWithNonexistId() {
172 mockOpenstackRouterAdminService.updateRouter(anyObject());
173 expectLastCall().andThrow(new IllegalArgumentException());
174 replay(mockOpenstackRouterAdminService);
175
176 final WebTarget wt = target();
177 InputStream jsonStream = OpenstackRouterWebResourceTest.class
178 .getResourceAsStream("openstack-router.json");
179
180 Response response = wt.path(PATH + "/f49a1319-423a-4ee6-ba54-1d95a4f6cc68")
181 .request(MediaType.APPLICATION_JSON_TYPE)
182 .put(Entity.json(jsonStream));
183 final int status = response.getStatus();
184
185 assertThat(status, is(400));
186
187 verify(mockOpenstackRouterAdminService);
188 }
189
190 /**
191 * Tests the results of the REST API DELETE with deletion operation.
192 */
193 @Test
194 public void testDeleteRouterWithDeletionOperation() {
195 mockOpenstackRouterAdminService.removeRouter(anyString());
196 replay(mockOpenstackRouterAdminService);
197
198 final WebTarget wt = target();
199
200 Response response = wt.path(PATH + "/f49a1319-423a-4ee6-ba54-1d95a4f6cc68")
201 .request(MediaType.APPLICATION_JSON_TYPE)
202 .delete();
203 final int status = response.getStatus();
204
205 assertThat(status, is(204));
206
207 verify(mockOpenstackRouterAdminService);
208 }
209
210 /**
211 * Tests the results of the REST API DELETE with non-existing router ID.
212 */
213 @Test
214 public void testDeleteRouterWithNonexistId() {
215 mockOpenstackRouterAdminService.removeRouter(anyString());
216 expectLastCall().andThrow(new IllegalArgumentException());
217 replay(mockOpenstackRouterAdminService);
218
219 final WebTarget wt = target();
220
221 Response response = wt.path(PATH + "/non-exist-id")
222 .request(MediaType.APPLICATION_JSON_TYPE)
223 .delete();
224 final int status = response.getStatus();
225
226 assertThat(status, is(400));
227
228 verify(mockOpenstackRouterAdminService);
229 }
230
231 /**
232 * Tests the results of the REST API PUT with adding a new router interface.
233 */
234 @Test
235 public void testAddRouterInterfaceWithAdditionOperation() {
236 mockOpenstackRouterAdminService.addRouterInterface(anyObject());
237 replay(mockOpenstackRouterAdminService);
238
239 final WebTarget wt = target();
240 InputStream jsonStream = OpenstackRouterWebResourceTest.class
241 .getResourceAsStream("openstack-router-interface.json");
242
243 Response response = wt.path(PATH + "/f49a1319-423a-4ee6-ba54-1d95a4f6cc68/add_router_interface")
244 .request(MediaType.APPLICATION_JSON_TYPE)
245 .put(Entity.json(jsonStream));
246 final int status = response.getStatus();
247
248 assertThat(status, is(200));
249
250 verify(mockOpenstackRouterAdminService);
251 }
252
253 /**
254 * Tests the results of the REST API PUT with non-existing router interface ID.
255 */
256 @Test
257 public void testAddRouterInterfaceWithNonexistId() {
258 mockOpenstackRouterAdminService.addRouterInterface(anyObject());
259 expectLastCall().andThrow(new IllegalArgumentException());
260 replay(mockOpenstackRouterAdminService);
261
262 final WebTarget wt = target();
263 InputStream jsonStream = OpenstackRouterWebResourceTest.class
264 .getResourceAsStream("openstack-router-interface.json");
265
266 Response response = wt.path(PATH + "/f49a1319-423a-4ee6-ba54-1d95a4f6cc68/add_router_interface")
267 .request(MediaType.APPLICATION_JSON_TYPE)
268 .put(Entity.json(jsonStream));
269 final int status = response.getStatus();
270
271 assertThat(status, is(400));
272
273 verify(mockOpenstackRouterAdminService);
274 }
275
276 /**
277 * Tests the results of the REST API DELETE with deletion operation.
278 */
279 @Test
280 public void testDeleteRouterInterfaceWithDeletionOperation() {
281 mockOpenstackRouterAdminService.removeRouterInterface(anyString());
282 replay(mockOpenstackRouterAdminService);
283
284 final WebTarget wt = target();
285 InputStream jsonStream = OpenstackRouterWebResourceTest.class
286 .getResourceAsStream("openstack-router-interface.json");
287
288 Response response = wt.path(PATH + "/f49a1319-423a-4ee6-ba54-1d95a4f6cc68/remove_router_interface")
289 .request(MediaType.APPLICATION_JSON_TYPE)
290 .put(Entity.json(jsonStream));
291 final int status = response.getStatus();
292
293 assertThat(status, is(200));
294
295 verify(mockOpenstackRouterAdminService);
296 }
297
298 /**
299 * Tests the results of the REST API DELETE with non-existing router interface ID.
300 */
301 @Test
302 public void testDeleteRouterInterfaceWithNonexistId() {
303 mockOpenstackRouterAdminService.removeRouterInterface(anyString());
304 expectLastCall().andThrow(new IllegalArgumentException());
305 replay(mockOpenstackRouterAdminService);
306
307 final WebTarget wt = target();
308 InputStream jsonStream = OpenstackRouterWebResourceTest.class
309 .getResourceAsStream("openstack-router-interface.json");
310
311 Response response = wt.path(PATH + "/f49a1319-423a-4ee6-ba54-1d95a4f6cc68/remove_router_interface")
312 .request(MediaType.APPLICATION_JSON_TYPE)
313 .put(Entity.json(jsonStream));
314 final int status = response.getStatus();
315
316 assertThat(status, is(400));
317
318 verify(mockOpenstackRouterAdminService);
319 }
320}