2 * ===============================LICENSE_START======================================
\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
11 * http://www.apache.org/licenses/LICENSE-2.0
\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
21 package org.openecomp.dcae.apod.analytics.dmaap.service;
\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
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
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
59 * @author Manjesh Gowda. Creation Date: 11/4/2016.
\r
61 public class BaseDMaaPMRComponentTest extends BaseAnalyticsDMaaPUnitTest {
\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
72 public void testGetAuthHeaderWithNullValues() {
\r
73 Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader(null, null);
\r
74 assertFalse(" Authentication Header has value ", actualOutput.isPresent());
\r
78 public void testGetAuthHeaderWithUserNullValue() {
\r
79 Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader("USER", null);
\r
80 assertFalse(" Authentication Header has value ", actualOutput.isPresent());
\r
84 public void testGetAuthHeaderWithPasswordNullValue() {
\r
85 Optional<String> actualOutput = BaseDMaaPMRComponent.getAuthHeader(null, "PASSWORD");
\r
86 assertFalse(" Authentication Header has value ", actualOutput.isPresent());
\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
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
102 .setProtocol("https").build();
\r
104 BaseDMaaPMRComponent.createPublisherURI(badPublisherConfig);
\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
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
125 URI actualURI = BaseDMaaPMRComponent.createSubscriberURI(badSubscriberConfig);
\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
134 String actualJSONMsg = BaseDMaaPMRComponent.convertToJsonString(jsonMessage);
\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
143 public ExpectedException expectedJsonProcessingException = ExpectedException.none();
\r
146 public void testConvertToJsonStringBadJsonStringList() {
\r
147 expectedJsonProcessingException.expect(DCAEAnalyticsRuntimeException.class);
\r
148 expectedJsonProcessingException.expectCause(isA(JsonProcessingException.class));
\r
150 List<String> jsonMessage = Arrays.asList(
\r
151 "{\"message\":\"I'm Object 1 Message\"",
\r
152 "\"message\":\"I'm Object 2 Message\"");
\r
154 BaseDMaaPMRComponent.convertToJsonString(jsonMessage);
\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
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
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
186 public void testConvertJsonToStringMessagesNoValues() {
\r
187 String inputJSONMsg = "[]";
\r
188 List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(inputJSONMsg);
\r
189 assertThat(actualList, hasSize(0));
\r
193 public void testConvertJsonToStringMessagesNullValues() {
\r
194 List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(null);
\r
195 assertThat(actualList, hasSize(0));
\r
199 public void testConvertJsonToStringMessagesEmptyValues() {
\r
200 List<String> actualList = BaseDMaaPMRComponent.convertJsonToStringMessages(" ");
\r
201 assertThat(actualList, hasSize(0));
\r
205 public ExpectedException convertToJSONIOException = ExpectedException.none();
\r
208 public void testConvertJsonToStringMessagesException() {
\r
209 convertToJSONIOException.expect(DCAEAnalyticsRuntimeException.class);
\r
210 convertToJSONIOException.expectCause(isA(IOException.class));
\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
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
232 public ExpectedException addQueueIllegalException = ExpectedException.none();
\r
235 public void testAddMessagesToRecoveryQueueException() {
\r
236 addQueueIllegalException.expect(isA(DCAEAnalyticsRuntimeException.class));
\r
237 addQueueIllegalException.expectCause(isA(IllegalStateException.class));
\r
239 DMaaPMRPublisherQueue dmaapMRPublisherQueue = mock(DMaaPMRPublisherQueue.class);
\r
241 given(dmaapMRPublisherQueue.addRecoverableMessages(Mockito.<String>anyList()))
\r
242 .willThrow(IllegalStateException.class);
\r
243 List<String> messages = new ArrayList<String>();
\r
245 BaseDMaaPMRComponent.addMessagesToRecoveryQueue(dmaapMRPublisherQueue, messages);
\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
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
262 ResponseHandler<Pair<Integer, String>> responseHandler = BaseDMaaPMRComponent.responseHandler();
\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
274 public void testCreateSubscriberResponse() {
\r
275 DMaaPMRSubscriberResponse dmaapMRSubscriberResponse =
\r
276 BaseDMaaPMRComponent.createSubscriberResponse(200, "Test Message", getTwoSampleMessages());
\r
278 assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(200));
\r
279 assertEquals(dmaapMRSubscriberResponse.getResponseMessage(), "Test Message");
\r
280 assertThat(dmaapMRSubscriberResponse.getFetchedMessages().size(), is(2));
\r
285 public void testCreateSubscriberResponse_no_message() {
\r
286 DMaaPMRSubscriberResponse dmaapMRSubscriberResponse =
\r
287 BaseDMaaPMRComponent.createSubscriberResponse(200, "Test Message", null);
\r
289 assertThat(dmaapMRSubscriberResponse.getResponseCode(), is(200));
\r
290 assertEquals(dmaapMRSubscriberResponse.getResponseMessage(), "Test Message");
\r
291 assertThat(dmaapMRSubscriberResponse.getFetchedMessages().size(), is(0));
\r