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;
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;
33 import org.junit.Test;
34 import org.mockito.Mock;
35 import org.mockito.Mockito;
36 import org.mockito.MockitoAnnotations;
37 import org.onap.policy.apex.service.engine.event.ApexEventConsumer;
38 import org.onap.policy.apex.service.engine.event.ApexEventException;
39 import org.onap.policy.apex.service.engine.event.SynchronousEventCache;
40 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer;
41 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
42 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
45 * Test the ApexRestClientProducer class.
48 public class ApexRestClientProducerTest {
50 private Client httpClientMock;
53 private WebTarget targetMock;
56 private Builder builderMock;
59 private Response responseMock;
62 public void testApexRestClientProducerErrors() throws ApexEventException {
63 ApexRestClientProducer arcp = new ApexRestClientProducer();
66 EventHandlerParameters producerParameters = new EventHandlerParameters();
68 arcp.init("RestClientProducer", producerParameters);
69 fail("test should throw an exception here");
70 } catch (ApexEventException e) {
72 "specified producer properties are not applicable to REST client producer (RestClientProducer)",
76 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
77 producerParameters.setCarrierTechnologyParameters(rcctp);
78 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
80 arcp.init("RestClientConsumer", producerParameters);
81 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
82 fail("test should throw an exception here");
83 } catch (ApexEventException e) {
85 "specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\" and \"PUT\" "
86 + "are supported for event sending on REST client producer (RestClientConsumer)",
90 rcctp.setHttpMethod(null);
91 arcp.init("RestClientConsumer", producerParameters);
92 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
93 assertEquals("RestClientConsumer", arcp.getName());
94 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
95 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
98 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
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.PUT);
107 arcp.init("RestClientConsumer", producerParameters);
108 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
109 assertEquals("RestClientConsumer", arcp.getName());
110 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
111 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
116 public void testApexRestClientProducerPutEvent() throws ApexEventException {
117 MockitoAnnotations.initMocks(this);
119 ApexRestClientProducer arcp = new ApexRestClientProducer();
122 EventHandlerParameters producerParameters = new EventHandlerParameters();
123 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
124 producerParameters.setCarrierTechnologyParameters(rcctp);
126 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
127 arcp.init("RestClientConsumer", producerParameters);
128 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
129 assertEquals("RestClientConsumer", arcp.getName());
131 rcctp.setUrl("http://some.place.that.does.not/exist");
132 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
133 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
134 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
135 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
136 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
137 arcp.setClient(httpClientMock);
139 arcp.sendEvent(123, null, "EventName", "This is an Event");
144 public void testApexRestClientProducerPostEventFail() throws ApexEventException {
145 MockitoAnnotations.initMocks(this);
147 ApexRestClientProducer arcp = new ApexRestClientProducer();
150 EventHandlerParameters producerParameters = new EventHandlerParameters();
151 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
152 producerParameters.setCarrierTechnologyParameters(rcctp);
154 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
155 arcp.init("RestClientConsumer", producerParameters);
156 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
157 assertEquals("RestClientConsumer", arcp.getName());
159 rcctp.setUrl("http://some.place.that.does.not/exist");
160 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
161 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
162 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
163 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
164 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
165 arcp.setClient(httpClientMock);
167 // test property not found
168 rcctp.setUrl("http://some.place2.that.{key}.not/{tag}and.again.{tag}");
169 Properties properties = new Properties();
170 properties.put("tag", "exist");
172 arcp.sendEvent(123, properties, "EventName", "This is an Event");
174 fail("test should throw an exception");
175 } catch (Exception e) {
176 assertEquals("key \"key\" specified on url "
177 + "\"http://some.place2.that.{key}.not/{tag}and.again.{tag}\" not found "
178 + "in execution properties passed by the current policy", e.getMessage());
183 public void testApexRestClientProducerPostEventOK() throws ApexEventException {
184 MockitoAnnotations.initMocks(this);
186 ApexRestClientProducer arcp = new ApexRestClientProducer();
189 EventHandlerParameters producerParameters = new EventHandlerParameters();
190 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
191 producerParameters.setCarrierTechnologyParameters(rcctp);
193 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
194 arcp.init("RestClientConsumer", producerParameters);
195 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
196 assertEquals("RestClientConsumer", arcp.getName());
198 System.out.println("fail test");
199 rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
200 Properties properties = new Properties();
201 properties.put("tag", "exist");
202 properties.put("key", "that");
203 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
204 Mockito.doReturn(responseMock).when(builderMock).put(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("http://some.place.that.does.not/exist");
208 arcp.setClient(httpClientMock);
210 arcp.sendEvent(123, properties, "EventName", "This is an Event");
215 public void testApexRestClientProducerPostEventCache() throws ApexEventException {
216 MockitoAnnotations.initMocks(this);
218 ApexRestClientProducer arcp = new ApexRestClientProducer();
221 EventHandlerParameters producerParameters = new EventHandlerParameters();
222 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
223 producerParameters.setCarrierTechnologyParameters(rcctp);
225 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
227 ApexEventConsumer consumer = new ApexFileEventConsumer();
228 SynchronousEventCache cache =
229 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
230 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
231 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
232 arcp.init("RestClientConsumer", producerParameters);
233 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
234 assertEquals("RestClientConsumer", arcp.getName());
236 rcctp.setUrl("http://some.place.that.does.not/exist");
237 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
238 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
239 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
240 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
241 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
242 arcp.setClient(httpClientMock);
244 arcp.sendEvent(123, null, "EventName", "This is an Event");
249 public void testApexRestClientProducerPostEventCacheTrace() throws ApexEventException {
250 MockitoAnnotations.initMocks(this);
252 ApexRestClientProducer arcp = new ApexRestClientProducer();
255 EventHandlerParameters producerParameters = new EventHandlerParameters();
256 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
257 producerParameters.setCarrierTechnologyParameters(rcctp);
259 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
261 ApexEventConsumer consumer = new ApexFileEventConsumer();
262 SynchronousEventCache cache =
263 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
264 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
265 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
266 arcp.init("RestClientConsumer", producerParameters);
267 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
268 assertEquals("RestClientConsumer", arcp.getName());
270 rcctp.setUrl("http://some.place.that.does.not/exist");
271 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
272 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
273 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
274 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
275 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
276 arcp.setClient(httpClientMock);
278 arcp.sendEvent(123, null, "EventName", "This is an Event");
283 public void testApexRestClientProducerHttpError() throws ApexEventException {
284 MockitoAnnotations.initMocks(this);
286 ApexRestClientProducer arcp = new ApexRestClientProducer();
289 EventHandlerParameters producerParameters = new EventHandlerParameters();
290 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
291 producerParameters.setCarrierTechnologyParameters(rcctp);
293 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
294 arcp.init("RestClientConsumer", producerParameters);
295 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
296 assertEquals("RestClientConsumer", arcp.getName());
298 rcctp.setUrl("http://some.place.that.does.not/exist");
299 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
300 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
301 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
302 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
303 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
304 arcp.setClient(httpClientMock);
307 arcp.sendEvent(123, null, "EventName", "This is an Event");
308 fail("test should throw an exception here");
309 } catch (Exception e) {
311 "send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
312 + "failed with status code 400 and message \"null\", event:\n" + "This is an Event",