Changes for checkstyle 8.32
[policy/apex-pdp.git] / plugins / plugins-event / plugins-event-carrier / plugins-event-carrier-restclient / src / test / java / org / onap / policy / apex / plugins / event / carrier / restclient / ApexRestClientProducerTest.java
1 /*-
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
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.apex.plugins.event.carrier.restclient;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.fail;
27
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;
43
44 /**
45  * Test the ApexRestClientProducer class.
46  *
47  */
48 public class ApexRestClientProducerTest {
49     @Mock
50     private Client httpClientMock;
51
52     @Mock
53     private WebTarget targetMock;
54
55     @Mock
56     private Builder builderMock;
57
58     @Mock
59     private Response responseMock;
60
61     @Test
62     public void testApexRestClientProducerErrors() throws ApexEventException {
63         ApexRestClientProducer arcp = new ApexRestClientProducer();
64         assertNotNull(arcp);
65
66         EventHandlerParameters producerParameters = new EventHandlerParameters();
67         try {
68             arcp.init("RestClientProducer", producerParameters);
69             fail("test should throw an exception here");
70         } catch (ApexEventException e) {
71             assertEquals(
72                     "specified producer properties are not applicable to REST client producer (RestClientProducer)",
73                     e.getMessage());
74         }
75
76         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
77         producerParameters.setCarrierTechnologyParameters(rcctp);
78         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
79         try {
80             arcp.init("RestClientConsumer", producerParameters);
81             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
82             fail("test should throw an exception here");
83         } catch (ApexEventException e) {
84             assertEquals(
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)",
87                     e.getMessage());
88         }
89
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));
96         arcp.stop();
97
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));
104         arcp.stop();
105
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));
112         arcp.stop();
113     }
114
115     @Test
116     public void testApexRestClientProducerPutEvent() throws ApexEventException {
117         MockitoAnnotations.initMocks(this);
118
119         ApexRestClientProducer arcp = new ApexRestClientProducer();
120         assertNotNull(arcp);
121
122         EventHandlerParameters producerParameters = new EventHandlerParameters();
123         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
124         producerParameters.setCarrierTechnologyParameters(rcctp);
125
126         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
127         arcp.init("RestClientConsumer", producerParameters);
128         assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
129         assertEquals("RestClientConsumer", arcp.getName());
130
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);
138
139         arcp.sendEvent(123, null, "EventName", "This is an Event");
140         arcp.stop();
141     }
142
143     @Test
144     public void testApexRestClientProducerPostEventFail() throws ApexEventException {
145         MockitoAnnotations.initMocks(this);
146
147         ApexRestClientProducer arcp = new ApexRestClientProducer();
148         assertNotNull(arcp);
149
150         EventHandlerParameters producerParameters = new EventHandlerParameters();
151         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
152         producerParameters.setCarrierTechnologyParameters(rcctp);
153
154         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
155         arcp.init("RestClientConsumer", producerParameters);
156         assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
157         assertEquals("RestClientConsumer", arcp.getName());
158
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);
166
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");
171         try {
172             arcp.sendEvent(123, properties, "EventName", "This is an Event");
173             arcp.stop();
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());
179         }
180     }
181
182     @Test
183     public void testApexRestClientProducerPostEventOK() throws ApexEventException {
184         MockitoAnnotations.initMocks(this);
185
186         ApexRestClientProducer arcp = new ApexRestClientProducer();
187         assertNotNull(arcp);
188
189         EventHandlerParameters producerParameters = new EventHandlerParameters();
190         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
191         producerParameters.setCarrierTechnologyParameters(rcctp);
192
193         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
194         arcp.init("RestClientConsumer", producerParameters);
195         assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
196         assertEquals("RestClientConsumer", arcp.getName());
197
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);
209
210         arcp.sendEvent(123, properties, "EventName", "This is an Event");
211         arcp.stop();
212     }
213
214     @Test
215     public void testApexRestClientProducerPostEventCache() throws ApexEventException {
216         MockitoAnnotations.initMocks(this);
217
218         ApexRestClientProducer arcp = new ApexRestClientProducer();
219         assertNotNull(arcp);
220
221         EventHandlerParameters producerParameters = new EventHandlerParameters();
222         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
223         producerParameters.setCarrierTechnologyParameters(rcctp);
224
225         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
226
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());
235
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);
243
244         arcp.sendEvent(123, null, "EventName", "This is an Event");
245         arcp.stop();
246     }
247
248     @Test
249     public void testApexRestClientProducerPostEventCacheTrace() throws ApexEventException {
250         MockitoAnnotations.initMocks(this);
251
252         ApexRestClientProducer arcp = new ApexRestClientProducer();
253         assertNotNull(arcp);
254
255         EventHandlerParameters producerParameters = new EventHandlerParameters();
256         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
257         producerParameters.setCarrierTechnologyParameters(rcctp);
258
259         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
260
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());
269
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);
277
278         arcp.sendEvent(123, null, "EventName", "This is an Event");
279         arcp.stop();
280     }
281
282     @Test
283     public void testApexRestClientProducerHttpError() throws ApexEventException {
284         MockitoAnnotations.initMocks(this);
285
286         ApexRestClientProducer arcp = new ApexRestClientProducer();
287         assertNotNull(arcp);
288
289         EventHandlerParameters producerParameters = new EventHandlerParameters();
290         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
291         producerParameters.setCarrierTechnologyParameters(rcctp);
292
293         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
294         arcp.init("RestClientConsumer", producerParameters);
295         assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
296         assertEquals("RestClientConsumer", arcp.getName());
297
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);
305
306         try {
307             arcp.sendEvent(123, null, "EventName", "This is an Event");
308             fail("test should throw an exception here");
309         } catch (Exception e) {
310             assertEquals(
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",
313                     e.getMessage());
314         }
315     }
316 }