2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2019-2020, 2023 Nordix Foundation.
5 * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
19 * SPDX-License-Identifier: Apache-2.0
20 * ============LICENSE_END=========================================================
23 package org.onap.policy.apex.plugins.event.carrier.restclient;
25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotNull;
29 import jakarta.ws.rs.client.Client;
30 import jakarta.ws.rs.client.Invocation.Builder;
31 import jakarta.ws.rs.client.WebTarget;
32 import jakarta.ws.rs.core.Response;
33 import java.util.Properties;
34 import org.junit.Test;
35 import org.junit.runner.RunWith;
36 import org.mockito.Mock;
37 import org.mockito.Mockito;
38 import org.mockito.junit.MockitoJUnitRunner;
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 @RunWith(MockitoJUnitRunner.class)
51 public class ApexRestClientProducerTest {
53 private Client httpClientMock;
56 private WebTarget targetMock;
59 private Builder builderMock;
62 private Response responseMock;
65 public void testApexRestClientProducerErrors() throws ApexEventException {
66 ApexRestClientProducer arcp = new ApexRestClientProducer();
69 EventHandlerParameters producerParameters = new EventHandlerParameters();
70 assertThatThrownBy(() -> arcp.init("RestClientProducer", producerParameters))
71 .hasMessage("specified producer properties are not applicable to REST client producer"
72 + " (RestClientProducer)");
74 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
75 producerParameters.setCarrierTechnologyParameters(rcctp);
76 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
77 assertThatThrownBy(() -> arcp.init("RestClientConsumer", producerParameters))
78 .hasMessage("specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\""
79 + " and \"PUT\" are supported for event sending on REST client producer (RestClientConsumer)");
81 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.DELETE, rcctp.getHttpMethod());
82 rcctp.setHttpMethod(null);
83 arcp.init("RestClientConsumer", producerParameters);
84 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
85 assertEquals("RestClientConsumer", arcp.getName());
86 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
87 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
90 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
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.PUT);
99 arcp.init("RestClientConsumer", producerParameters);
100 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
101 assertEquals("RestClientConsumer", arcp.getName());
102 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
103 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
108 public void testApexRestClientProducerPutEvent() throws ApexEventException {
109 ApexRestClientProducer arcp = new ApexRestClientProducer();
112 EventHandlerParameters producerParameters = new EventHandlerParameters();
113 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
114 producerParameters.setCarrierTechnologyParameters(rcctp);
116 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
117 arcp.init("RestClientConsumer", producerParameters);
118 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
119 assertEquals("RestClientConsumer", arcp.getName());
121 rcctp.setUrl("http://some.place.that.does.not/exist");
122 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
123 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
124 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
125 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
126 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
127 arcp.setClient(httpClientMock);
129 arcp.sendEvent(123, null, "EventName", "This is an Event");
134 public void testApexRestClientProducerPostEventFail() throws ApexEventException {
135 ApexRestClientProducer arcp = new ApexRestClientProducer();
138 EventHandlerParameters producerParameters = new EventHandlerParameters();
139 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
140 producerParameters.setCarrierTechnologyParameters(rcctp);
142 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
143 arcp.init("RestClientConsumer", producerParameters);
144 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
145 assertEquals("RestClientConsumer", arcp.getName());
147 rcctp.setUrl("http://some.place.that.does.not/exist");
148 arcp.setClient(httpClientMock);
150 // test property not found
151 rcctp.setUrl("http://some.place2.that.{key}.not/{tag}and.again.{tag}");
152 Properties properties = new Properties();
153 properties.put("tag", "exist");
154 assertThatThrownBy(() -> {
155 arcp.sendEvent(123, properties, "EventName", "This is an Event");
157 }).hasMessageContaining("key \"key\" specified on url "
158 + "\"http://some.place2.that.{key}.not/{tag}and.again.{tag}\" not found "
159 + "in execution properties passed by the current policy");
163 public void testApexRestClientProducerPostEventOK() throws ApexEventException {
164 ApexRestClientProducer arcp = new ApexRestClientProducer();
167 EventHandlerParameters producerParameters = new EventHandlerParameters();
168 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
169 producerParameters.setCarrierTechnologyParameters(rcctp);
171 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
172 arcp.init("RestClientConsumer", producerParameters);
173 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
174 assertEquals("RestClientConsumer", arcp.getName());
176 System.out.println("fail test");
177 rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
178 Properties properties = new Properties();
179 properties.put("tag", "exist");
180 properties.put("key", "that");
181 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
182 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
183 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
184 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
185 Mockito.doReturn(targetMock).when(httpClientMock).target("http://some.place.that.does.not/exist");
186 arcp.setClient(httpClientMock);
188 arcp.sendEvent(123, properties, "EventName", "This is an Event");
193 public void testApexRestClientProducerPostEventAccepted() throws ApexEventException {
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 rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
207 Properties properties = new Properties();
208 properties.put("tag", "exist");
209 properties.put("key", "that");
210 Mockito.doReturn(Response.Status.ACCEPTED.getStatusCode()).when(responseMock).getStatus();
211 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
212 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
213 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
214 Mockito.doReturn(targetMock).when(httpClientMock).target("http://some.place.that.does.not/exist");
215 arcp.setClient(httpClientMock);
217 arcp.sendEvent(123, properties, "EventName", "This is an ACCEPTED Event");
222 public void testApexRestClientProducerPostEventCache() throws ApexEventException {
223 ApexRestClientProducer arcp = new ApexRestClientProducer();
226 EventHandlerParameters producerParameters = new EventHandlerParameters();
227 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
228 producerParameters.setCarrierTechnologyParameters(rcctp);
230 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
232 ApexEventConsumer consumer = new ApexFileEventConsumer();
233 SynchronousEventCache cache =
234 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
235 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
236 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
237 arcp.init("RestClientConsumer", producerParameters);
238 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
239 assertEquals("RestClientConsumer", arcp.getName());
241 rcctp.setUrl("http://some.place.that.does.not/exist");
242 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
243 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
244 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
245 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
246 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
247 arcp.setClient(httpClientMock);
249 arcp.sendEvent(123, null, "EventName", "This is an Event");
254 public void testApexRestClientProducerPostEventCacheTrace() throws ApexEventException {
255 ApexRestClientProducer arcp = new ApexRestClientProducer();
258 EventHandlerParameters producerParameters = new EventHandlerParameters();
259 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
260 producerParameters.setCarrierTechnologyParameters(rcctp);
262 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
264 ApexEventConsumer consumer = new ApexFileEventConsumer();
265 SynchronousEventCache cache =
266 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
267 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
268 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
269 arcp.init("RestClientConsumer", producerParameters);
270 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
271 assertEquals("RestClientConsumer", arcp.getName());
273 rcctp.setUrl("http://some.place.that.does.not/exist");
274 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
275 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
276 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
277 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
278 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
279 arcp.setClient(httpClientMock);
281 arcp.sendEvent(123, null, "EventName", "This is an Event");
286 public void testApexRestClientProducerHttpError() throws ApexEventException {
287 ApexRestClientProducer arcp = new ApexRestClientProducer();
290 EventHandlerParameters producerParameters = new EventHandlerParameters();
291 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
292 producerParameters.setCarrierTechnologyParameters(rcctp);
294 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
295 arcp.init("RestClientConsumer", producerParameters);
296 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
297 assertEquals("RestClientConsumer", arcp.getName());
299 rcctp.setUrl("http://some.place.that.does.not/exist");
300 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
301 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
302 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
303 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
304 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
305 arcp.setClient(httpClientMock);
307 assertThatThrownBy(() -> arcp.sendEvent(123, null, "EventName", "This is an Event"))
308 .hasMessageContaining("send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
309 + "failed with status code 400");