blob: bbac93b274c5369a75de7be48ec4129e729fb9ef [file] [log] [blame]
Jian Li5fe34472018-02-21 10:24:31 +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.OpenstackNetworkAdminService;
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 network REST API.
43 */
44public class OpenstackNetworkWebResourceTest extends ResourceTest {
45
46 final OpenstackNetworkAdminService mockOpenstackNetworkAdminService =
47 createMock(OpenstackNetworkAdminService.class);
48 private static final String PATH = "networks";
49
50 /**
51 * Constructs an openstack network test instance.
52 */
53 public OpenstackNetworkWebResourceTest() {
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(OpenstackNetworkAdminService.class,
65 mockOpenstackNetworkAdminService);
66 setServiceDirectory(testDirectory);
67 }
68
69 /**
70 * Tests the results of the REST API POST with creation operation.
71 */
72 @Test
73 public void testCreateNetworkWithCreationOperation() {
74 mockOpenstackNetworkAdminService.createNetwork(anyObject());
75 replay(mockOpenstackNetworkAdminService);
76
77 final WebTarget wt = target();
78 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
79 .getResourceAsStream("openstack-network.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(mockOpenstackNetworkAdminService);
88 }
89
90 /**
91 * Tests the results of the REST API POST with incorrect input.
92 */
93 @Test
94 public void testCreateNetworkWithIncorrectInput() {
95 final WebTarget wt = target();
96 InputStream jsonStream = OpenstackNetworkWebResourceTest.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 network ID.
108 */
109 @Test
110 public void testCreateNetworkWithDuplicatedId() {
111 mockOpenstackNetworkAdminService.createNetwork(anyObject());
112 expectLastCall().andThrow(new IllegalArgumentException());
113 replay(mockOpenstackNetworkAdminService);
114
115 final WebTarget wt = target();
116 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
117 .getResourceAsStream("openstack-network.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(mockOpenstackNetworkAdminService);
126 }
127
128 /**
129 * Tests the results of the REST API PUT with updating operation.
130 */
131 @Test
132 public void testUpdateNetworkWithUpdatingOperation() {
133 mockOpenstackNetworkAdminService.updateNetwork(anyObject());
134 replay(mockOpenstackNetworkAdminService);
135
136 final WebTarget wt = target();
137 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
138 .getResourceAsStream("openstack-network.json");
139
140 Response response = wt.path(PATH + "/396f12f8-521e-4b91-8e21-2e003500433a")
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(mockOpenstackNetworkAdminService);
148 }
149
150 /**
151 * Tests the results of the REST API PUT with incorrect input.
152 */
153 @Test
154 public void testUpdateNetworkWithIncorrectInput() {
155 final WebTarget wt = target();
156 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
157 .getResourceAsStream("dummy.json");
158
159 Response response = wt.path(PATH + "/396f12f8-521e-4b91-8e21-2e003500433a")
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 network ID.
169 */
170 @Test
171 public void testUpdateNetworkWithNonexistId() {
172 mockOpenstackNetworkAdminService.updateNetwork(anyObject());
173 expectLastCall().andThrow(new IllegalArgumentException());
174 replay(mockOpenstackNetworkAdminService);
175
176 final WebTarget wt = target();
177 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
178 .getResourceAsStream("openstack-network.json");
179
180 Response response = wt.path(PATH + "/396f12f8-521e-4b91-8e21-2e003500433a")
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(mockOpenstackNetworkAdminService);
188 }
189
190 /**
191 * Tests the results of the REST API DELETE with deletion operation.
192 */
193 @Test
194 public void testDeleteNetworkWithDeletionOperation() {
195 mockOpenstackNetworkAdminService.removeNetwork(anyString());
196 replay(mockOpenstackNetworkAdminService);
197
198 final WebTarget wt = target();
199
200 Response response = wt.path(PATH + "/396f12f8-521e-4b91-8e21-2e003500433a")
201 .request(MediaType.APPLICATION_JSON_TYPE)
202 .delete();
203 final int status = response.getStatus();
204
205 assertThat(status, is(204));
206
207 verify(mockOpenstackNetworkAdminService);
208 }
209
210 /**
211 * Tests the results of the REST API DELETE with non-existing network ID.
212 */
213 @Test
214 public void testDeleteNetworkWithNonexistId() {
215 mockOpenstackNetworkAdminService.removeNetwork(anyString());
216 expectLastCall().andThrow(new IllegalArgumentException());
217 replay(mockOpenstackNetworkAdminService);
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(mockOpenstackNetworkAdminService);
229 }
230}