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;
47 * Test the ApexRestClientProducer class.
50 public class ApexRestClientProducerTest {
52 private Client httpClientMock;
55 private WebTarget targetMock;
58 private Builder builderMock;
61 private Response responseMock;
64 public void testApexRestClientProducerErrors() throws ApexEventException {
65 ApexRestClientProducer arcp = new ApexRestClientProducer();
68 EventHandlerParameters producerParameters = new EventHandlerParameters();
70 arcp.init("RestClientProducer", producerParameters);
71 fail("test should throw an exception here");
72 } catch (ApexEventException e) {
74 "specified producer properties are not applicable to REST client producer (RestClientProducer)",
78 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
79 producerParameters.setCarrierTechnologyParameters(rcctp);
80 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
82 arcp.init("RestClientConsumer", producerParameters);
83 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
84 fail("test should throw an exception here");
85 } catch (ApexEventException e) {
87 "specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\" and \"PUT\" "
88 + "are supported for event sending on REST client producer (RestClientConsumer)",
92 rcctp.setHttpMethod(null);
93 arcp.init("RestClientConsumer", producerParameters);
94 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
95 assertEquals("RestClientConsumer", arcp.getName());
96 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
97 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
100 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
101 arcp.init("RestClientConsumer", producerParameters);
102 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
103 assertEquals("RestClientConsumer", arcp.getName());
104 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
105 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
108 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
109 arcp.init("RestClientConsumer", producerParameters);
110 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
111 assertEquals("RestClientConsumer", arcp.getName());
112 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
113 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
118 public void testApexRestClientProducerPutEvent() throws ApexEventException {
119 MockitoAnnotations.initMocks(this);
121 ApexRestClientProducer arcp = new ApexRestClientProducer();
124 EventHandlerParameters producerParameters = new EventHandlerParameters();
125 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
126 producerParameters.setCarrierTechnologyParameters(rcctp);
128 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
129 arcp.init("RestClientConsumer", producerParameters);
130 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
131 assertEquals("RestClientConsumer", arcp.getName());
133 rcctp.setUrl("http://some.place.that.does.not/exist");
134 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
135 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
136 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
137 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
138 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
139 arcp.setClient(httpClientMock);
141 arcp.sendEvent(123, null, "EventName", "This is an Event");
146 public void testApexRestClientProducerPostEventFail() throws ApexEventException {
147 MockitoAnnotations.initMocks(this);
149 ApexRestClientProducer arcp = new ApexRestClientProducer();
152 EventHandlerParameters producerParameters = new EventHandlerParameters();
153 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
154 producerParameters.setCarrierTechnologyParameters(rcctp);
156 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
157 arcp.init("RestClientConsumer", producerParameters);
158 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
159 assertEquals("RestClientConsumer", arcp.getName());
161 rcctp.setUrl("http://some.place.that.does.not/exist");
162 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
163 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
164 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
165 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
166 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
167 arcp.setClient(httpClientMock);
169 // test property not found
170 rcctp.setUrl("http://some.place2.that.{key}.not/{tag}and.again.{tag}");
171 Properties properties = new Properties();
172 properties.put("tag", "exist");
174 arcp.sendEvent(123, properties, "EventName", "This is an Event");
176 fail("test should throw an exception");
177 } catch (Exception e) {
178 assertEquals("key \"key\" specified on url "
179 + "\"http://some.place2.that.{key}.not/{tag}and.again.{tag}\" not found "
180 + "in execution properties passed by the current policy", e.getMessage());
185 public void testApexRestClientProducerPostEventOK() throws ApexEventException {
186 MockitoAnnotations.initMocks(this);
188 ApexRestClientProducer arcp = new ApexRestClientProducer();
191 EventHandlerParameters producerParameters = new EventHandlerParameters();
192 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
193 producerParameters.setCarrierTechnologyParameters(rcctp);
195 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
196 arcp.init("RestClientConsumer", producerParameters);
197 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
198 assertEquals("RestClientConsumer", arcp.getName());
200 System.out.println("fail test");
201 rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
202 Properties properties = new Properties();
203 properties.put("tag", "exist");
204 properties.put("key", "that");
205 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
206 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
207 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
208 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
209 Mockito.doReturn(targetMock).when(httpClientMock).target("http://some.place.that.does.not/exist");
210 arcp.setClient(httpClientMock);
212 arcp.sendEvent(123, properties, "EventName", "This is an Event");
217 public void testApexRestClientProducerPostEventCache() throws ApexEventException {
218 MockitoAnnotations.initMocks(this);
220 ApexRestClientProducer arcp = new ApexRestClientProducer();
223 EventHandlerParameters producerParameters = new EventHandlerParameters();
224 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
225 producerParameters.setCarrierTechnologyParameters(rcctp);
227 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
229 ApexEventConsumer consumer = new ApexFileEventConsumer();
230 SynchronousEventCache cache =
231 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
232 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
233 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
234 arcp.init("RestClientConsumer", producerParameters);
235 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
236 assertEquals("RestClientConsumer", arcp.getName());
238 rcctp.setUrl("http://some.place.that.does.not/exist");
239 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
240 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
241 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
242 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
243 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
244 arcp.setClient(httpClientMock);
246 arcp.sendEvent(123, null, "EventName", "This is an Event");
251 public void testApexRestClientProducerPostEventCacheTrace() throws ApexEventException {
252 MockitoAnnotations.initMocks(this);
254 ApexRestClientProducer arcp = new ApexRestClientProducer();
257 EventHandlerParameters producerParameters = new EventHandlerParameters();
258 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
259 producerParameters.setCarrierTechnologyParameters(rcctp);
261 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
263 ApexEventConsumer consumer = new ApexFileEventConsumer();
264 SynchronousEventCache cache =
265 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
266 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
267 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
268 arcp.init("RestClientConsumer", producerParameters);
269 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
270 assertEquals("RestClientConsumer", arcp.getName());
272 rcctp.setUrl("http://some.place.that.does.not/exist");
273 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
274 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
275 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
276 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
277 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
278 arcp.setClient(httpClientMock);
280 arcp.sendEvent(123, null, "EventName", "This is an Event");
285 public void testApexRestClientProducerHttpError() throws ApexEventException {
286 MockitoAnnotations.initMocks(this);
288 ApexRestClientProducer arcp = new ApexRestClientProducer();
291 EventHandlerParameters producerParameters = new EventHandlerParameters();
292 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
293 producerParameters.setCarrierTechnologyParameters(rcctp);
295 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
296 arcp.init("RestClientConsumer", producerParameters);
297 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
298 assertEquals("RestClientConsumer", arcp.getName());
300 rcctp.setUrl("http://some.place.that.does.not/exist");
301 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
302 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
303 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
304 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
305 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
306 arcp.setClient(httpClientMock);
309 arcp.sendEvent(123, null, "EventName", "This is an Event");
310 fail("test should throw an exception here");
311 } catch (Exception e) {
313 "send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
314 + "failed with status code 400 and message \"null\", event:\n" + "This is an Event",