2 * Copyright 2020 - 2021 ZTE Corporation.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.onap.holmes.common.utils;
19 import org.easymock.EasyMock;
20 import org.junit.Rule;
21 import org.junit.Test;
22 import org.junit.rules.ExpectedException;
23 import org.junit.runner.RunWith;
24 import org.onap.holmes.common.exception.HttpException;
25 import org.powermock.api.easymock.PowerMock;
26 import org.powermock.core.classloader.annotations.PowerMockIgnore;
27 import org.powermock.modules.junit4.PowerMockRunner;
28 import org.powermock.reflect.internal.WhiteboxImpl;
30 import javax.ws.rs.client.Client;
31 import javax.ws.rs.client.Entity;
32 import javax.ws.rs.client.Invocation;
33 import javax.ws.rs.client.WebTarget;
34 import javax.ws.rs.core.MediaType;
35 import javax.ws.rs.core.Response;
36 import java.util.HashMap;
39 import static org.hamcrest.core.IsEqual.equalTo;
40 import static org.junit.Assert.assertThat;
42 @RunWith(PowerMockRunner.class)
43 @PowerMockIgnore({"javax.net.ssl.*", "javax.security.*"})
44 public class JerseyClientTest {
46 private final String ERROR_MSG = "Status code: <404>. Message: Failed to get response from the server. Info: Error";
47 private JerseyClient jerseyClient = JerseyClient.newInstance();
48 private String url = "http://www.onap.org/holmes/test";
51 private ExpectedException exception = ExpectedException.none();
54 public void get_normal() {
55 Client mockedClient = PowerMock.createMock(Client.class);
56 WebTarget mockedTarget = PowerMock.createMock(WebTarget.class);
57 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
58 Response mockedResponse = PowerMock.createMock(Response.class);
60 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
61 EasyMock.expect(mockedTarget.path("test")).andReturn(mockedTarget);
62 EasyMock.expect(mockedTarget.queryParam("ut", true)).andReturn(mockedTarget);
63 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
64 EasyMock.expect(mockedBuilder.header("Accept", MediaType.APPLICATION_JSON)).andReturn(mockedBuilder);
65 EasyMock.expect(mockedBuilder.get()).andReturn(mockedResponse);
66 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
67 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
69 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
71 PowerMock.replayAll();
73 assertThat(jerseyClient.path("test")
74 .header("Accept", MediaType.APPLICATION_JSON)
75 .queryParam("ut", true)
76 .get(url), equalTo("Normal"));
78 PowerMock.verifyAll();
82 public void get_normal_with_class() {
83 Client mockedClient = PowerMock.createMock(Client.class);
84 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
85 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
86 Response mockedResponse = PowerMock.createMock(Response.class);
87 Bean bean = new Bean("name", "holmes");
89 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
90 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
91 EasyMock.expect(mockedBuilder.get()).andReturn(mockedResponse);
92 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
93 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
95 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
97 PowerMock.replayAll();
99 assertThat(jerseyClient.get(url, Bean.class), equalTo(bean));
101 PowerMock.verifyAll();
105 public void get_normal_with_null_class_info() {
106 Client mockedClient = PowerMock.createMock(Client.class);
107 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
108 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
109 Response mockedResponse = PowerMock.createMock(Response.class);
111 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
112 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
113 EasyMock.expect(mockedBuilder.get()).andReturn(mockedResponse);
114 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
115 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
117 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
119 PowerMock.replayAll();
121 assertThat(jerseyClient.get(url, null), equalTo("Normal"));
123 PowerMock.verifyAll();
127 public void get_fail() {
128 Client mockedClient = PowerMock.createMock(Client.class);
129 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
130 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
131 Response mockedResponse = PowerMock.createMock(Response.class);
133 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
134 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
135 EasyMock.expect(mockedBuilder.get()).andReturn(mockedResponse);
136 EasyMock.expect(mockedResponse.getStatus()).andReturn(404);
137 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.NOT_FOUND);
138 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Error");
140 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
142 exception.expect(HttpException.class);
143 exception.expectMessage(ERROR_MSG);
145 PowerMock.replayAll();
147 jerseyClient.get(url);
149 PowerMock.verifyAll();
153 public void post_normal_no_body() {
154 Client mockedClient = PowerMock.createMock(Client.class);
155 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
156 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "post", Entity.class);
157 Response mockedResponse = PowerMock.createMock(Response.class);
159 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
160 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
161 EasyMock.expect(mockedBuilder.post(null)).andReturn(mockedResponse);
162 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
163 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
165 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
167 PowerMock.replayAll();
169 assertThat(jerseyClient.post(url), equalTo("Normal"));
171 PowerMock.verifyAll();
175 public void post_nobody_fail() {
176 Client mockedClient = PowerMock.createMock(Client.class);
177 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
178 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "post", Entity.class);
179 Response mockedResponse = PowerMock.createMock(Response.class);
181 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
182 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
183 EasyMock.expect(mockedBuilder.post(null)).andReturn(mockedResponse);
184 EasyMock.expect(mockedResponse.getStatus()).andReturn(404);
185 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.NOT_FOUND);
186 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Error");
188 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
190 exception.expect(HttpException.class);
191 exception.expectMessage(ERROR_MSG);
193 PowerMock.replayAll();
195 jerseyClient.post(url);
197 PowerMock.verifyAll();
201 public void post_normal_no_body_with_class() {
202 Client mockedClient = PowerMock.createMock(Client.class);
203 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
204 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "post", Entity.class);
205 Response mockedResponse = PowerMock.createMock(Response.class);
206 Bean bean = new Bean("name", "holmes");
208 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
209 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
210 EasyMock.expect(mockedBuilder.post(null)).andReturn(mockedResponse);
211 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
212 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
214 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
216 PowerMock.replayAll();
218 assertThat(jerseyClient.post(url, null, Bean.class), equalTo(bean));
220 PowerMock.verifyAll();
225 public void put_normal() {
226 Client mockedClient = PowerMock.createMock(Client.class);
227 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
228 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "put", Entity.class);
229 Response mockedResponse = PowerMock.createMock(Response.class);
231 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
232 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
233 EasyMock.expect(mockedBuilder.put(null)).andReturn(mockedResponse);
234 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
235 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
237 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
239 PowerMock.replayAll();
241 assertThat(jerseyClient.put(url, null), equalTo("Normal"));
243 PowerMock.verifyAll();
247 public void put_normal_with_class_info() {
248 Client mockedClient = PowerMock.createMock(Client.class);
249 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
250 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "put", Entity.class);
251 Response mockedResponse = PowerMock.createMock(Response.class);
252 Bean bean = new Bean("name", "holmes");
254 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
255 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
256 EasyMock.expect(mockedBuilder.put(null)).andReturn(mockedResponse);
257 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
258 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
260 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
262 PowerMock.replayAll();
264 assertThat(jerseyClient.put(url, null, Bean.class), equalTo(bean));
266 PowerMock.verifyAll();
270 public void put_normal_with_null_class_info() {
271 Client mockedClient = PowerMock.createMock(Client.class);
272 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
273 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "put", Entity.class);
274 Response mockedResponse = PowerMock.createMock(Response.class);
275 Bean bean = new Bean("name", "holmes");
277 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
278 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
279 EasyMock.expect(mockedBuilder.put(null)).andReturn(mockedResponse);
280 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
281 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
283 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
285 PowerMock.replayAll();
287 assertThat(jerseyClient.put(url, null, null), equalTo(GsonUtil.beanToJson(bean)));
289 PowerMock.verifyAll();
293 public void put_fail() {
294 Client mockedClient = PowerMock.createMock(Client.class);
295 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
296 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "put", Entity.class);
297 Response mockedResponse = PowerMock.createMock(Response.class);
299 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
300 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
301 EasyMock.expect(mockedBuilder.put(null)).andReturn(mockedResponse);
302 EasyMock.expect(mockedResponse.getStatus()).andReturn(404);
303 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.NOT_FOUND);
304 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Error");
306 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
308 exception.expect(HttpException.class);
309 exception.expectMessage(ERROR_MSG);
311 PowerMock.replayAll();
313 jerseyClient.put(url, null, null);
315 PowerMock.verifyAll();
320 public void delete_normal() {
321 Client mockedClient = PowerMock.createMock(Client.class);
322 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
323 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "delete");
324 Response mockedResponse = PowerMock.createMock(Response.class);
326 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
327 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
328 EasyMock.expect(mockedBuilder.delete()).andReturn(mockedResponse);
329 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
330 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
332 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
334 PowerMock.replayAll();
336 assertThat(jerseyClient.delete(url), equalTo("Normal"));
338 PowerMock.verifyAll();
342 public void delete_normal_with_class_info() {
343 Client mockedClient = PowerMock.createMock(Client.class);
344 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
345 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
346 Response mockedResponse = PowerMock.createMock(Response.class);
347 Bean bean = new Bean("name", "holmes");
349 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
350 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
351 EasyMock.expect(mockedBuilder.delete()).andReturn(mockedResponse);
352 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
353 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
355 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
357 PowerMock.replayAll();
359 assertThat(jerseyClient.delete(url, Bean.class), equalTo(bean));
361 PowerMock.verifyAll();
365 public void delete_with_null_class_info() {
366 Client mockedClient = PowerMock.createMock(Client.class);
367 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
368 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "delete");
369 Response mockedResponse = PowerMock.createMock(Response.class);
371 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
372 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
373 EasyMock.expect(mockedBuilder.delete()).andReturn(mockedResponse);
374 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
375 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
377 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
379 PowerMock.replayAll();
381 assertThat(jerseyClient.delete(url, null), equalTo("Normal"));
383 PowerMock.verifyAll();
387 public void delete_fail() {
388 Client mockedClient = PowerMock.createMock(Client.class);
389 WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
390 Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "delete");
391 Response mockedResponse = PowerMock.createMock(Response.class);
393 EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
394 EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
395 EasyMock.expect(mockedBuilder.delete()).andReturn(mockedResponse);
396 EasyMock.expect(mockedResponse.getStatus()).andReturn(404);
397 EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.NOT_FOUND);
398 EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Error");
400 WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
402 exception.expect(HttpException.class);
403 exception.expectMessage(ERROR_MSG);
405 PowerMock.replayAll();
407 jerseyClient.delete(url);
409 PowerMock.verifyAll();
413 public void headers() {
414 Map<String, Object> hds = new HashMap<>();
415 jerseyClient.headers(hds);
419 public void queryParams() {
420 Map<String, Object> params = new HashMap<>();
421 jerseyClient.queryParams(params);
427 private String value;
429 public Bean(String name, String value) {
434 public String getName() {
438 public void setName(String name) {
442 public String getValue() {
446 public void setValue(String value) {
451 public int hashCode() {
452 int hName = name == null ? 0 : name.hashCode();
453 int hValue = value == null ? 0 : value.hashCode();
454 return hName << 1 + hValue >> 1;
458 public boolean equals(Object o) {
459 if (o == null || !(o instanceof Bean)) {
464 return name.equals(b.name) && value.equals(b.value);