2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2019-2020 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 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;
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.MockitoAnnotations;
39 import org.mockito.runners.MockitoJUnitRunner;
40 import org.onap.policy.apex.service.engine.event.ApexEventConsumer;
41 import org.onap.policy.apex.service.engine.event.ApexEventException;
42 import org.onap.policy.apex.service.engine.event.SynchronousEventCache;
43 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer;
44 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
45 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
48 * Test the ApexRestClientProducer class.
51 @RunWith(MockitoJUnitRunner.class)
52 public class ApexRestClientProducerTest {
54 private Client httpClientMock;
57 private WebTarget targetMock;
60 private Builder builderMock;
63 private Response responseMock;
66 public void testApexRestClientProducerErrors() throws ApexEventException {
67 ApexRestClientProducer arcp = new ApexRestClientProducer();
70 EventHandlerParameters producerParameters = new EventHandlerParameters();
71 assertThatThrownBy(() -> arcp.init("RestClientProducer", producerParameters))
72 .hasMessage("specified producer properties are not applicable to REST client producer"
73 + " (RestClientProducer)");
75 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
76 producerParameters.setCarrierTechnologyParameters(rcctp);
77 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
78 assertThatThrownBy(() -> arcp.init("RestClientConsumer", producerParameters))
79 .hasMessage("specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\""
80 + " and \"PUT\" are supported for event sending on REST client producer (RestClientConsumer)");
82 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.DELETE, rcctp.getHttpMethod());
83 rcctp.setHttpMethod(null);
84 arcp.init("RestClientConsumer", producerParameters);
85 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
86 assertEquals("RestClientConsumer", arcp.getName());
87 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
88 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
91 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
92 arcp.init("RestClientConsumer", producerParameters);
93 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
94 assertEquals("RestClientConsumer", arcp.getName());
95 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
96 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
99 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
100 arcp.init("RestClientConsumer", producerParameters);
101 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
102 assertEquals("RestClientConsumer", arcp.getName());
103 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
104 assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
109 public void testApexRestClientProducerPutEvent() throws ApexEventException {
110 MockitoAnnotations.initMocks(this);
112 ApexRestClientProducer arcp = new ApexRestClientProducer();
115 EventHandlerParameters producerParameters = new EventHandlerParameters();
116 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
117 producerParameters.setCarrierTechnologyParameters(rcctp);
119 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
120 arcp.init("RestClientConsumer", producerParameters);
121 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
122 assertEquals("RestClientConsumer", arcp.getName());
124 rcctp.setUrl("http://some.place.that.does.not/exist");
125 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
126 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
127 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
128 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
129 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
130 arcp.setClient(httpClientMock);
132 arcp.sendEvent(123, null, "EventName", "This is an Event");
137 public void testApexRestClientProducerPostEventFail() throws ApexEventException {
138 MockitoAnnotations.initMocks(this);
140 ApexRestClientProducer arcp = new ApexRestClientProducer();
143 EventHandlerParameters producerParameters = new EventHandlerParameters();
144 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
145 producerParameters.setCarrierTechnologyParameters(rcctp);
147 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
148 arcp.init("RestClientConsumer", producerParameters);
149 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
150 assertEquals("RestClientConsumer", arcp.getName());
152 rcctp.setUrl("http://some.place.that.does.not/exist");
153 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
154 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
155 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
156 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
157 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
158 arcp.setClient(httpClientMock);
160 // test property not found
161 rcctp.setUrl("http://some.place2.that.{key}.not/{tag}and.again.{tag}");
162 Properties properties = new Properties();
163 properties.put("tag", "exist");
164 assertThatThrownBy(() -> {
165 arcp.sendEvent(123, properties, "EventName", "This is an Event");
167 }).hasMessageContaining("key \"key\" specified on url "
168 + "\"http://some.place2.that.{key}.not/{tag}and.again.{tag}\" not found "
169 + "in execution properties passed by the current policy");
173 public void testApexRestClientProducerPostEventOK() throws ApexEventException {
174 MockitoAnnotations.initMocks(this);
176 ApexRestClientProducer arcp = new ApexRestClientProducer();
179 EventHandlerParameters producerParameters = new EventHandlerParameters();
180 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
181 producerParameters.setCarrierTechnologyParameters(rcctp);
183 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
184 arcp.init("RestClientConsumer", producerParameters);
185 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
186 assertEquals("RestClientConsumer", arcp.getName());
188 System.out.println("fail test");
189 rcctp.setUrl("http://some.place.{key}.does.not/{tag}");
190 Properties properties = new Properties();
191 properties.put("tag", "exist");
192 properties.put("key", "that");
193 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
194 Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
195 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
196 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
197 Mockito.doReturn(targetMock).when(httpClientMock).target("http://some.place.that.does.not/exist");
198 arcp.setClient(httpClientMock);
200 arcp.sendEvent(123, properties, "EventName", "This is an Event");
205 public void testApexRestClientProducerPostEventCache() throws ApexEventException {
206 MockitoAnnotations.initMocks(this);
208 ApexRestClientProducer arcp = new ApexRestClientProducer();
211 EventHandlerParameters producerParameters = new EventHandlerParameters();
212 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
213 producerParameters.setCarrierTechnologyParameters(rcctp);
215 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
217 ApexEventConsumer consumer = new ApexFileEventConsumer();
218 SynchronousEventCache cache =
219 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
220 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
221 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
222 arcp.init("RestClientConsumer", producerParameters);
223 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
224 assertEquals("RestClientConsumer", arcp.getName());
226 rcctp.setUrl("http://some.place.that.does.not/exist");
227 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
228 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
229 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
230 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
231 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
232 arcp.setClient(httpClientMock);
234 arcp.sendEvent(123, null, "EventName", "This is an Event");
239 public void testApexRestClientProducerPostEventCacheTrace() throws ApexEventException {
240 MockitoAnnotations.initMocks(this);
242 ApexRestClientProducer arcp = new ApexRestClientProducer();
245 EventHandlerParameters producerParameters = new EventHandlerParameters();
246 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
247 producerParameters.setCarrierTechnologyParameters(rcctp);
249 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
251 ApexEventConsumer consumer = new ApexFileEventConsumer();
252 SynchronousEventCache cache =
253 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
254 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
255 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
256 arcp.init("RestClientConsumer", producerParameters);
257 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
258 assertEquals("RestClientConsumer", arcp.getName());
260 rcctp.setUrl("http://some.place.that.does.not/exist");
261 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
262 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
263 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
264 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
265 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
266 arcp.setClient(httpClientMock);
268 arcp.sendEvent(123, null, "EventName", "This is an Event");
273 public void testApexRestClientProducerHttpError() throws ApexEventException {
274 MockitoAnnotations.initMocks(this);
276 ApexRestClientProducer arcp = new ApexRestClientProducer();
279 EventHandlerParameters producerParameters = new EventHandlerParameters();
280 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
281 producerParameters.setCarrierTechnologyParameters(rcctp);
283 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
284 arcp.init("RestClientConsumer", producerParameters);
285 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
286 assertEquals("RestClientConsumer", arcp.getName());
288 rcctp.setUrl("http://some.place.that.does.not/exist");
289 Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
290 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
291 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
292 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
293 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
294 arcp.setClient(httpClientMock);
296 assertThatThrownBy(() -> arcp.sendEvent(123, null, "EventName", "This is an Event"))
297 .hasMessageContaining("send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
298 + "failed with status code 400");