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
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 java.util.Properties;
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.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
48 import ch.qos.logback.classic.Level;
51 * Test the ApexRestClientProducer class.
54 public class ApexRestClientProducerTest {
55 private static final Logger LOGGER = LoggerFactory.getLogger(ApexRestClientProducer.class);
58 private Client httpClientMock;
61 private WebTarget targetMock;
64 private Builder builderMock;
67 private Response responseMock;
70 public void testApexRestClientProducerErrors() throws ApexEventException {
71 ApexRestClientProducer arcp = new ApexRestClientProducer();
74 EventHandlerParameters producerParameters = new EventHandlerParameters();
76 arcp.init("RestClientProducer", producerParameters);
77 fail("test should throw an exception here");
78 } catch (ApexEventException e) {
80 "specified producer properties are not applicable to REST client producer (RestClientProducer)",
84 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
85 producerParameters.setCarrierTechnologyParameters(rcctp);
86 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
88 arcp.init("RestClientConsumer", producerParameters);
89 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
90 fail("test should throw an exception here");
91 } catch (ApexEventException e) {
93 "specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\" and \"PUT\" "
94 + "are supported for event sending on REST client producer (RestClientConsumer)",
98 rcctp.setHttpMethod(null);
99 arcp.init("RestClientConsumer", producerParameters);
100 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
101 assertEquals("RestClientConsumer", arcp.getName());
102 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
103 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
106 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
107 arcp.init("RestClientConsumer", producerParameters);
108 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
109 assertEquals("RestClientConsumer", arcp.getName());
110 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
111 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
114 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
115 arcp.init("RestClientConsumer", producerParameters);
116 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
117 assertEquals("RestClientConsumer", arcp.getName());
118 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
119 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
124 public void testApexRestClientProducerPutEvent() throws ApexEventException {
125 MockitoAnnotations.initMocks(this);
127 ApexRestClientProducer arcp = new ApexRestClientProducer();
130 EventHandlerParameters producerParameters = new EventHandlerParameters();
131 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
132 producerParameters.setCarrierTechnologyParameters(rcctp);
134 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
135 arcp.init("RestClientConsumer", producerParameters);
136 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
137 assertEquals("RestClientConsumer", arcp.getName());
139 rcctp.setUrl("http://some.place.that.does.not/exist");
140 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
141 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
142 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
143 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
144 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
145 arcp.setClient(httpClientMock);
147 arcp.sendEvent(123, null, "EventName", "This is an Event");
152 public void testApexRestClientProducerPostEventFail() throws ApexEventException {
153 MockitoAnnotations.initMocks(this);
155 ApexRestClientProducer arcp = new ApexRestClientProducer();
158 EventHandlerParameters producerParameters = new EventHandlerParameters();
159 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
160 producerParameters.setCarrierTechnologyParameters(rcctp);
162 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
163 arcp.init("RestClientConsumer", producerParameters);
164 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
165 assertEquals("RestClientConsumer", arcp.getName());
167 rcctp.setUrl("http://some.place.that.does.not/exist");
168 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
169 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
170 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
171 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
172 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
173 arcp.setClient(httpClientMock);
175 // test property not found
176 rcctp.setUrl("http://some.place2.that.{key}.not/{tag}and.again.{tag}");
177 Properties properties = new Properties();
178 properties.put("tag", "exist");
180 arcp.sendEvent(123, properties, "EventName", "This is an Event");
182 fail("test should throw an exception");
183 } catch (Exception e) {
184 assertEquals("key \"key\" specified on url "
185 + "\"http://some.place2.that.{key}.not/{tag}and.again.{tag}\" not found "
186 + "in execution properties passed by the current policy", e.getMessage());
191 public void testApexRestClientProducerPostEventOK() throws ApexEventException {
192 MockitoAnnotations.initMocks(this);
194 ApexRestClientProducer arcp = new ApexRestClientProducer();
197 EventHandlerParameters producerParameters = new EventHandlerParameters();
198 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
199 producerParameters.setCarrierTechnologyParameters(rcctp);
201 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
202 arcp.init("RestClientConsumer", producerParameters);
203 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
204 assertEquals("RestClientConsumer", arcp.getName());
206 System.out.println("fail test");
207 rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
208 Properties properties = new Properties();
209 properties.put("tag", "exist");
210 properties.put("key", "that");
211 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
212 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
213 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
214 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
215 Mockito.doReturn(targetMock).when(httpClientMock).target("http://some.place.that.does.not/exist");
216 arcp.setClient(httpClientMock);
218 arcp.sendEvent(123, properties, "EventName", "This is an Event");
223 public void testApexRestClientProducerPostEventCache() throws ApexEventException {
224 MockitoAnnotations.initMocks(this);
226 ApexRestClientProducer arcp = new ApexRestClientProducer();
229 EventHandlerParameters producerParameters = new EventHandlerParameters();
230 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
231 producerParameters.setCarrierTechnologyParameters(rcctp);
233 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
235 ApexEventConsumer consumer = new ApexFileEventConsumer();
236 SynchronousEventCache cache =
237 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
238 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
239 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
240 arcp.init("RestClientConsumer", producerParameters);
241 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
242 assertEquals("RestClientConsumer", arcp.getName());
244 rcctp.setUrl("http://some.place.that.does.not/exist");
245 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
246 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
247 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
248 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
249 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
250 arcp.setClient(httpClientMock);
252 arcp.sendEvent(123, null, "EventName", "This is an Event");
257 public void testApexRestClientProducerPostEventCacheTrace() throws ApexEventException {
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 =
274 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
275 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
276 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
277 arcp.init("RestClientConsumer", producerParameters);
278 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
279 assertEquals("RestClientConsumer", arcp.getName());
281 rcctp.setUrl("http://some.place.that.does.not/exist");
282 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
283 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
284 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
285 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
286 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
287 arcp.setClient(httpClientMock);
289 arcp.sendEvent(123, null, "EventName", "This is an Event");
294 public void testApexRestClientProducerHttpError() throws ApexEventException {
295 MockitoAnnotations.initMocks(this);
297 ApexRestClientProducer arcp = new ApexRestClientProducer();
300 EventHandlerParameters producerParameters = new EventHandlerParameters();
301 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
302 producerParameters.setCarrierTechnologyParameters(rcctp);
304 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
305 arcp.init("RestClientConsumer", producerParameters);
306 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
307 assertEquals("RestClientConsumer", arcp.getName());
309 rcctp.setUrl("http://some.place.that.does.not/exist");
310 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
311 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
312 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
313 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
314 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
315 arcp.setClient(httpClientMock);
318 arcp.sendEvent(123, null, "EventName", "This is an Event");
319 fail("test should throw an exception here");
320 } catch (Exception e) {
322 "send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
323 + "failed with status code 400 and message \"null\", event:\n" + "This is an Event",