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 java.util.Properties;
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.Test;
38 import org.mockito.Mock;
39 import org.mockito.Mockito;
40 import org.mockito.MockitoAnnotations;
41 import org.onap.policy.apex.service.engine.event.ApexEventConsumer;
42 import org.onap.policy.apex.service.engine.event.ApexEventException;
43 import org.onap.policy.apex.service.engine.event.SynchronousEventCache;
44 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer;
45 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
46 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
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) {
92 assertEquals("specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\" and \"PUT\" "
93 + "are supproted for event sending on REST client producer (RestClientConsumer)", e.getMessage());
96 rcctp.setHttpMethod(null);
97 arcp.init("RestClientConsumer", producerParameters);
98 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
99 assertEquals("RestClientConsumer", arcp.getName());
100 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
101 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
104 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
105 arcp.init("RestClientConsumer", producerParameters);
106 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
107 assertEquals("RestClientConsumer", arcp.getName());
108 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
109 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
113 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
114 arcp.init("RestClientConsumer", producerParameters);
115 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
116 assertEquals("RestClientConsumer", arcp.getName());
117 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
118 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
123 public void testApexRestClientProducerPutEvent() throws ApexEventException {
124 MockitoAnnotations.initMocks(this);
126 ApexRestClientProducer arcp = new ApexRestClientProducer();
129 EventHandlerParameters producerParameters = new EventHandlerParameters();
130 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
131 producerParameters.setCarrierTechnologyParameters(rcctp);
133 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
134 arcp.init("RestClientConsumer", producerParameters);
135 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
136 assertEquals("RestClientConsumer", arcp.getName());
138 rcctp.setUrl("http://some.place.that.does.not/exist");
139 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
140 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
141 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
142 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
143 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
144 arcp.setClient(httpClientMock);
146 arcp.sendEvent(123, null, "EventName", "This is an Event");
151 public void testApexRestClientProducerPostEventFail() throws ApexEventException {
152 MockitoAnnotations.initMocks(this);
154 ApexRestClientProducer arcp = new ApexRestClientProducer();
157 EventHandlerParameters producerParameters = new EventHandlerParameters();
158 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
159 producerParameters.setCarrierTechnologyParameters(rcctp);
161 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
162 arcp.init("RestClientConsumer", producerParameters);
163 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
164 assertEquals("RestClientConsumer", arcp.getName());
166 rcctp.setUrl("http://some.place.that.does.not/exist");
167 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
168 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
169 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
170 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
171 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
172 arcp.setClient(httpClientMock);
174 //test property not found
175 rcctp.setUrl("http://some.place2.that.{key}.not/{tag}and.again.{tag}");
176 Properties properties = new Properties();
177 properties.put("tag", "exist");
179 arcp.sendEvent(123, properties, "EventName", "This is an Event");
181 fail("test should throw an exception");
182 } catch (Exception e) {
184 "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",
192 public void testApexRestClientProducerPostEventOK() throws ApexEventException {
193 MockitoAnnotations.initMocks(this);
195 ApexRestClientProducer arcp = new ApexRestClientProducer();
198 EventHandlerParameters producerParameters = new EventHandlerParameters();
199 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
200 producerParameters.setCarrierTechnologyParameters(rcctp);
202 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
203 arcp.init("RestClientConsumer", producerParameters);
204 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
205 assertEquals("RestClientConsumer", arcp.getName());
207 System.out.println("fail test");
208 rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
209 Properties properties = new Properties();
210 properties.put("tag", "exist");
211 properties.put("key", "that");
212 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
213 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
214 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
215 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
216 Mockito.doReturn(targetMock).when(httpClientMock).target("http://some.place.that.does.not/exist");
217 arcp.setClient(httpClientMock);
219 arcp.sendEvent(123, properties, "EventName", "This is an Event");
224 public void testApexRestClientProducerPostEventCache() throws ApexEventException {
225 MockitoAnnotations.initMocks(this);
227 ApexRestClientProducer arcp = new ApexRestClientProducer();
230 EventHandlerParameters producerParameters = new EventHandlerParameters();
231 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
232 producerParameters.setCarrierTechnologyParameters(rcctp);
234 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
236 ApexEventConsumer consumer = new ApexFileEventConsumer();
237 SynchronousEventCache cache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp,
239 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
240 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
241 arcp.init("RestClientConsumer", producerParameters);
242 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
243 assertEquals("RestClientConsumer", arcp.getName());
245 rcctp.setUrl("http://some.place.that.does.not/exist");
246 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
247 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
248 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
249 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
250 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
251 arcp.setClient(httpClientMock);
253 arcp.sendEvent(123, null, "EventName", "This is an Event");
258 public void testApexRestClientProducerPostEventCacheTrace() throws ApexEventException {
259 MockitoAnnotations.initMocks(this);
261 ch.qos.logback.classic.Logger classicLogger = (ch.qos.logback.classic.Logger) LOGGER;
262 classicLogger.setLevel(Level.TRACE);
264 ApexRestClientProducer arcp = new ApexRestClientProducer();
267 EventHandlerParameters producerParameters = new EventHandlerParameters();
268 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
269 producerParameters.setCarrierTechnologyParameters(rcctp);
271 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
273 ApexEventConsumer consumer = new ApexFileEventConsumer();
274 SynchronousEventCache cache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp,
276 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
277 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
278 arcp.init("RestClientConsumer", producerParameters);
279 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
280 assertEquals("RestClientConsumer", arcp.getName());
282 rcctp.setUrl("http://some.place.that.does.not/exist");
283 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
284 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
285 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
286 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
287 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
288 arcp.setClient(httpClientMock);
290 arcp.sendEvent(123, null, "EventName", "This is an Event");
295 public void testApexRestClientProducerHttpError() throws ApexEventException {
296 MockitoAnnotations.initMocks(this);
298 ApexRestClientProducer arcp = new ApexRestClientProducer();
301 EventHandlerParameters producerParameters = new EventHandlerParameters();
302 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
303 producerParameters.setCarrierTechnologyParameters(rcctp);
305 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
306 arcp.init("RestClientConsumer", producerParameters);
307 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
308 assertEquals("RestClientConsumer", arcp.getName());
310 rcctp.setUrl("http://some.place.that.does.not/exist");
311 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
312 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
313 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
314 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
315 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
316 arcp.setClient(httpClientMock);
319 arcp.sendEvent(123, null, "EventName", "This is an Event");
320 fail("test should throw an exception here");
321 } catch (Exception e) {
323 "send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
324 + "failed with status code 400 and message \"null\", event:\n" + "This is an Event",