2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 Ericsson. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.apex.plugins.event.carrier.restclient;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertTrue;
26 import static org.junit.Assert.fail;
28 import java.io.ByteArrayOutputStream;
29 import java.io.PrintStream;
31 import javax.ws.rs.client.Client;
32 import javax.ws.rs.client.Invocation.Builder;
33 import javax.ws.rs.client.WebTarget;
34 import javax.ws.rs.core.Response;
36 import org.junit.Test;
37 import org.mockito.Mock;
38 import org.mockito.Mockito;
39 import org.mockito.MockitoAnnotations;
40 import org.onap.policy.apex.core.infrastructure.threading.ThreadUtilities;
41 import org.onap.policy.apex.service.engine.event.ApexEventException;
42 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
43 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
46 * This class tests the ApexRestClientConusmer class.
49 public class ApexRestClientConusmerTest {
50 private final PrintStream stdout = System.out;
53 private Client httpClientMock;
56 private WebTarget targetMock;
59 private Builder builderMock;
62 private Response responseMock;
65 public void testApexRestClientConusmerErrors() {
66 MockitoAnnotations.initMocks(this);
68 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
71 EventHandlerParameters consumerParameters = new EventHandlerParameters();
72 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
74 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
75 fail("test should throw an exception here");
76 } catch (ApexEventException e) {
78 "specified consumer properties are not applicable to REST client consumer (RestClientConsumer)",
82 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
83 consumerParameters.setCarrierTechnologyParameters(rcctp);
84 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
86 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
87 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
88 fail("test should throw an exception here");
89 } catch (ApexEventException e) {
90 assertEquals("specified HTTP method of \"DELETE\" is invalid, only HTTP method \"GET\" is supported "
91 + "for event reception on REST client consumer (RestClientConsumer)", e.getMessage());
94 rcctp.setHttpMethod(null);
96 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
97 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
99 assertEquals("RestClientConsumer", arcc.getName());
101 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
102 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
103 } catch (ApexEventException e) {
104 fail("test should not throw an exception");
107 rcctp.setUrl("http://some.place.that.does.not/exist");
108 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
109 Mockito.doReturn(responseMock).when(builderMock).get();
110 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
111 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
112 arcc.setClient(httpClientMock);
115 // We have not set the URL, this test should not receive any events
117 ThreadUtilities.sleep(200);
120 assertEquals(0, incomingEventReceiver.getEventCount());
121 } catch (Exception e) {
122 fail("test should not throw an exception");
125 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
127 // We have not set the URL, this test should not receive any events
129 ThreadUtilities.sleep(200);
132 assertEquals(0, incomingEventReceiver.getEventCount());
133 } catch (Exception e) {
134 fail("test should not throw an exception");
139 public void testApexRestClientConusmerHttpError() {
140 MockitoAnnotations.initMocks(this);
142 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
145 EventHandlerParameters consumerParameters = new EventHandlerParameters();
146 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
147 consumerParameters.setCarrierTechnologyParameters(rcctp);
148 rcctp.setUrl("http://some.place.that.does.not/exist");
149 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
152 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
153 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
155 assertEquals("RestClientConsumer", arcc.getName());
157 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
158 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
159 } catch (ApexEventException e) {
160 fail("test should not throw an exception");
163 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
164 Mockito.doReturn(responseMock).when(builderMock).get();
165 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
166 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
167 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
168 arcc.setClient(httpClientMock);
170 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
171 System.setOut(new PrintStream(outContent));
174 // We have not set the URL, this test should not receive any events
176 ThreadUtilities.sleep(200);
179 assertEquals(0, incomingEventReceiver.getEventCount());
180 } catch (Exception e) {
181 fail("test should not throw an exception");
184 final String outString = outContent.toString();
185 System.setOut(stdout);
187 assertTrue(outString.contains(
188 "reception of event from URL \"http://some.place.that.does.not/exist\" failed with status code 400"));
192 public void testApexRestClientConusmerJsonError() {
193 MockitoAnnotations.initMocks(this);
195 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
198 EventHandlerParameters consumerParameters = new EventHandlerParameters();
199 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
200 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
201 consumerParameters.setCarrierTechnologyParameters(rcctp);
204 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
205 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
207 assertEquals("RestClientConsumer", arcc.getName());
209 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
210 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
211 } catch (ApexEventException e) {
212 fail("test should not throw an exception");
215 rcctp.setUrl("http://some.place.that.does.not/exist");
216 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
217 Mockito.doReturn(responseMock).when(builderMock).get();
218 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
219 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
220 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
221 arcc.setClient(httpClientMock);
223 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
224 System.setOut(new PrintStream(outContent));
227 // We have not set the URL, this test should not receive any events
229 ThreadUtilities.sleep(200);
232 assertEquals(0, incomingEventReceiver.getEventCount());
233 } catch (Exception e) {
234 fail("test should not throw an exception");
237 final String outString = outContent.toString();
238 System.setOut(stdout);
240 assertTrue(outString.contains("received an empty event from URL \"http://some.place.that.does.not/exist\""));
244 public void testApexRestClientConusmerJsonEmpty() {
245 MockitoAnnotations.initMocks(this);
247 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
250 EventHandlerParameters consumerParameters = new EventHandlerParameters();
251 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
252 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
253 consumerParameters.setCarrierTechnologyParameters(rcctp);
256 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
257 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
259 assertEquals("RestClientConsumer", arcc.getName());
261 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
262 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
263 } catch (ApexEventException e) {
264 fail("test should not throw an exception");
267 rcctp.setUrl("http://some.place.that.does.not/exist");
268 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
269 Mockito.doReturn("").when(responseMock).readEntity(String.class);
270 Mockito.doReturn(responseMock).when(builderMock).get();
271 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
272 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
273 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
274 arcc.setClient(httpClientMock);
276 ByteArrayOutputStream outContent = new ByteArrayOutputStream();
277 System.setOut(new PrintStream(outContent));
280 // We have not set the URL, this test should not receive any events
282 ThreadUtilities.sleep(200);
285 assertEquals(0, incomingEventReceiver.getEventCount());
286 } catch (Exception e) {
287 fail("test should not throw an exception");
290 final String outString = outContent.toString();
291 System.setOut(stdout);
293 assertTrue(outString.contains("received an empty event from URL \"http://some.place.that.does.not/exist\""));
297 public void testApexRestClientConusmerJsonOk() {
298 MockitoAnnotations.initMocks(this);
300 ApexRestClientConsumer arcc = new ApexRestClientConsumer();
303 EventHandlerParameters consumerParameters = new EventHandlerParameters();
304 SupportApexEventReceiver incomingEventReceiver = new SupportApexEventReceiver();
305 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
306 consumerParameters.setCarrierTechnologyParameters(rcctp);
309 arcc.init("RestClientConsumer", consumerParameters, incomingEventReceiver);
310 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
312 assertEquals("RestClientConsumer", arcc.getName());
314 arcc.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
315 assertEquals(null, arcc.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
316 } catch (ApexEventException e) {
317 fail("test should not throw an exception");
320 rcctp.setUrl("http://some.place.that.does.not/exist");
321 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
322 Mockito.doReturn("This is an event").when(responseMock).readEntity(String.class);
323 Mockito.doReturn(responseMock).when(builderMock).get();
324 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
325 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
326 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
327 arcc.setClient(httpClientMock);
330 // We have not set the URL, this test should not receive any events
332 ThreadUtilities.sleep(200);
335 assertEquals("This is an event", incomingEventReceiver.getLastEvent());
336 } catch (Exception e) {
337 fail("test should not throw an exception");