Refactored AaiJsonParserUtil
[holmes/common.git] / holmes-actions / src / test / java / org / onap / holmes / common / utils / JerseyClientTest.java
1 /**
2  * Copyright 2020 - 2021 ZTE Corporation.
3  * <p>
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  * <p>
8  * http://www.apache.org/licenses/LICENSE-2.0
9  * <p>
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  */
16
17 package org.onap.holmes.common.utils;
18
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;
29
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;
37 import java.util.Map;
38
39 import static org.hamcrest.core.IsEqual.equalTo;
40 import static org.junit.Assert.assertThat;
41
42 @RunWith(PowerMockRunner.class)
43 @PowerMockIgnore({"javax.net.ssl.*", "javax.security.*"})
44 public class JerseyClientTest {
45
46     private final String ERROR_MSG = "Failed to get response from the server. \nURL: http://www.onap.org/holmes/test" +
47             "\nCause: Not Found\nResponse body: Error";
48     private JerseyClient jerseyClient = JerseyClient.newInstance();
49     private String url = "http://www.onap.org/holmes/test";
50
51     @Rule
52     private ExpectedException exception = ExpectedException.none();
53
54     @Test
55     public void get_normal() {
56         Client mockedClient = PowerMock.createMock(Client.class);
57         WebTarget mockedTarget = PowerMock.createMock(WebTarget.class);
58         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
59         Response mockedResponse = PowerMock.createMock(Response.class);
60
61         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
62         EasyMock.expect(mockedTarget.path("test")).andReturn(mockedTarget);
63         EasyMock.expect(mockedTarget.queryParam("ut", true)).andReturn(mockedTarget);
64         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
65         EasyMock.expect(mockedBuilder.header("Accept", MediaType.APPLICATION_JSON)).andReturn(mockedBuilder);
66         EasyMock.expect(mockedBuilder.get()).andReturn(mockedResponse);
67         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
68         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
69
70         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
71
72         PowerMock.replayAll();
73
74         assertThat(jerseyClient.path("test")
75                 .header("Accept", MediaType.APPLICATION_JSON)
76                 .queryParam("ut", true)
77                 .get(url), equalTo("Normal"));
78
79         PowerMock.verifyAll();
80     }
81
82     @Test
83     public void get_normal_with_class() {
84         Client mockedClient = PowerMock.createMock(Client.class);
85         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
86         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
87         Response mockedResponse = PowerMock.createMock(Response.class);
88         Bean bean = new Bean("name", "holmes");
89
90         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
91         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
92         EasyMock.expect(mockedBuilder.get()).andReturn(mockedResponse);
93         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
94         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
95
96         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
97
98         PowerMock.replayAll();
99
100         assertThat(jerseyClient.get(url, Bean.class), equalTo(bean));
101
102         PowerMock.verifyAll();
103     }
104
105     @Test
106     public void get_normal_with_null_class_info() {
107         Client mockedClient = PowerMock.createMock(Client.class);
108         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
109         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
110         Response mockedResponse = PowerMock.createMock(Response.class);
111
112         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
113         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
114         EasyMock.expect(mockedBuilder.get()).andReturn(mockedResponse);
115         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
116         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
117
118         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
119
120         PowerMock.replayAll();
121
122         assertThat(jerseyClient.get(url, null), equalTo("Normal"));
123
124         PowerMock.verifyAll();
125     }
126
127     @Test
128     public void get_fail() {
129         Client mockedClient = PowerMock.createMock(Client.class);
130         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
131         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
132         Response mockedResponse = PowerMock.createMock(Response.class);
133
134         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
135         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
136         EasyMock.expect(mockedBuilder.get()).andReturn(mockedResponse);
137         EasyMock.expect(mockedResponse.getStatus()).andReturn(404);
138         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.NOT_FOUND);
139         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Error");
140
141         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
142
143         exception.expect(HttpException.class);
144         exception.expectMessage(ERROR_MSG);
145
146         PowerMock.replayAll();
147
148         jerseyClient.get(url);
149
150         PowerMock.verifyAll();
151     }
152
153     @Test
154     public void post_normal_no_body() {
155         Client mockedClient = PowerMock.createMock(Client.class);
156         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
157         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "post", Entity.class);
158         Response mockedResponse = PowerMock.createMock(Response.class);
159
160         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
161         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
162         EasyMock.expect(mockedBuilder.post(null)).andReturn(mockedResponse);
163         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
164         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
165
166         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
167
168         PowerMock.replayAll();
169
170         assertThat(jerseyClient.post(url), equalTo("Normal"));
171
172         PowerMock.verifyAll();
173     }
174
175     @Test
176     public void post_nobody_fail() {
177         Client mockedClient = PowerMock.createMock(Client.class);
178         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
179         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "post", Entity.class);
180         Response mockedResponse = PowerMock.createMock(Response.class);
181
182         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
183         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
184         EasyMock.expect(mockedBuilder.post(null)).andReturn(mockedResponse);
185         EasyMock.expect(mockedResponse.getStatus()).andReturn(404);
186         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.NOT_FOUND);
187         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Error");
188
189         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
190
191         exception.expect(HttpException.class);
192         exception.expectMessage(ERROR_MSG);
193
194         PowerMock.replayAll();
195
196         jerseyClient.post(url);
197
198         PowerMock.verifyAll();
199     }
200
201     @Test
202     public void post_normal_no_body_with_class() {
203         Client mockedClient = PowerMock.createMock(Client.class);
204         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
205         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "post", Entity.class);
206         Response mockedResponse = PowerMock.createMock(Response.class);
207         Bean bean = new Bean("name", "holmes");
208
209         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
210         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
211         EasyMock.expect(mockedBuilder.post(null)).andReturn(mockedResponse);
212         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
213         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
214
215         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
216
217         PowerMock.replayAll();
218
219         assertThat(jerseyClient.post(url, null, Bean.class), equalTo(bean));
220
221         PowerMock.verifyAll();
222     }
223
224
225     @Test
226     public void put_normal() {
227         Client mockedClient = PowerMock.createMock(Client.class);
228         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
229         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "put", Entity.class);
230         Response mockedResponse = PowerMock.createMock(Response.class);
231
232         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
233         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
234         EasyMock.expect(mockedBuilder.put(null)).andReturn(mockedResponse);
235         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
236         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
237
238         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
239
240         PowerMock.replayAll();
241
242         assertThat(jerseyClient.put(url, null), equalTo("Normal"));
243
244         PowerMock.verifyAll();
245     }
246
247     @Test
248     public void put_normal_with_class_info() {
249         Client mockedClient = PowerMock.createMock(Client.class);
250         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
251         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "put", Entity.class);
252         Response mockedResponse = PowerMock.createMock(Response.class);
253         Bean bean = new Bean("name", "holmes");
254
255         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
256         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
257         EasyMock.expect(mockedBuilder.put(null)).andReturn(mockedResponse);
258         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
259         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
260
261         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
262
263         PowerMock.replayAll();
264
265         assertThat(jerseyClient.put(url, null, Bean.class), equalTo(bean));
266
267         PowerMock.verifyAll();
268     }
269
270     @Test
271     public void put_normal_with_null_class_info() {
272         Client mockedClient = PowerMock.createMock(Client.class);
273         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
274         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "put", Entity.class);
275         Response mockedResponse = PowerMock.createMock(Response.class);
276         Bean bean = new Bean("name", "holmes");
277
278         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
279         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
280         EasyMock.expect(mockedBuilder.put(null)).andReturn(mockedResponse);
281         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
282         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
283
284         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
285
286         PowerMock.replayAll();
287
288         assertThat(jerseyClient.put(url, null, null), equalTo(GsonUtil.beanToJson(bean)));
289
290         PowerMock.verifyAll();
291     }
292
293     @Test
294     public void put_fail() {
295         Client mockedClient = PowerMock.createMock(Client.class);
296         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
297         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "put", Entity.class);
298         Response mockedResponse = PowerMock.createMock(Response.class);
299
300         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
301         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
302         EasyMock.expect(mockedBuilder.put(null)).andReturn(mockedResponse);
303         EasyMock.expect(mockedResponse.getStatus()).andReturn(404);
304         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.NOT_FOUND);
305         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Error");
306
307         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
308
309         exception.expect(HttpException.class);
310         exception.expectMessage(ERROR_MSG);
311
312         PowerMock.replayAll();
313
314         jerseyClient.put(url, null, null);
315
316         PowerMock.verifyAll();
317     }
318
319
320     @Test
321     public void delete_normal() {
322         Client mockedClient = PowerMock.createMock(Client.class);
323         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
324         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "delete");
325         Response mockedResponse = PowerMock.createMock(Response.class);
326
327         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
328         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
329         EasyMock.expect(mockedBuilder.delete()).andReturn(mockedResponse);
330         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
331         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
332
333         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
334
335         PowerMock.replayAll();
336
337         assertThat(jerseyClient.delete(url), equalTo("Normal"));
338
339         PowerMock.verifyAll();
340     }
341
342     @Test
343     public void delete_normal_with_class_info() {
344         Client mockedClient = PowerMock.createMock(Client.class);
345         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
346         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "get");
347         Response mockedResponse = PowerMock.createMock(Response.class);
348         Bean bean = new Bean("name", "holmes");
349
350         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
351         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
352         EasyMock.expect(mockedBuilder.delete()).andReturn(mockedResponse);
353         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
354         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn(GsonUtil.beanToJson(bean));
355
356         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
357
358         PowerMock.replayAll();
359
360         assertThat(jerseyClient.delete(url, Bean.class), equalTo(bean));
361
362         PowerMock.verifyAll();
363     }
364
365     @Test
366     public void delete_with_null_class_info() {
367         Client mockedClient = PowerMock.createMock(Client.class);
368         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
369         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "delete");
370         Response mockedResponse = PowerMock.createMock(Response.class);
371
372         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
373         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
374         EasyMock.expect(mockedBuilder.delete()).andReturn(mockedResponse);
375         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.OK);
376         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Normal");
377
378         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
379
380         PowerMock.replayAll();
381
382         assertThat(jerseyClient.delete(url, null), equalTo("Normal"));
383
384         PowerMock.verifyAll();
385     }
386
387     @Test
388     public void delete_fail() {
389         Client mockedClient = PowerMock.createMock(Client.class);
390         WebTarget mockedTarget = PowerMock.createPartialMock(WebTarget.class, "request");
391         Invocation.Builder mockedBuilder = PowerMock.createPartialMock(Invocation.Builder.class, "delete");
392         Response mockedResponse = PowerMock.createMock(Response.class);
393
394         EasyMock.expect(mockedClient.target(url)).andReturn(mockedTarget);
395         EasyMock.expect(mockedTarget.request()).andReturn(mockedBuilder);
396         EasyMock.expect(mockedBuilder.delete()).andReturn(mockedResponse);
397         EasyMock.expect(mockedResponse.getStatus()).andReturn(404);
398         EasyMock.expect(mockedResponse.getStatusInfo()).andReturn(Response.Status.NOT_FOUND);
399         EasyMock.expect(mockedResponse.readEntity(String.class)).andReturn("Error");
400
401         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
402
403         exception.expect(HttpException.class);
404         exception.expectMessage(ERROR_MSG);
405
406         PowerMock.replayAll();
407
408         jerseyClient.delete(url);
409
410         PowerMock.verifyAll();
411     }
412
413     @Test
414     public void headers() {
415         Map<String, Object> hds = new HashMap<>();
416         jerseyClient.headers(hds);
417     }
418
419     @Test
420     public void queryParams() {
421         Map<String, Object> params = new HashMap<>();
422         jerseyClient.queryParams(params);
423     }
424 }
425
426 class Bean {
427     private String name;
428     private String value;
429
430     public Bean(String name, String value) {
431         this.name = name;
432         this.value = value;
433     }
434
435     public String getName() {
436         return name;
437     }
438
439     public void setName(String name) {
440         this.name = name;
441     }
442
443     public String getValue() {
444         return value;
445     }
446
447     public void setValue(String value) {
448         this.value = value;
449     }
450
451     @Override
452     public int hashCode() {
453         int hName = name == null ? 0 : name.hashCode();
454         int hValue = value == null ? 0 : value.hashCode();
455         return hName << 1 + hValue >> 1;
456     }
457
458     @Override
459     public boolean equals(Object o) {
460         if (o == null || !(o instanceof Bean)) {
461             return false;
462         }
463
464         Bean b = (Bean) o;
465         return name.equals(b.name) && value.equals(b.value);
466     }
467 }