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.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 testApexRestClientProducerPostEventCache() 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.POST);
203 ApexEventConsumer consumer = new ApexFileEventConsumer();
204 SynchronousEventCache cache =
205 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
206 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
207 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
208 arcp.init("RestClientConsumer", producerParameters);
209 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
210 assertEquals("RestClientConsumer", arcp.getName());
212 rcctp.setUrl("http://some.place.that.does.not/exist");
213 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
214 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
215 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
216 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
217 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
218 arcp.setClient(httpClientMock);
220 arcp.sendEvent(123, null, "EventName", "This is an Event");
225 public void testApexRestClientProducerPostEventCacheTrace() throws ApexEventException {
226 ApexRestClientProducer arcp = new ApexRestClientProducer();
229 EventHandlerParameters producerParameters = new EventHandlerParameters();
230 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
231 producerParameters.setCarrierTechnologyParameters(rcctp);
233 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
235 ApexEventConsumer consumer = new ApexFileEventConsumer();
236 SynchronousEventCache cache =
237 new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp, 1000);
238 arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
239 assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
240 arcp.init("RestClientConsumer", producerParameters);
241 assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
242 assertEquals("RestClientConsumer", arcp.getName());
244 rcctp.setUrl("http://some.place.that.does.not/exist");
245 Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
246 Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
247 Mockito.doReturn(builderMock).when(targetMock).request("application/json");
248 Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
249 Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
250 arcp.setClient(httpClientMock);
252 arcp.sendEvent(123, null, "EventName", "This is an Event");
257 public void testApexRestClientProducerHttpError() throws ApexEventException {
258 ApexRestClientProducer arcp = new ApexRestClientProducer();
261 EventHandlerParameters producerParameters = new EventHandlerParameters();
262 RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
263 producerParameters.setCarrierTechnologyParameters(rcctp);
265 rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
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.BAD_REQUEST.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 assertThatThrownBy(() -> arcp.sendEvent(123, null, "EventName", "This is an Event"))
279 .hasMessageContaining("send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
280 + "failed with status code 400");