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.fail;
27 import ch.qos.logback.classic.Level;
29 import javax.ws.rs.client.Client;
30 import javax.ws.rs.client.Invocation.Builder;
31 import javax.ws.rs.client.WebTarget;
32 import javax.ws.rs.core.Response;
34 import org.junit.Test;
35 import org.mockito.Mock;
36 import org.mockito.Mockito;
37 import org.mockito.MockitoAnnotations;
38 import org.onap.policy.apex.service.engine.event.ApexEventConsumer;
39 import org.onap.policy.apex.service.engine.event.ApexEventException;
40 import org.onap.policy.apex.service.engine.event.SynchronousEventCache;
41 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer;
42 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
43 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
48 * Test the ApexRestClientProducer class.
51 public class ApexRestClientProducerTest {
52 private static final Logger LOGGER = LoggerFactory.getLogger(ApexRestClientProducer.class);
55 private Client httpClientMock;
58 private WebTarget targetMock;
61 private Builder builderMock;
64 private Response responseMock;
67 public void testApexRestClientProducerErrors() {
68 ApexRestClientProducer arcp = new ApexRestClientProducer();
71 EventHandlerParameters producerParameters = new EventHandlerParameters();
73 arcp.init("RestClientProducer", producerParameters);
74 fail("test should throw an exception here");
75 } catch (ApexEventException e) {
77 "specified producer properties are not applicable to REST client producer (RestClientProducer)",
81 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
82 producerParameters.setCarrierTechnologyParameters(rcctp);
83 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
85 arcp.init("RestClientConsumer", producerParameters);
86 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
87 fail("test should throw an exception here");
88 } catch (ApexEventException e) {
89 assertEquals("specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\" and \"PUT\" "
90 + "are supproted for event sending on REST client producer (RestClientConsumer)", e.getMessage());
93 rcctp.setHttpMethod(null);
95 arcp.init("RestClientConsumer", producerParameters);
96 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
98 assertEquals("RestClientConsumer", arcp.getName());
100 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
101 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
104 } catch (ApexEventException e) {
105 fail("test should not throw an exception");
108 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
110 arcp.init("RestClientConsumer", producerParameters);
111 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
113 assertEquals("RestClientConsumer", arcp.getName());
115 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
116 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
119 } catch (ApexEventException e) {
120 fail("test should not throw an exception");
123 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
125 arcp.init("RestClientConsumer", producerParameters);
126 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
128 assertEquals("RestClientConsumer", arcp.getName());
130 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
131 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
134 } catch (ApexEventException e) {
135 fail("test should not throw an exception");
140 public void testApexRestClientProducerPutEvent() {
141 MockitoAnnotations.initMocks(this);
143 ApexRestClientProducer arcp = new ApexRestClientProducer();
146 EventHandlerParameters producerParameters = new EventHandlerParameters();
147 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
148 producerParameters.setCarrierTechnologyParameters(rcctp);
150 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
152 arcp.init("RestClientConsumer", producerParameters);
153 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
155 assertEquals("RestClientConsumer", arcp.getName());
156 } catch (ApexEventException e) {
157 fail("test should not throw an exception");
160 rcctp.setUrl("http://some.place.that.does.not/exist");
161 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
162 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
163 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
164 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
165 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
166 arcp.setClient(httpClientMock);
169 arcp.sendEvent(123, "EventName", "This is an Event");
171 } catch (Exception ex) {
172 fail("test should not throw an exception");
177 public void testApexRestClientProducerPostEvent() {
178 MockitoAnnotations.initMocks(this);
180 ApexRestClientProducer arcp = new ApexRestClientProducer();
183 EventHandlerParameters producerParameters = new EventHandlerParameters();
184 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
185 producerParameters.setCarrierTechnologyParameters(rcctp);
187 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
189 arcp.init("RestClientConsumer", producerParameters);
190 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
192 assertEquals("RestClientConsumer", arcp.getName());
193 } catch (ApexEventException e) {
194 fail("test should not throw an exception");
197 rcctp.setUrl("http://some.place.that.does.not/exist");
198 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
199 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
200 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
201 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
202 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
203 arcp.setClient(httpClientMock);
206 arcp.sendEvent(123, "EventName", "This is an Event");
208 } catch (Exception e) {
209 fail("test should not throw an exception");
214 public void testApexRestClientProducerPostEventCache() {
215 MockitoAnnotations.initMocks(this);
217 ApexRestClientProducer arcp = new ApexRestClientProducer();
220 EventHandlerParameters producerParameters = new EventHandlerParameters();
221 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
222 producerParameters.setCarrierTechnologyParameters(rcctp);
224 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
226 ApexEventConsumer consumer = new ApexFileEventConsumer();
227 SynchronousEventCache cache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp,
229 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
230 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
232 arcp.init("RestClientConsumer", producerParameters);
233 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
235 assertEquals("RestClientConsumer", arcp.getName());
236 } catch (ApexEventException e) {
237 fail("test should not throw an exception");
240 rcctp.setUrl("http://some.place.that.does.not/exist");
241 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
242 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
243 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
244 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
245 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
246 arcp.setClient(httpClientMock);
249 arcp.sendEvent(123, "EventName", "This is an Event");
251 } catch (Exception e) {
252 fail("test should not throw an exception");
257 public void testApexRestClientProducerPostEventCacheTrace() {
258 MockitoAnnotations.initMocks(this);
260 ch.qos.logback.classic.Logger classicLogger = (ch.qos.logback.classic.Logger) LOGGER;
261 classicLogger.setLevel(Level.TRACE);
263 ApexRestClientProducer arcp = new ApexRestClientProducer();
266 EventHandlerParameters producerParameters = new EventHandlerParameters();
267 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
268 producerParameters.setCarrierTechnologyParameters(rcctp);
270 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
272 ApexEventConsumer consumer = new ApexFileEventConsumer();
273 SynchronousEventCache cache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp,
275 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
276 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
278 arcp.init("RestClientConsumer", producerParameters);
279 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
281 assertEquals("RestClientConsumer", arcp.getName());
282 } catch (ApexEventException e) {
283 fail("test should not throw an exception");
286 rcctp.setUrl("http://some.place.that.does.not/exist");
287 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
288 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
289 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
290 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
291 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
292 arcp.setClient(httpClientMock);
295 arcp.sendEvent(123, "EventName", "This is an Event");
297 } catch (Exception e) {
298 fail("test should not throw an exception");
303 public void testApexRestClientProducerHttpError() {
304 MockitoAnnotations.initMocks(this);
306 ApexRestClientProducer arcp = new ApexRestClientProducer();
309 EventHandlerParameters producerParameters = new EventHandlerParameters();
310 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
311 producerParameters.setCarrierTechnologyParameters(rcctp);
313 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
315 arcp.init("RestClientConsumer", producerParameters);
316 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
318 assertEquals("RestClientConsumer", arcp.getName());
319 } catch (ApexEventException e) {
320 fail("test should not throw an exception");
323 rcctp.setUrl("http://some.place.that.does.not/exist");
324 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
325 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
326 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
327 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
328 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
329 arcp.setClient(httpClientMock);
332 arcp.sendEvent(123, "EventName", "This is an Event");
333 fail("test should throw an exception here");
334 } catch (Exception e) {
336 "send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
337 + "failed with status code 400 and message \"null\", event:\n" + "This is an Event",