2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2019 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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.apex.plugins.event.carrier.restclient;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
29 import java.io.ByteArrayOutputStream;
30 import java.io.PrintStream;
32 import javax.ws.rs.client.Client;
33 import javax.ws.rs.client.Invocation.Builder;
34 import javax.ws.rs.client.WebTarget;
35 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.core.infrastructure.threading.ThreadUtilities;
43 import org.onap.policy.apex.service.engine.event.ApexEventException;
44 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
45 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
48 * This class tests the ApexRestClientConusmer class.
51 public class ApexRestClientConusmerTest {
52 private final PrintStream stdout = System.out;
55 private Client httpClientMock;
58 private WebTarget targetMock;
61 private Builder builderMock;
64 private Response responseMock;
68 System.setOut(stdout);
72 public void testApexRestClientConsumerErrors() throws ApexEventException {
73 MockitoAnnotations.initMocks(this);
75 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
78 EventHandlerParameters consumerParameters = new EventHandlerParameters();
79 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
81 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
82 fail("test should throw an exception here");
83 } catch (ApexEventException e) {
85 "specified consumer properties are not applicable to REST client consumer (RestClientConsumer)",
89 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
90 consumerParameters.setCarrierTechnologyParameters(rcctp);
91 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
93 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
94 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
95 fail("test should throw an exception here");
96 } catch (ApexEventException e) {
97 assertEquals("specified HTTP method of \"DELETE\" is invalid, only HTTP method \"GET\" is supported "
98 + "for event reception on REST client consumer (RestClientConsumer)", e.getMessage());
101 rcctp.setHttpMethod(null);
102 rcctp.setHttpCodeFilter("zzz");
104 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
105 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
107 assertEquals("RestClientConsumer", arcc.getName());
109 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
110 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
112 rcctp.setUrl("http://some.place.that.does.not/exist");
113 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
114 Mockito.doReturn(responseMock).when(builderMock).get();
115 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
116 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
117 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
118 arcc.setClient(httpClientMock);
120 // We have not set the URL, this test should not receive any events
122 ThreadUtilities.sleep(200);
124 assertEquals(0, incomingEventReceiver.getEventCount());
126 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
128 // We have not set the URL, this test should not receive any events
130 ThreadUtilities.sleep(200);
132 assertEquals(0, incomingEventReceiver.getEventCount());
136 public void testApexRestClientConsumerHttpError() throws ApexEventException {
137 MockitoAnnotations.initMocks(this);
139 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
142 EventHandlerParameters consumerParameters = new EventHandlerParameters();
143 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
144 consumerParameters.setCarrierTechnologyParameters(rcctp);
145 rcctp.setUrl("http://some.place.that.does.not/exist");
146 rcctp.setHttpCodeFilter("[1-5][0][0-5]");
147 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
149 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
150 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
152 assertEquals("[1-5][0][0-5]", rcctp.getHttpCodeFilter());
154 assertEquals("RestClientConsumer", arcc.getName());
156 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
157 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
159 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
160 Mockito.doReturn(responseMock).when(builderMock).get();
161 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
162 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
163 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
164 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
165 arcc.setClient(httpClientMock);
167 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
168 System.setOut(new PrintStream(outContent));
170 // We have not set the URL, this test should not receive any events
172 ThreadUtilities.sleep(200);
174 assertEquals(0, incomingEventReceiver.getEventCount());
178 public void testApexRestClientConsumerJsonError() {
179 MockitoAnnotations.initMocks(this);
181 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
184 EventHandlerParameters consumerParameters = new EventHandlerParameters();
185 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
186 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
187 consumerParameters.setCarrierTechnologyParameters(rcctp);
188 rcctp.setHttpCodeFilter("[1-5][0][0-5]");
191 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
192 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
194 assertEquals("RestClientConsumer", arcc.getName());
196 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
198 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
199 } catch (ApexEventException e) {
200 fail("test should not throw an exception");
203 rcctp.setUrl("http://some.place.that.does.not/exist");
204 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
205 Mockito.doReturn(responseMock).when(builderMock).get();
206 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
207 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
208 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
209 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
210 arcc.setClient(httpClientMock);
212 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
213 System.setOut(new PrintStream(outContent));
215 // We have not set the URL, this test should not receive any events
217 ThreadUtilities.sleep(200);
220 assertEquals(0, incomingEventReceiver.getEventCount());
222 final String outString = outContent.toString();
224 assertTrue(outString.contains("received an empty event from URL \"http://some.place.that.does.not/exist\""));
228 public void testApexRestClientConsumerJsonEmpty() throws ApexEventException {
229 MockitoAnnotations.initMocks(this);
231 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
234 EventHandlerParameters consumerParameters = new EventHandlerParameters();
235 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
236 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
237 consumerParameters.setCarrierTechnologyParameters(rcctp);
238 rcctp.setHttpCodeFilter("[1-5][0][0-5]");
240 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
241 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
243 assertEquals("RestClientConsumer", arcc.getName());
245 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
247 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
249 rcctp.setUrl("http://some.place.that.does.not/exist");
250 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
251 Mockito.doReturn("").when(responseMock).readEntity(String.class);
252 Mockito.doReturn(responseMock).when(builderMock).get();
253 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
254 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
255 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
256 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
257 arcc.setClient(httpClientMock);
259 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
260 System.setOut(new PrintStream(outContent));
262 // We have not set the URL, this test should not receive any events
264 ThreadUtilities.sleep(200);
267 assertEquals(0, incomingEventReceiver.getEventCount());
269 final String outString = outContent.toString();
271 assertTrue(outString.contains("received an empty event from URL \"http://some.place.that.does.not/exist\""));
275 public void testApexRestClientConsumerJsonOk() throws ApexEventException {
276 MockitoAnnotations.initMocks(this);
278 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
281 EventHandlerParameters consumerParameters = new EventHandlerParameters();
282 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
283 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
284 consumerParameters.setCarrierTechnologyParameters(rcctp);
285 rcctp.setHttpCodeFilter("[1-5][0][0-5]");
287 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
288 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
290 assertEquals("RestClientConsumer", arcc.getName());
292 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
294 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
296 rcctp.setUrl("http://some.place.that.does.not/exist");
297 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
298 Mockito.doReturn("This is an event").when(responseMock).readEntity(String.class);
299 Mockito.doReturn(responseMock).when(builderMock).get();
300 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
301 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
302 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
303 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
304 arcc.setClient(httpClientMock);
306 // We have not set the URL, this test should not receive any events
308 ThreadUtilities.sleep(200);
311 assertEquals("This is an event", incomingEventReceiver.getLastEvent());
315 public void testApexRestClientConsumerInvalidStatusCode() throws ApexEventException {
316 MockitoAnnotations.initMocks(this);
318 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
321 EventHandlerParameters consumerParameters = new EventHandlerParameters();
322 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
323 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
324 consumerParameters.setCarrierTechnologyParameters(rcctp);
325 rcctp.setHttpCodeFilter("zzz");
327 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
328 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
330 assertEquals("RestClientConsumer", arcc.getName());
332 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
334 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
336 rcctp.setUrl("http://some.place.that.does.not/exist");
337 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
338 Mockito.doReturn("This is an event").when(responseMock).readEntity(String.class);
339 Mockito.doReturn(responseMock).when(builderMock).get();
340 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
341 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
342 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
343 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getHttpCodeFilter());
344 arcc.setClient(httpClientMock);
346 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
347 System.setOut(new PrintStream(outContent));
350 // We have not set the URL, this test should not receive any events
352 ThreadUtilities.sleep(200);
354 } catch (Exception e) {
355 // test invalid status code
356 assertEquals("received an invalid status code \"200\"", e.getMessage());