Changes for checkstyle 8.32
[policy/apex-pdp.git] / plugins / plugins-event / plugins-event-carrier / plugins-event-carrier-restclient / src / test / java / org / onap / policy / apex / plugins / event / carrier / restclient / ApexRestClientConusmerTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2018 Ericsson. All rights reserved.
4  *  Modifications Copyright (C) 2019-2020 Nordix Foundation.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.apex.plugins.event.carrier.restclient;
23
24 import static org.awaitility.Awaitility.await;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
29
30 import java.io.ByteArrayOutputStream;
31 import java.io.PrintStream;
32 import java.util.concurrent.TimeUnit;
33 import javax.ws.rs.client.Client;
34 import javax.ws.rs.client.Invocation.Builder;
35 import javax.ws.rs.client.WebTarget;
36 import javax.ws.rs.core.Response;
37 import org.junit.After;
38 import org.junit.Test;
39 import org.mockito.Mock;
40 import org.mockito.Mockito;
41 import org.mockito.MockitoAnnotations;
42 import org.onap.policy.apex.service.engine.event.ApexEventException;
43 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
44 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
45
46 /**
47  * This class tests the ApexRestClientConusmer class.
48  *
49  */
50 public class ApexRestClientConusmerTest {
51     private final PrintStream stdout = System.out;
52
53     @Mock
54     private Client httpClientMock;
55
56     @Mock
57     private WebTarget targetMock;
58
59     @Mock
60     private Builder builderMock;
61
62     @Mock
63     private Response responseMock;
64
65     @After
66     public void after() {
67         System.setOut(stdout);
68     }
69
70     @Test
71     public void testApexRestClientConsumerErrors() throws ApexEventException {
72         MockitoAnnotations.initMocks(this);
73
74         ApexRestClientConsumer arcc = new ApexRestClientConsumer();
75         assertNotNull(arcc);
76
77         EventHandlerParameters consumerParameters = new EventHandlerParameters();
78         SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
79         try {
80             arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
81             fail("test should throw an exception here");
82         } catch (ApexEventException e) {
83             assertEquals(
84                 "specified consumer properties are not applicable to REST client consumer (RestClientConsumer)",
85                 e.getMessage());
86         }
87
88         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
89         consumerParameters.setCarrierTechnologyParameters(rcctp);
90         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
91         try {
92             arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
93             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
94             fail("test should throw an exception here");
95         } catch (ApexEventException e) {
96             assertEquals("specified HTTP method of \"DELETE\" is invalid, only HTTP method \"GET\" is supported "
97                 + "for event reception on REST client consumer (RestClientConsumer)", e.getMessage());
98         }
99
100         rcctp.setHttpMethod(null);
101         rcctp.setHttpCodeFilter("zzz");
102
103         arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
104         assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
105
106         assertEquals("RestClientConsumer", arcc.getName());
107
108         arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
109         assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
110
111         rcctp.setUrl("http://some.place.that.does.not/exist");
112         Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
113         Mockito.doReturn(responseMock).when(builderMock).get();
114         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
115         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
116         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
117         arcc.setClient(httpClientMock);
118
119         // We have not set the URL, this test should not receive any events
120         arcc.start();
121         await().atMost(200, TimeUnit.MILLISECONDS).until(() -> incomingEventReceiver.getEventCount() == 0);
122         arcc.stop();
123         assertEquals(0, incomingEventReceiver.getEventCount());
124
125         Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
126
127         // We have not set the URL, this test should not receive any events
128         arcc.start();
129         await().atMost(200, TimeUnit.MILLISECONDS).until(() -> incomingEventReceiver.getEventCount() == 0);
130         arcc.stop();
131         assertEquals(0, incomingEventReceiver.getEventCount());
132     }
133
134     @Test
135     public void testApexRestClientConsumerHttpError() throws ApexEventException {
136         MockitoAnnotations.initMocks(this);
137
138         ApexRestClientConsumer arcc = new ApexRestClientConsumer();
139         assertNotNull(arcc);
140
141         EventHandlerParameters consumerParameters = new EventHandlerParameters();
142         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
143         consumerParameters.setCarrierTechnologyParameters(rcctp);
144         rcctp.setUrl("http://some.place.that.does.not/exist");
145         rcctp.setHttpCodeFilter("[1-5][0][0-5]");
146         SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
147
148         arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
149         assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
150
151         assertEquals("[1-5][0][0-5]", rcctp.getHttpCodeFilter());
152
153         assertEquals("RestClientConsumer", arcc.getName());
154
155         arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
156         assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
157
158         Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
159         Mockito.doReturn(responseMock).when(builderMock).get();
160         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
161         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
162         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
163         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
164         arcc.setClient(httpClientMock);
165
166         ByteArrayOutputStream outContent = new ByteArrayOutputStream();
167         System.setOut(new PrintStream(outContent));
168
169         // We have not set the URL, this test should not receive any events
170         arcc.start();
171         await().atMost(200, TimeUnit.MILLISECONDS).until(() -> incomingEventReceiver.getEventCount() == 0);
172         arcc.stop();
173         assertEquals(0, incomingEventReceiver.getEventCount());
174     }
175
176     @Test
177     public void testApexRestClientConsumerJsonError() {
178         MockitoAnnotations.initMocks(this);
179
180         ApexRestClientConsumer arcc = new ApexRestClientConsumer();
181         assertNotNull(arcc);
182
183         EventHandlerParameters consumerParameters = new EventHandlerParameters();
184         SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
185         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
186         consumerParameters.setCarrierTechnologyParameters(rcctp);
187         rcctp.setHttpCodeFilter("[1-5][0][0-5]");
188
189         try {
190             arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
191             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
192
193             assertEquals("RestClientConsumer", arcc.getName());
194
195             arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
196
197             assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
198         } catch (ApexEventException e) {
199             fail("test should not throw an exception");
200         }
201
202         rcctp.setUrl("http://some.place.that.does.not/exist");
203         Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
204         Mockito.doReturn(responseMock).when(builderMock).get();
205         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
206         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
207         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
208         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
209         arcc.setClient(httpClientMock);
210
211         ByteArrayOutputStream outContent = new ByteArrayOutputStream();
212         System.setOut(new PrintStream(outContent));
213
214         // We have not set the URL, this test should not receive any events
215         arcc.start();
216         await().atMost(400, TimeUnit.MILLISECONDS).until(() -> outContent.toString()
217             .contains("received an empty event from URL \"http://some.place.that.does.not/exist\""));
218         arcc.stop();
219         assertEquals(0, incomingEventReceiver.getEventCount());
220     }
221
222     @Test
223     public void testApexRestClientConsumerJsonEmpty() throws ApexEventException {
224         MockitoAnnotations.initMocks(this);
225
226         ApexRestClientConsumer arcc = new ApexRestClientConsumer();
227         assertNotNull(arcc);
228
229         EventHandlerParameters consumerParameters = new EventHandlerParameters();
230         SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
231         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
232         consumerParameters.setCarrierTechnologyParameters(rcctp);
233         rcctp.setHttpCodeFilter("[1-5][0][0-5]");
234
235         arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
236         assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
237
238         assertEquals("RestClientConsumer", arcc.getName());
239
240         arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
241
242         assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
243
244         rcctp.setUrl("http://some.place.that.does.not/exist");
245         Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
246         Mockito.doReturn("").when(responseMock).readEntity(String.class);
247         Mockito.doReturn(responseMock).when(builderMock).get();
248         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
249         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
250         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
251         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
252         arcc.setClient(httpClientMock);
253
254         ByteArrayOutputStream outContent = new ByteArrayOutputStream();
255         System.setOut(new PrintStream(outContent));
256
257         // We have not set the URL, this test should not receive any events
258         arcc.start();
259         await().atMost(200, TimeUnit.MILLISECONDS).until(() -> outContent.toString()
260             .contains("received an empty event from URL \"http://some.place.that.does.not/exist\""));
261         arcc.stop();
262
263         assertEquals(0, incomingEventReceiver.getEventCount());
264
265         final String outString = outContent.toString();
266
267         assertTrue(outString.contains("received an empty event from URL \"http://some.place.that.does.not/exist\""));
268     }
269
270     @Test
271     public void testApexRestClientConsumerJsonOk() throws ApexEventException {
272         MockitoAnnotations.initMocks(this);
273
274         ApexRestClientConsumer arcc = new ApexRestClientConsumer();
275         assertNotNull(arcc);
276
277         EventHandlerParameters consumerParameters = new EventHandlerParameters();
278         SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
279         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
280         consumerParameters.setCarrierTechnologyParameters(rcctp);
281         rcctp.setHttpCodeFilter("[1-5][0][0-5]");
282
283         arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
284         assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
285
286         assertEquals("RestClientConsumer", arcc.getName());
287
288         arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
289
290         assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
291
292         rcctp.setUrl("http://some.place.that.does.not/exist");
293         Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
294         Mockito.doReturn("This is an event").when(responseMock).readEntity(String.class);
295         Mockito.doReturn(responseMock).when(builderMock).get();
296         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
297         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
298         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
299         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
300         arcc.setClient(httpClientMock);
301
302         // We have not set the URL, this test should not receive any events
303         arcc.start();
304         await().atMost(400, TimeUnit.MILLISECONDS)
305             .until(() -> incomingEventReceiver.getLastEvent().equals("This is an event"));
306         arcc.stop();
307     }
308
309     @Test
310     public void testApexRestClientConsumerInvalidStatusCode() throws ApexEventException {
311         MockitoAnnotations.initMocks(this);
312
313         ApexRestClientConsumer arcc = new ApexRestClientConsumer();
314         assertNotNull(arcc);
315
316         EventHandlerParameters consumerParameters = new EventHandlerParameters();
317         SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
318         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
319         consumerParameters.setCarrierTechnologyParameters(rcctp);
320         rcctp.setHttpCodeFilter("zzz");
321
322         arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
323         assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
324
325         assertEquals("RestClientConsumer", arcc.getName());
326
327         arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
328
329         assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
330
331         rcctp.setUrl("http://some.place.that.does.not/exist");
332         Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
333         Mockito.doReturn("This is an event").when(responseMock).readEntity(String.class);
334         Mockito.doReturn(responseMock).when(builderMock).get();
335         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
336         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
337         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
338         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
339         arcc.setClient(httpClientMock);
340
341         ByteArrayOutputStream outContent = new ByteArrayOutputStream();
342         System.setOut(new PrintStream(outContent));
343
344         try {
345             // We have not set the URL, this test should not receive any events
346             arcc.start();
347             await().atMost(200, TimeUnit.MILLISECONDS).until(() -> incomingEventReceiver.getEventCount() == 0);
348             arcc.stop();
349         } catch (Exception e) {
350             // test invalid status code
351             assertEquals("received an invalid status code \"200\"", e.getMessage());
352         }
353     }
354 }