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