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