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.fail;
28 import ch.qos.logback.classic.Level;
30 import javax.ws.rs.client.Client;
31 import javax.ws.rs.client.Invocation.Builder;
32 import javax.ws.rs.client.WebTarget;
33 import javax.ws.rs.core.Response;
35 import org.junit.Test;
36 import org.mockito.Mock;
37 import org.mockito.Mockito;
38 import org.mockito.MockitoAnnotations;
39 import org.onap.policy.apex.service.engine.event.ApexEventConsumer;
40 import org.onap.policy.apex.service.engine.event.ApexEventException;
41 import org.onap.policy.apex.service.engine.event.SynchronousEventCache;
42 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer;
43 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
44 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
45 import org.onap.policy.common.parameters.GroupValidationResult;
46 import org.onap.policy.common.parameters.ParameterException;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
50 import java.util.Properties;
53 * Test the ApexRestClientProducer class.
56 public class ApexRestClientProducerTest {
57 private static final Logger LOGGER = LoggerFactory.getLogger(ApexRestClientProducer.class);
60 private Client httpClientMock;
63 private WebTarget targetMock;
66 private Builder builderMock;
69 private Response responseMock;
72 public void testApexRestClientProducerErrors() {
73 ApexRestClientProducer arcp = new ApexRestClientProducer();
76 EventHandlerParameters producerParameters = new EventHandlerParameters();
78 arcp.init("RestClientProducer", producerParameters);
79 fail("test should throw an exception here");
80 } catch (ApexEventException e) {
82 "specified producer properties are not applicable to REST client producer (RestClientProducer)",
86 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
87 producerParameters.setCarrierTechnologyParameters(rcctp);
88 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
90 arcp.init("RestClientConsumer", producerParameters);
91 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
92 fail("test should throw an exception here");
93 } catch (ApexEventException e) {
94 assertEquals("specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\" and \"PUT\" "
95 + "are supproted for event sending on REST client producer (RestClientConsumer)", e.getMessage());
98 rcctp.setHttpMethod(null);
100 arcp.init("RestClientConsumer", producerParameters);
101 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
103 assertEquals("RestClientConsumer", arcp.getName());
105 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
106 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
109 } catch (ApexEventException e) {
110 fail("test should not throw an exception");
113 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
115 arcp.init("RestClientConsumer", producerParameters);
116 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
118 assertEquals("RestClientConsumer", arcp.getName());
120 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
121 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
124 } catch (ApexEventException e) {
125 fail("test should not throw an exception");
128 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
130 arcp.init("RestClientConsumer", producerParameters);
131 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
133 assertEquals("RestClientConsumer", arcp.getName());
135 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
136 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
139 } catch (ApexEventException e) {
140 fail("test should not throw an exception");
145 public void testApexRestClientProducerPutEvent() {
146 MockitoAnnotations.initMocks(this);
148 ApexRestClientProducer arcp = new ApexRestClientProducer();
151 EventHandlerParameters producerParameters = new EventHandlerParameters();
152 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
153 producerParameters.setCarrierTechnologyParameters(rcctp);
155 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
157 arcp.init("RestClientConsumer", producerParameters);
158 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
160 assertEquals("RestClientConsumer", arcp.getName());
161 } catch (ApexEventException e) {
162 fail("test should not throw an exception");
165 rcctp.setUrl("http://some.place.that.does.not/exist");
166 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
167 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
168 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
169 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
170 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
171 arcp.setClient(httpClientMock);
174 arcp.sendEvent(123, null, "EventName", "This is an Event");
176 } catch (Exception ex) {
177 fail("test should not throw an exception");
182 public void testApexRestClientProducerPostEventFail() {
183 MockitoAnnotations.initMocks(this);
185 ApexRestClientProducer arcp = new ApexRestClientProducer();
188 EventHandlerParameters producerParameters = new EventHandlerParameters();
189 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
190 producerParameters.setCarrierTechnologyParameters(rcctp);
192 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
194 arcp.init("RestClientConsumer", producerParameters);
195 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
197 assertEquals("RestClientConsumer", arcp.getName());
198 } catch (ApexEventException e) {
199 fail("test should not throw an exception");
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).post(Mockito.any());
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 arcp.setClient(httpClientMock);
210 //test property not found
211 rcctp.setUrl("http://some.place2.that.{key}.not/{tag}and.again.{tag}");
212 Properties properties = new Properties();
213 properties.put("tag", "exist");
215 arcp.sendEvent(123, properties, "EventName", "This is an Event");
217 fail("test should throw an exception");
218 } catch (Exception e) {
220 "key\"key\"specified on url "
221 + "\"http://some.place2.that.{key}.not/{tag}and.again.{tag}\"not found "
222 + "in execution properties passed by the current policy",
228 public void testApexRestClientProducerPostEventOK() {
229 MockitoAnnotations.initMocks(this);
231 ApexRestClientProducer arcp = new ApexRestClientProducer();
234 EventHandlerParameters producerParameters = new EventHandlerParameters();
235 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
236 producerParameters.setCarrierTechnologyParameters(rcctp);
238 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
240 arcp.init("RestClientConsumer", producerParameters);
241 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
243 assertEquals("RestClientConsumer", arcp.getName());
244 } catch (ApexEventException e) {
245 fail("test should not throw an exception");
248 System.out.println("fail test");
249 rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
250 Properties properties = new Properties();
251 properties.put("tag", "exist");
252 properties.put("key", "that");
253 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
254 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
255 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
256 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
257 Mockito.doReturn(targetMock).when(httpClientMock).target("http://some.place.that.does.not/exist");
258 arcp.setClient(httpClientMock);
261 arcp.sendEvent(123, properties, "EventName", "This is an Event");
263 } catch (Exception ex) {
264 fail("test should not throw an exception");
269 public void testApexRestClientProducerPostEventCache() {
270 MockitoAnnotations.initMocks(this);
272 ApexRestClientProducer arcp = new ApexRestClientProducer();
275 EventHandlerParameters producerParameters = new EventHandlerParameters();
276 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
277 producerParameters.setCarrierTechnologyParameters(rcctp);
279 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
281 ApexEventConsumer consumer = new ApexFileEventConsumer();
282 SynchronousEventCache cache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp,
284 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
285 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
287 arcp.init("RestClientConsumer", producerParameters);
288 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
290 assertEquals("RestClientConsumer", arcp.getName());
291 } catch (ApexEventException e) {
292 fail("test should not throw an exception");
295 rcctp.setUrl("http://some.place.that.does.not/exist");
296 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
297 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
298 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
299 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
300 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
301 arcp.setClient(httpClientMock);
304 arcp.sendEvent(123, null, "EventName", "This is an Event");
306 } catch (Exception e) {
307 fail("test should not throw an exception");
312 public void testApexRestClientProducerPostEventCacheTrace() {
313 MockitoAnnotations.initMocks(this);
315 ch.qos.logback.classic.Logger classicLogger = (ch.qos.logback.classic.Logger) LOGGER;
316 classicLogger.setLevel(Level.TRACE);
318 ApexRestClientProducer arcp = new ApexRestClientProducer();
321 EventHandlerParameters producerParameters = new EventHandlerParameters();
322 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
323 producerParameters.setCarrierTechnologyParameters(rcctp);
325 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
327 ApexEventConsumer consumer = new ApexFileEventConsumer();
328 SynchronousEventCache cache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp,
330 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
331 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
333 arcp.init("RestClientConsumer", producerParameters);
334 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
336 assertEquals("RestClientConsumer", arcp.getName());
337 } catch (ApexEventException e) {
338 fail("test should not throw an exception");
341 rcctp.setUrl("http://some.place.that.does.not/exist");
342 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
343 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
344 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
345 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
346 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
347 arcp.setClient(httpClientMock);
350 arcp.sendEvent(123, null, "EventName", "This is an Event");
352 } catch (Exception e) {
353 fail("test should not throw an exception");
358 public void testApexRestClientProducerHttpError() {
359 MockitoAnnotations.initMocks(this);
361 ApexRestClientProducer arcp = new ApexRestClientProducer();
364 EventHandlerParameters producerParameters = new EventHandlerParameters();
365 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
366 producerParameters.setCarrierTechnologyParameters(rcctp);
368 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
370 arcp.init("RestClientConsumer", producerParameters);
371 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
373 assertEquals("RestClientConsumer", arcp.getName());
374 } catch (ApexEventException e) {
375 fail("test should not throw an exception");
378 rcctp.setUrl("http://some.place.that.does.not/exist");
379 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
380 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
381 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
382 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
383 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
384 arcp.setClient(httpClientMock);
387 arcp.sendEvent(123, null, "EventName", "This is an Event");
388 fail("test should throw an exception here");
389 } catch (Exception e) {
391 "send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
392 + "failed with status code 400 and message \"null\", event:\n" + "This is an Event",