blob: e3f4bf0ca5fe8eb216e5c350768ff25629ea3760 [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 port REST API.
43 */
44public class OpenstackPortWebResourceTest extends ResourceTest {
45
46 final OpenstackNetworkAdminService mockOpenstackNetworkAdminService =
47 createMock(OpenstackNetworkAdminService.class);
48 private static final String PATH = "ports";
49
50 /**
51 * Constructs an openstack port test instance.
52 */
53 public OpenstackPortWebResourceTest() {
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 /**
71 * Tests the results of the REST API POST with creation operation.
72 */
73 @Test
74 public void testCreatePortWithCreationOperation() {
75 mockOpenstackNetworkAdminService.createPort(anyObject());
76 replay(mockOpenstackNetworkAdminService);
77
78 final WebTarget wt = target();
79 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
80 .getResourceAsStream("openstack-port.json");
81
82 Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
83 .post(Entity.json(jsonStream));
84 final int status = response.getStatus();
85
86 assertThat(status, is(201));
87
88 verify(mockOpenstackNetworkAdminService);
89 }
90
91 /**
92 * Tests the results of the REST API POST with incorrect input.
93 */
94 @Test
95 public void testCreatePortWithIncorrectInput() {
96 final WebTarget wt = target();
97 InputStream jsonStream = OpenstackPortWebResourceTest.class
98 .getResourceAsStream("dummy.json");
99
100 Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
101 .post(Entity.json(jsonStream));
102 final int status = response.getStatus();
103
104 assertThat(status, is(400));
105 }
106
107 /**
108 * Tests the results of the REST API POST with duplicated port ID.
109 */
110 @Test
111 public void testCreatePortWithDuplicatedId() {
112 mockOpenstackNetworkAdminService.createPort(anyObject());
113 expectLastCall().andThrow(new IllegalArgumentException());
114 replay(mockOpenstackNetworkAdminService);
115
116 final WebTarget wt = target();
117 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
118 .getResourceAsStream("openstack-port.json");
119
120 Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
121 .post(Entity.json(jsonStream));
122 final int status = response.getStatus();
123
124 assertThat(status, is(400));
125
126 verify(mockOpenstackNetworkAdminService);
127 }
128
129 /**
130 * Tests the results of the REST API PUT with updating operation.
131 */
132 @Test
133 public void testUpdatePortWithUpdatingOperation() {
134 mockOpenstackNetworkAdminService.updatePort(anyObject());
135 replay(mockOpenstackNetworkAdminService);
136
137 final WebTarget wt = target();
138 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
139 .getResourceAsStream("openstack-port.json");
140
141 Response response = wt.path(PATH + "/65c0ee9f-d634-4522-8954-51021b570b0d")
142 .request(MediaType.APPLICATION_JSON_TYPE)
143 .put(Entity.json(jsonStream));
144 final int status = response.getStatus();
145
146 assertThat(status, is(200));
147
148 verify(mockOpenstackNetworkAdminService);
149 }
150
151 /**
152 * Tests the results of the REST API PUT with incorrect input.
153 */
154 @Test
155 public void testUpdatePortWithIncorrectInput() {
156 final WebTarget wt = target();
157 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
158 .getResourceAsStream("dummy.json");
159
160 Response response = wt.path(PATH + "/65c0ee9f-d634-4522-8954-51021b570b0d")
161 .request(MediaType.APPLICATION_JSON_TYPE)
162 .put(Entity.json(jsonStream));
163 final int status = response.getStatus();
164
165 assertThat(status, is(400));
166 }
167
168 /**
169 * Tests the results of the REST API PUT with non-existing port ID.
170 */
171 @Test
172 public void testUpdatePortWithNonexistId() {
173 mockOpenstackNetworkAdminService.updatePort(anyObject());
174 expectLastCall().andThrow(new IllegalArgumentException());
175 replay(mockOpenstackNetworkAdminService);
176
177 final WebTarget wt = target();
178 InputStream jsonStream = OpenstackNetworkWebResourceTest.class
179 .getResourceAsStream("openstack-port.json");
180
181 Response response = wt.path(PATH + "/65c0ee9f-d634-4522-8954-51021b570b0d")
182 .request(MediaType.APPLICATION_JSON_TYPE)
183 .put(Entity.json(jsonStream));
184 final int status = response.getStatus();
185
186 assertThat(status, is(400));
187
188 verify(mockOpenstackNetworkAdminService);
189 }
190
191 /**
192 * Tests the results of the REST API DELETE with deletion operation.
193 */
194 @Test
195 public void testDeletePortWithDeletionOperation() {
196 mockOpenstackNetworkAdminService.removePort(anyString());
197 replay(mockOpenstackNetworkAdminService);
198
199 final WebTarget wt = target();
200
201 Response response = wt.path(PATH + "/65c0ee9f-d634-4522-8954-51021b570b0d")
202 .request(MediaType.APPLICATION_JSON_TYPE)
203 .delete();
204 final int status = response.getStatus();
205
206 assertThat(status, is(204));
207
208 verify(mockOpenstackNetworkAdminService);
209 }
210
211 /**
212 * Tests the results of the REST API DELETE with non-existing port ID.
213 */
214 @Test
215 public void testDeletePortWithNonexistId() {
216 mockOpenstackNetworkAdminService.removePort(anyString());
217 expectLastCall().andThrow(new IllegalArgumentException());
218 replay(mockOpenstackNetworkAdminService);
219
220 final WebTarget wt = target();
221
222 Response response = wt.path(PATH + "/non-exist-id")
223 .request(MediaType.APPLICATION_JSON_TYPE)
224 .delete();
225 final int status = response.getStatus();
226
227 assertThat(status, is(400));
228
229 verify(mockOpenstackNetworkAdminService);
230 }
231}