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