8f0e0940bb3c7cb54c72c6f55be2c8814676062d
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2018 Ericsson. All rights reserved.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  * 
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  * 
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  * 
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.apex.plugins.event.carrier.restclient;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.fail;
26
27 import ch.qos.logback.classic.Level;
28
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
34 import org.junit.Test;
35 import org.mockito.Mock;
36 import org.mockito.Mockito;
37 import org.mockito.MockitoAnnotations;
38 import org.onap.policy.apex.service.engine.event.ApexEventConsumer;
39 import org.onap.policy.apex.service.engine.event.ApexEventException;
40 import org.onap.policy.apex.service.engine.event.SynchronousEventCache;
41 import org.onap.policy.apex.service.engine.event.impl.filecarrierplugin.consumer.ApexFileEventConsumer;
42 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters;
43 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
46
47 /**
48  * Test the ApexRestClientProducer class.
49  *
50  */
51 public class ApexRestClientProducerTest {
52     private static final Logger LOGGER = LoggerFactory.getLogger(ApexRestClientProducer.class);
53
54     @Mock
55     private Client httpClientMock;
56
57     @Mock
58     private WebTarget targetMock;
59
60     @Mock
61     private Builder builderMock;
62
63     @Mock
64     private Response responseMock;
65
66     @Test
67     public void testApexRestClientProducerErrors() {
68         ApexRestClientProducer arcp = new ApexRestClientProducer();
69         assertNotNull(arcp);
70
71         EventHandlerParameters producerParameters = new EventHandlerParameters();
72         try {
73             arcp.init("RestClientProducer", producerParameters);
74             fail("test should throw an exception here");
75         } catch (ApexEventException e) {
76             assertEquals(
77                 "specified producer properties are not applicable to REST client producer (RestClientProducer)",
78                 e.getMessage());
79         }
80
81         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
82         producerParameters.setCarrierTechnologyParameters(rcctp);
83         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.DELETE);
84         try {
85             arcp.init("RestClientConsumer", producerParameters);
86             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.GET, rcctp.getHttpMethod());
87             fail("test should throw an exception here");
88         } catch (ApexEventException e) {
89             assertEquals("specified HTTP method of \"DELETE\" is invalid, only HTTP methods \"POST\" and \"PUT\" "
90                 + "are supproted for event sending on REST client producer (RestClientConsumer)", e.getMessage());
91         }
92
93         rcctp.setHttpMethod(null);
94         try {
95             arcp.init("RestClientConsumer", producerParameters);
96             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
97
98             assertEquals("RestClientConsumer", arcp.getName());
99
100             arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
101             assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
102
103             arcp.stop();
104         } catch (ApexEventException e) {
105             fail("test should not throw an exception");
106         }
107
108         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
109         try {
110             arcp.init("RestClientConsumer", producerParameters);
111             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
112
113             assertEquals("RestClientConsumer", arcp.getName());
114
115             arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
116             assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
117
118             arcp.stop();
119         } catch (ApexEventException e) {
120             fail("test should not throw an exception");
121         }
122
123         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
124         try {
125             arcp.init("RestClientConsumer", producerParameters);
126             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
127
128             assertEquals("RestClientConsumer", arcp.getName());
129
130             arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, null);
131             assertEquals(null, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
132
133             arcp.stop();
134         } catch (ApexEventException e) {
135             fail("test should not throw an exception");
136         }
137     }
138
139     @Test
140     public void testApexRestClientProducerPutEvent() {
141         MockitoAnnotations.initMocks(this);
142
143         ApexRestClientProducer arcp = new ApexRestClientProducer();
144         assertNotNull(arcp);
145
146         EventHandlerParameters producerParameters = new EventHandlerParameters();
147         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
148         producerParameters.setCarrierTechnologyParameters(rcctp);
149
150         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.PUT);
151         try {
152             arcp.init("RestClientConsumer", producerParameters);
153             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.PUT, rcctp.getHttpMethod());
154
155             assertEquals("RestClientConsumer", arcp.getName());
156         } catch (ApexEventException e) {
157             fail("test should not throw an exception");
158         }
159
160         rcctp.setUrl("http://some.place.that.does.not/exist");
161         Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
162         Mockito.doReturn(responseMock).when(builderMock).put(Mockito.any());
163         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
164         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
165         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
166         arcp.setClient(httpClientMock);
167
168         try {
169             arcp.sendEvent(123, "EventName", "This is an Event");
170             arcp.stop();
171         } catch (Exception ex) {
172             fail("test should not throw an exception");
173         }
174     }
175
176     @Test
177     public void testApexRestClientProducerPostEvent() {
178         MockitoAnnotations.initMocks(this);
179
180         ApexRestClientProducer arcp = new ApexRestClientProducer();
181         assertNotNull(arcp);
182
183         EventHandlerParameters producerParameters = new EventHandlerParameters();
184         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
185         producerParameters.setCarrierTechnologyParameters(rcctp);
186
187         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
188         try {
189             arcp.init("RestClientConsumer", producerParameters);
190             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
191
192             assertEquals("RestClientConsumer", arcp.getName());
193         } catch (ApexEventException e) {
194             fail("test should not throw an exception");
195         }
196
197         rcctp.setUrl("http://some.place.that.does.not/exist");
198         Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
199         Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
200         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
201         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
202         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
203         arcp.setClient(httpClientMock);
204
205         try {
206             arcp.sendEvent(123, "EventName", "This is an Event");
207             arcp.stop();
208         } catch (Exception e) {
209             fail("test should not throw an exception");
210         }
211     }
212
213     @Test
214     public void testApexRestClientProducerPostEventCache() {
215         MockitoAnnotations.initMocks(this);
216
217         ApexRestClientProducer arcp = new ApexRestClientProducer();
218         assertNotNull(arcp);
219
220         EventHandlerParameters producerParameters = new EventHandlerParameters();
221         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
222         producerParameters.setCarrierTechnologyParameters(rcctp);
223
224         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
225
226         ApexEventConsumer consumer = new ApexFileEventConsumer();
227         SynchronousEventCache cache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp,
228             1000);
229         arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
230         assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
231         try {
232             arcp.init("RestClientConsumer", producerParameters);
233             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
234
235             assertEquals("RestClientConsumer", arcp.getName());
236         } catch (ApexEventException e) {
237             fail("test should not throw an exception");
238         }
239
240         rcctp.setUrl("http://some.place.that.does.not/exist");
241         Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
242         Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
243         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
244         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
245         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
246         arcp.setClient(httpClientMock);
247
248         try {
249             arcp.sendEvent(123, "EventName", "This is an Event");
250             arcp.stop();
251         } catch (Exception e) {
252             fail("test should not throw an exception");
253         }
254     }
255
256     @Test
257     public void testApexRestClientProducerPostEventCacheTrace() {
258         MockitoAnnotations.initMocks(this);
259
260         ch.qos.logback.classic.Logger classicLogger = (ch.qos.logback.classic.Logger) LOGGER;
261         classicLogger.setLevel(Level.TRACE);
262
263         ApexRestClientProducer arcp = new ApexRestClientProducer();
264         assertNotNull(arcp);
265
266         EventHandlerParameters producerParameters = new EventHandlerParameters();
267         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
268         producerParameters.setCarrierTechnologyParameters(rcctp);
269
270         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
271
272         ApexEventConsumer consumer = new ApexFileEventConsumer();
273         SynchronousEventCache cache = new SynchronousEventCache(EventHandlerPeeredMode.SYNCHRONOUS, consumer, arcp,
274             1000);
275         arcp.setPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS, cache);
276         assertEquals(cache, arcp.getPeeredReference(EventHandlerPeeredMode.SYNCHRONOUS));
277         try {
278             arcp.init("RestClientConsumer", producerParameters);
279             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
280
281             assertEquals("RestClientConsumer", arcp.getName());
282         } catch (ApexEventException e) {
283             fail("test should not throw an exception");
284         }
285
286         rcctp.setUrl("http://some.place.that.does.not/exist");
287         Mockito.doReturn(Response.Status.OK.getStatusCode()).when(responseMock).getStatus();
288         Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
289         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
290         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
291         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
292         arcp.setClient(httpClientMock);
293
294         try {
295             arcp.sendEvent(123, "EventName", "This is an Event");
296             arcp.stop();
297         } catch (Exception e) {
298             fail("test should not throw an exception");
299         }
300     }
301
302     @Test
303     public void testApexRestClientProducerHttpError() {
304         MockitoAnnotations.initMocks(this);
305
306         ApexRestClientProducer arcp = new ApexRestClientProducer();
307         assertNotNull(arcp);
308
309         EventHandlerParameters producerParameters = new EventHandlerParameters();
310         RestClientCarrierTechnologyParameters rcctp = new RestClientCarrierTechnologyParameters();
311         producerParameters.setCarrierTechnologyParameters(rcctp);
312
313         rcctp.setHttpMethod(RestClientCarrierTechnologyParameters.HttpMethod.POST);
314         try {
315             arcp.init("RestClientConsumer", producerParameters);
316             assertEquals(RestClientCarrierTechnologyParameters.HttpMethod.POST, rcctp.getHttpMethod());
317
318             assertEquals("RestClientConsumer", arcp.getName());
319         } catch (ApexEventException e) {
320             fail("test should not throw an exception");
321         }
322
323         rcctp.setUrl("http://some.place.that.does.not/exist");
324         Mockito.doReturn(Response.Status.BAD_REQUEST.getStatusCode()).when(responseMock).getStatus();
325         Mockito.doReturn(responseMock).when(builderMock).post(Mockito.any());
326         Mockito.doReturn(builderMock).when(targetMock).request("application/json");
327         Mockito.doReturn(builderMock).when(builderMock).headers(Mockito.any());
328         Mockito.doReturn(targetMock).when(httpClientMock).target(rcctp.getUrl());
329         arcp.setClient(httpClientMock);
330
331         try {
332             arcp.sendEvent(123, "EventName", "This is an Event");
333             fail("test should throw an exception here");
334         } catch (Exception e) {
335             assertEquals(
336                 "send of event to URL \"http://some.place.that.does.not/exist\" using HTTP \"POST\" "
337                     + "failed with status code 400 and message \"null\", event:\n" + "This is an Event",
338                 e.getMessage());
339         }
340     }
341 }