4265c46fba094d68fa9fd78a8d940f4df325b5da
[dcaegen2/analytics/tca.git] / dcae-analytics-dmaap / src / test / java / org / openecomp / dcae / apod / analytics / dmaap / service / BaseDMaaPMRComponentTest.java
1 /*\r
2  * ===============================LICENSE_START======================================\r
3  *  dcae-analytics\r
4  * ================================================================================\r
5  *    Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
6  * ================================================================================\r
7  *  Licensed under the Apache License, Version 2.0 (the "License");\r
8  *  you may not use this file except in compliance with the License.\r
9  *   You may obtain a copy of the License at\r
10  *\r
11  *          http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  *  Unless required by applicable law or agreed to in writing, software\r
14  *  distributed under the License is distributed on an "AS IS" BASIS,\r
15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  *  See the License for the specific language governing permissions and\r
17  *  limitations under the License.\r
18  *  ============================LICENSE_END===========================================\r
19  */\r
20 \r
21 package org.openecomp.dcae.apod.analytics.dmaap.service;\r
22 \r
23 import com.fasterxml.jackson.core.JsonProcessingException;\r
24 import com.google.common.base.Optional;\r
25 import org.apache.commons.lang3.tuple.Pair;\r
26 import org.apache.http.HttpEntity;\r
27 import org.apache.http.HttpResponse;\r
28 import org.apache.http.StatusLine;\r
29 import org.apache.http.client.ResponseHandler;\r
30 import org.junit.Rule;\r
31 import org.junit.Test;\r
32 import org.junit.rules.ExpectedException;\r
33 import org.mockito.Mockito;\r
34 import org.openecomp.dcae.apod.analytics.common.exception.DCAEAnalyticsRuntimeException;\r
35 import org.openecomp.dcae.apod.analytics.dmaap.BaseAnalyticsDMaaPUnitTest;\r
36 import org.openecomp.dcae.apod.analytics.dmaap.domain.config.DMaaPMRPublisherConfig;\r
37 import org.openecomp.dcae.apod.analytics.dmaap.domain.config.DMaaPMRSubscriberConfig;\r
38 import org.openecomp.dcae.apod.analytics.dmaap.domain.response.DMaaPMRSubscriberResponse;\r
39 import org.openecomp.dcae.apod.analytics.dmaap.service.publisher.DMaaPMRPublisherQueue;\r
40 \r
41 import java.io.IOException;\r
42 import java.net.URI;\r
43 import java.util.ArrayList;\r
44 import java.util.Arrays;\r
45 import java.util.List;\r
46 \r
47 import static org.hamcrest.Matchers.containsInAnyOrder;\r
48 import static org.hamcrest.Matchers.hasSize;\r
49 import static org.hamcrest.Matchers.is;\r
50 import static org.hamcrest.Matchers.isA;\r
51 import static org.junit.Assert.assertEquals;\r
52 import static org.junit.Assert.assertFalse;\r
53 import static org.junit.Assert.assertThat;\r
54 import static org.junit.Assert.assertTrue;\r
55 import static org.mockito.BDDMockito.given;\r
56 import static org.mockito.Mockito.mock;\r
57 \r
58 /**\r
59  * @author Manjesh Gowda. Creation Date: 11/4/2016.\r
60  */\r
61 public class BaseDMaaPMRComponentTest extends BaseAnalyticsDMaaPUnitTest {\r
62 \r
63     @Test\r
64     public void testGetAuthHeaderWithGoodValues() {\r
65         String expectedEncodedString = "Basic bTAwNTAyQHRjYS5hZi5kY2FlLmNvbTpUZTUwMjFhYmM=";\r
66         Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader("USER", "PASSWORD");\r
67         assertTrue(" Authentication Header has value ", actualOutput.isPresent());\r
68 //        assertEquals(" Authentication Header has value ", expectedEncodedString, actualOutput.get());\r
69     }\r
70 \r
71     @Test\r
72     public void testGetAuthHeaderWithNullValues() {\r
73         Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader(null, null);\r
74         assertFalse(" Authentication Header has value ", actualOutput.isPresent());\r
75     }\r
76 \r
77     @Test\r
78     public void testGetAuthHeaderWithUserNullValue() {\r
79         Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader("USER", null);\r
80         assertFalse(" Authentication Header has value ", actualOutput.isPresent());\r
81     }\r
82 \r
83     @Test\r
84     public void testGetAuthHeaderWithPasswordNullValue() {\r
85         Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader(null, "PASSWORD");\r
86         assertFalse(" Authentication Header has value ", actualOutput.isPresent());\r
87     }\r
88 \r
89     @Test\r
90     public void testCreatePublishURIWithGoodValues() {\r
91         URI actualURI = BaseDMaaPMRComponent.createPublisherURI(getPublisherConfig());\r
92         String test = actualURI.toString();\r
93         assertEquals("Generated Publisher URL is correct",\r
94                 "https://testHostName:8080/events/testTopicName", actualURI.toString());\r
95     }\r
96 \r
97     @Test(expected = DCAEAnalyticsRuntimeException.class)\r
98     public void testCreatePublishURIWithURISyntaxException() {\r
99         DMaaPMRPublisherConfig badPublisherConfig = new DMaaPMRPublisherConfig\r
100                 .Builder(" dav /gh. ss/ asd ", "///@$%#-htps:<>!##")\r
101                 .setPortNumber(0)\r
102                 .setProtocol("https").build();\r
103 \r
104       BaseDMaaPMRComponent.createPublisherURI(badPublisherConfig);\r
105     }\r
106 \r
107     @Test\r
108     public void testCreateSubscribeURIWithGoodValues() {\r
109         URI actualURI = BaseDMaaPMRComponent.createSubscriberURI(\r
110                 getSubscriberConfig("test-consumer-group", "test-consumer-id"));\r
111         assertEquals("Generated Subscriber URL is correct",\r
112                 "https://testHostName:8080/events/testTopicName/" +\r
113                         "test-consumer-id/test-consumer-group?timeout=2000&limit=20",\r
114                 actualURI.toString());\r
115     }\r
116 \r
117     @Test(expected = DCAEAnalyticsRuntimeException.class)\r
118     public void testCreateSubscribeURIWithURISyntaxException() {\r
119         DMaaPMRSubscriberConfig badSubscriberConfig = new DMaaPMRSubscriberConfig\r
120                 .Builder(" dav /gh. ss/ asd ", "")\r
121                 .setPortNumber(PORT_NUMBER)\r
122                 .setProtocol(HTTP_PROTOCOL)\r
123                 .setContentType(CONTENT_TYPE).build();\r
124 \r
125         URI actualURI = BaseDMaaPMRComponent.createSubscriberURI(badSubscriberConfig);\r
126     }\r
127 \r
128     @Test\r
129     public void testConvertToJsonStringGoodJsonStringList() {\r
130         List<String> jsonMessage = Arrays.asList(\r
131                 "{\"message\":\"I'm Object 1 Message\"}",\r
132                 "{\"message\":\"I'm Object 2 Message\"}");\r
133 \r
134         String actualJSONMsg = BaseDMaaPMRComponent.convertToJsonString(jsonMessage);\r
135 \r
136         String expectedJSONMsg = "[{\"message\":\"I'm Object 1 Message\"}," +\r
137                 "{\"message\":\"I'm Object 2 Message\"}]";\r
138         assertEquals("Convert a List of Strings to JSON is working fine", expectedJSONMsg, actualJSONMsg);\r
139 \r
140     }\r
141 \r
142     @Rule\r
143     public ExpectedException expectedJsonProcessingException = ExpectedException.none();\r
144 \r
145     @Test\r
146     public void testConvertToJsonStringBadJsonStringList() {\r
147         expectedJsonProcessingException.expect(DCAEAnalyticsRuntimeException.class);\r
148         expectedJsonProcessingException.expectCause(isA(JsonProcessingException.class));\r
149 \r
150         List<String> jsonMessage = Arrays.asList(\r
151                 "{\"message\":\"I'm Object 1 Message\"",\r
152                 "\"message\":\"I'm Object 2 Message\"");\r
153 \r
154         BaseDMaaPMRComponent.convertToJsonString(jsonMessage);\r
155     }\r
156 \r
157     @Test\r
158     public void testConvertToJsonStringWithEmptyList() {\r
159         List<String> jsonMessage = Arrays.asList();\r
160         String actualJSONMsg = BaseDMaaPMRComponent.convertToJsonString(jsonMessage);\r
161         String expectedJSONMsg = "[]";\r
162         assertEquals("Convert a List of Strings to JSON is working fine", expectedJSONMsg, actualJSONMsg);\r
163     }\r
164 \r
165     @Test\r
166     public void testConvertToJsonStringWithNullList() {\r
167         String actualJSONMsg = BaseDMaaPMRComponent.convertToJsonString(null);\r
168         String expectedJSONMsg = "[]";\r
169         assertEquals("Convert a List of Strings to JSON is working fine", expectedJSONMsg, actualJSONMsg);\r
170     }\r
171 \r
172 \r
173     @Test\r
174     public void testConvertJsonToStringMessagesGoodValues() {\r
175         String inputJSONMsg = "[{\"message\":\"I'm Object 1 Message\"}," +\r
176                 "{\"message\":\"I'm Object 2 Message\"}]";\r
177         List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(inputJSONMsg);\r
178         assertThat(actualList, hasSize(2));\r
179         assertThat(actualList, containsInAnyOrder(\r
180                 "{\"message\":\"I'm Object 1 Message\"}",\r
181                 "{\"message\":\"I'm Object 2 Message\"}"\r
182         ));\r
183     }\r
184 \r
185     @Test\r
186     public void testConvertJsonToStringMessagesNoValues() {\r
187         String inputJSONMsg = "[]";\r
188         List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(inputJSONMsg);\r
189         assertThat(actualList, hasSize(0));\r
190     }\r
191 \r
192     @Test\r
193     public void testConvertJsonToStringMessagesNullValues() {\r
194         List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(null);\r
195         assertThat(actualList, hasSize(0));\r
196     }\r
197 \r
198     @Test\r
199     public void testConvertJsonToStringMessagesEmptyValues() {\r
200         List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages("  ");\r
201         assertThat(actualList, hasSize(0));\r
202     }\r
203 \r
204     @Rule\r
205     public ExpectedException convertToJSONIOException = ExpectedException.none();\r
206 \r
207     @Test\r
208     public void testConvertJsonToStringMessagesException() {\r
209         convertToJSONIOException.expect(DCAEAnalyticsRuntimeException.class);\r
210         convertToJSONIOException.expectCause(isA(IOException.class));\r
211 \r
212         String inputJSONMsg = "[\"{\"message\":\"I'm Object 1 Message\"}\"," +\r
213                 "\"{\"message\":\"I'm Object 2 Message\"}\"]";\r
214         List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(inputJSONMsg);\r
215         assertThat(actualList, hasSize(2));\r
216         assertThat(actualList, containsInAnyOrder(\r
217                 "{\"message\":\"I'm Object 1 Message\"}",\r
218                 "{\"message\":\"I'm Object 2 Message\"}"\r
219         ));\r
220     }\r
221 \r
222     @Test\r
223     public void testAddMessagesToRecoveryQueueAllGood() {\r
224         DMaaPMRPublisherQueue dmaapMRPublisherQueue = mock(DMaaPMRPublisherQueue.class);\r
225         given(dmaapMRPublisherQueue.addRecoverableMessages(Mockito.<String>anyList())).willReturn(0);\r
226         given(dmaapMRPublisherQueue.getBatchQueueRemainingSize()).willReturn(0);\r
227         List<String> messages = new ArrayList<String>();\r
228         BaseDMaaPMRComponent.addMessagesToRecoveryQueue(dmaapMRPublisherQueue, messages);\r
229     }\r
230 \r
231     @Rule\r
232     public ExpectedException addQueueIllegalException = ExpectedException.none();\r
233 \r
234     @Test\r
235     public void testAddMessagesToRecoveryQueueException() {\r
236         addQueueIllegalException.expect(isA(DCAEAnalyticsRuntimeException.class));\r
237         addQueueIllegalException.expectCause(isA(IllegalStateException.class));\r
238 \r
239         DMaaPMRPublisherQueue dmaapMRPublisherQueue = mock(DMaaPMRPublisherQueue.class);\r
240 \r
241         given(dmaapMRPublisherQueue.addRecoverableMessages(Mockito.<String>anyList()))\r
242                 .willThrow(IllegalStateException.class);\r
243         List<String> messages = new ArrayList<String>();\r
244 \r
245         BaseDMaaPMRComponent.addMessagesToRecoveryQueue(dmaapMRPublisherQueue, messages);\r
246     }\r
247 \r
248 \r
249     @Test\r
250     public void testResponseHandler() {\r
251         HttpResponse mockHttpResponse = mock(HttpResponse.class);\r
252         StatusLine mockStatusLine = mock(StatusLine.class);\r
253         HttpEntity mockHttpEntity = mock(HttpEntity.class);\r
254         // Could not mock EntityUtils as it's final class\r
255         //EntityUtils mockEntityUtils = mock(EntityUtils.class);\r
256 \r
257         given(mockHttpResponse.getStatusLine()).willReturn(mockStatusLine);\r
258         given(mockStatusLine.getStatusCode()).willReturn(200);\r
259         given(mockHttpResponse.getEntity()).willReturn(null);\r
260         //given(mockEntityUtils.toString()).willReturn("Test value");\r
261 \r
262         ResponseHandler<Pair<Integer, String>> responseHandler = BaseDMaaPMRComponent.responseHandler();\r
263         try {\r
264             Pair<Integer, String> mappedResponse = responseHandler.handleResponse(mockHttpResponse);\r
265             assertTrue("Http response code returned properly ", mappedResponse.getLeft().equals(200));\r
266             assertTrue("Http response body returned properly ", mappedResponse.getRight().equals(""));\r
267         } catch (IOException e) {\r
268             e.printStackTrace();\r
269         }\r
270     }\r
271 \r
272 \r
273     @Test\r
274     public void testCreateSubscriberResponse() {\r
275         DMaaPMRSubscriberResponse dmaapMRSubscriberResponse =\r
276                 BaseDMaaPMRComponent.createSubscriberResponse(200, "Test Message", getTwoSampleMessages());\r
277 \r
278         assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(200));\r
279         assertEquals(dmaapMRSubscriberResponse.getResponseMessage(), "Test Message");\r
280         assertThat(dmaapMRSubscriberResponse.getFetchedMessages().size(), is(2));\r
281 \r
282     }\r
283 \r
284     @Test\r
285     public void testCreateSubscriberResponse_no_message() {\r
286         DMaaPMRSubscriberResponse dmaapMRSubscriberResponse =\r
287                 BaseDMaaPMRComponent.createSubscriberResponse(200, "Test Message", null);\r
288 \r
289         assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(200));\r
290         assertEquals(dmaapMRSubscriberResponse.getResponseMessage(), "Test Message");\r
291         assertThat(dmaapMRSubscriberResponse.getFetchedMessages().size(), is(0));\r
292 \r
293     }\r
294 \r
295 }\r
296 \r
297 \r
298 \r
299 \r
300 \r