Refactored JerseyClient
[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 = "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";
49
50     @Rule
51     private ExpectedException exception = ExpectedException.none();
52
53     @Test
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);
59
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");
68
69         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
70
71         PowerMock.replayAll();
72
73         assertThat(jerseyClient.path("test")
74                 .header("Accept", MediaType.APPLICATION_JSON)
75                 .queryParam("ut", true)
76                 .get(url), equalTo("Normal"));
77
78         PowerMock.verifyAll();
79     }
80
81     @Test
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");
88
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));
94
95         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
96
97         PowerMock.replayAll();
98
99         assertThat(jerseyClient.get(url, Bean.class), equalTo(bean));
100
101         PowerMock.verifyAll();
102     }
103
104     @Test
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);
110
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");
116
117         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
118
119         PowerMock.replayAll();
120
121         assertThat(jerseyClient.get(url, null), equalTo("Normal"));
122
123         PowerMock.verifyAll();
124     }
125
126     @Test
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);
132
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");
139
140         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
141
142         exception.expect(HttpException.class);
143         exception.expectMessage(ERROR_MSG);
144
145         PowerMock.replayAll();
146
147         jerseyClient.get(url);
148
149         PowerMock.verifyAll();
150     }
151
152     @Test
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);
158
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");
164
165         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
166
167         PowerMock.replayAll();
168
169         assertThat(jerseyClient.post(url), equalTo("Normal"));
170
171         PowerMock.verifyAll();
172     }
173
174     @Test
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);
180
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");
187
188         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
189
190         exception.expect(HttpException.class);
191         exception.expectMessage(ERROR_MSG);
192
193         PowerMock.replayAll();
194
195         jerseyClient.post(url);
196
197         PowerMock.verifyAll();
198     }
199
200     @Test
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");
207
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));
213
214         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
215
216         PowerMock.replayAll();
217
218         assertThat(jerseyClient.post(url, null, Bean.class), equalTo(bean));
219
220         PowerMock.verifyAll();
221     }
222
223
224     @Test
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);
230
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");
236
237         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
238
239         PowerMock.replayAll();
240
241         assertThat(jerseyClient.put(url, null), equalTo("Normal"));
242
243         PowerMock.verifyAll();
244     }
245
246     @Test
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");
253
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));
259
260         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
261
262         PowerMock.replayAll();
263
264         assertThat(jerseyClient.put(url, null, Bean.class), equalTo(bean));
265
266         PowerMock.verifyAll();
267     }
268
269     @Test
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");
276
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));
282
283         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
284
285         PowerMock.replayAll();
286
287         assertThat(jerseyClient.put(url, null, null), equalTo(GsonUtil.beanToJson(bean)));
288
289         PowerMock.verifyAll();
290     }
291
292     @Test
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);
298
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");
305
306         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
307
308         exception.expect(HttpException.class);
309         exception.expectMessage(ERROR_MSG);
310
311         PowerMock.replayAll();
312
313         jerseyClient.put(url, null, null);
314
315         PowerMock.verifyAll();
316     }
317
318
319     @Test
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);
325
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");
331
332         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
333
334         PowerMock.replayAll();
335
336         assertThat(jerseyClient.delete(url), equalTo("Normal"));
337
338         PowerMock.verifyAll();
339     }
340
341     @Test
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");
348
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));
354
355         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
356
357         PowerMock.replayAll();
358
359         assertThat(jerseyClient.delete(url, Bean.class), equalTo(bean));
360
361         PowerMock.verifyAll();
362     }
363
364     @Test
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);
370
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");
376
377         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
378
379         PowerMock.replayAll();
380
381         assertThat(jerseyClient.delete(url, null), equalTo("Normal"));
382
383         PowerMock.verifyAll();
384     }
385
386     @Test
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);
392
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");
399
400         WhiteboxImpl.setInternalState(jerseyClient, "client", mockedClient);
401
402         exception.expect(HttpException.class);
403         exception.expectMessage(ERROR_MSG);
404
405         PowerMock.replayAll();
406
407         jerseyClient.delete(url);
408
409         PowerMock.verifyAll();
410     }
411
412     @Test
413     public void headers() {
414         Map<String, Object> hds = new HashMap<>();
415         jerseyClient.headers(hds);
416     }
417
418     @Test
419     public void queryParams() {
420         Map<String, Object> params = new HashMap<>();
421         jerseyClient.queryParams(params);
422     }
423 }
424
425 class Bean {
426     private String name;
427     private String value;
428
429     public Bean(String name, String value) {
430         this.name = name;
431         this.value = value;
432     }
433
434     public String getName() {
435         return name;
436     }
437
438     public void setName(String name) {
439         this.name = name;
440     }
441
442     public String getValue() {
443         return value;
444     }
445
446     public void setValue(String value) {
447         this.value = value;
448     }
449
450     @Override
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;
455     }
456
457     @Override
458     public boolean equals(Object o) {
459         if (o == null || !(o instanceof Bean)) {
460             return false;
461         }
462
463         Bean b = (Bean) o;
464         return name.equals(b.name) && value.equals(b.value);
465     }
466 }