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.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
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();
67 assertThatThrownBy(() -> arcp.init("RestClientProducer", producerParameters))
68 .hasMessage("specified producer properties are not applicable to REST client producer"
69 + " (RestClientProducer)");
71 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
72 producerParameters.setCarrierTechnologyParameters(rcctp);
73 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
74 assertThatThrownBy(() -> arcp.init("RestClientConsumer", producerParameters))
75 .hasMessage("specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\""
76 + " and \"PUT\" are supported for event sending on REST client producer (RestClientConsumer)");
78 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.DELETE, rcctp.getHttpMethod());
79 rcctp.setHttpMethod(null);
80 arcp.init("RestClientConsumer", producerParameters);
81 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
82 assertEquals("RestClientConsumer", arcp.getName());
83 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
84 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
87 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
88 arcp.init("RestClientConsumer", producerParameters);
89 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
90 assertEquals("RestClientConsumer", arcp.getName());
91 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
92 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
95 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
96 arcp.init("RestClientConsumer", producerParameters);
97 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
98 assertEquals("RestClientConsumer", arcp.getName());
99 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
100 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
105 public void testApexRestClientProducerPutEvent() throws ApexEventException {
106 MockitoAnnotations.initMocks(this);
108 ApexRestClientProducer arcp = new ApexRestClientProducer();
111 EventHandlerParameters producerParameters = new EventHandlerParameters();
112 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
113 producerParameters.setCarrierTechnologyParameters(rcctp);
115 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
116 arcp.init("RestClientConsumer", producerParameters);
117 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
118 assertEquals("RestClientConsumer", arcp.getName());
120 rcctp.setUrl("http://some.place.that.does.not/exist");
121 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
122 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
123 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
124 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
125 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
126 arcp.setClient(httpClientMock);
128 arcp.sendEvent(123, null, "EventName", "This is an Event");
133 public void testApexRestClientProducerPostEventFail() throws ApexEventException {
134 MockitoAnnotations.initMocks(this);
136 ApexRestClientProducer arcp = new ApexRestClientProducer();
139 EventHandlerParameters producerParameters = new EventHandlerParameters();
140 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
141 producerParameters.setCarrierTechnologyParameters(rcctp);
143 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
144 arcp.init("RestClientConsumer", producerParameters);
145 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
146 assertEquals("RestClientConsumer", arcp.getName());
148 rcctp.setUrl("http://some.place.that.does.not/exist");
149 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
150 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
151 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
152 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
153 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
154 arcp.setClient(httpClientMock);
156 // test property not found
157 rcctp.setUrl("http://some.place2.that.{key}.not/{tag}and.again.{tag}");
158 Properties properties = new Properties();
159 properties.put("tag", "exist");
160 assertThatThrownBy(() -> {
161 arcp.sendEvent(123, properties, "EventName", "This is an Event");
163 }).hasMessageContaining("key \"key\" specified on url "
164 + "\"http://some.place2.that.{key}.not/{tag}and.again.{tag}\" not found "
165 + "in execution properties passed by the current policy");
169 public void testApexRestClientProducerPostEventOK() throws ApexEventException {
170 MockitoAnnotations.initMocks(this);
172 ApexRestClientProducer arcp = new ApexRestClientProducer();
175 EventHandlerParameters producerParameters = new EventHandlerParameters();
176 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
177 producerParameters.setCarrierTechnologyParameters(rcctp);
179 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
180 arcp.init("RestClientConsumer", producerParameters);
181 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
182 assertEquals("RestClientConsumer", arcp.getName());
184 System.out.println("fail test");
185 rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
186 Properties properties = new Properties();
187 properties.put("tag", "exist");
188 properties.put("key", "that");
189 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
190 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
191 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
192 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
193 Mockito.doReturn(targetMock).when(httpClientMock).target("http://some.place.that.does.not/exist");
194 arcp.setClient(httpClientMock);
196 arcp.sendEvent(123, properties, "EventName", "This is an Event");
201 public void testApexRestClientProducerPostEventCache() throws ApexEventException {
202 MockitoAnnotations.initMocks(this);
204 ApexRestClientProducer arcp = new ApexRestClientProducer();
207 EventHandlerParameters producerParameters = new EventHandlerParameters();
208 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
209 producerParameters.setCarrierTechnologyParameters(rcctp);
211 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
213 ApexEventConsumer consumer = new ApexFileEventConsumer();
214 SynchronousEventCache cache =
215 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
216 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
217 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
218 arcp.init("RestClientConsumer", producerParameters);
219 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
220 assertEquals("RestClientConsumer", arcp.getName());
222 rcctp.setUrl("http://some.place.that.does.not/exist");
223 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
224 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
225 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
226 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
227 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
228 arcp.setClient(httpClientMock);
230 arcp.sendEvent(123, null, "EventName", "This is an Event");
235 public void testApexRestClientProducerPostEventCacheTrace() throws ApexEventException {
236 MockitoAnnotations.initMocks(this);
238 ApexRestClientProducer arcp = new ApexRestClientProducer();
241 EventHandlerParameters producerParameters = new EventHandlerParameters();
242 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
243 producerParameters.setCarrierTechnologyParameters(rcctp);
245 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
247 ApexEventConsumer consumer = new ApexFileEventConsumer();
248 SynchronousEventCache cache =
249 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
250 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
251 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
252 arcp.init("RestClientConsumer", producerParameters);
253 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
254 assertEquals("RestClientConsumer", arcp.getName());
256 rcctp.setUrl("http://some.place.that.does.not/exist");
257 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
258 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
259 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
260 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
261 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
262 arcp.setClient(httpClientMock);
264 arcp.sendEvent(123, null, "EventName", "This is an Event");
269 public void testApexRestClientProducerHttpError() throws ApexEventException {
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);
280 arcp.init("RestClientConsumer", producerParameters);
281 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
282 assertEquals("RestClientConsumer", arcp.getName());
284 rcctp.setUrl("http://some.place.that.does.not/exist");
285 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
286 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
287 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
288 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
289 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
290 arcp.setClient(httpClientMock);
292 assertThatThrownBy(() -> arcp.sendEvent(123, null, "EventName", "This is an Event"))
293 .hasMessageContaining("send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
294 + "failed with status code 400 and message \"null\", event:\n" + "This is an Event");