2 * ============LICENSE_START=======================================================
3 * Datafile Collector Service
4 * ================================================================================
5 * Copyright (C) 2018 NOKIA 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.
18 * ============LICENSE_END=========================================================
21 package org.onap.dcaegen2.collectors.datafile.configuration;
23 import static org.mockito.ArgumentMatchers.any;
24 import static org.mockito.ArgumentMatchers.anyString;
25 import static org.mockito.Mockito.doReturn;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.spy;
28 import static org.mockito.Mockito.times;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.when;
32 import com.google.gson.JsonElement;
33 import com.google.gson.JsonParser;
34 import java.io.ByteArrayInputStream;
35 import java.io.IOException;
36 import java.io.InputStream;
37 import java.nio.charset.StandardCharsets;
38 import java.util.Objects;
39 import org.junit.jupiter.api.Assertions;
40 import org.junit.jupiter.api.BeforeEach;
41 import org.junit.jupiter.api.Test;
42 import org.junit.jupiter.api.extension.ExtendWith;
43 import org.onap.dcaegen2.collectors.datafile.configuration.AppConfig;
44 import org.onap.dcaegen2.collectors.datafile.configuration.DatafileAppConfig;
45 import org.onap.dcaegen2.collectors.datafile.integration.junit5.mockito.MockitoExtension;
48 * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/9/18
50 @ExtendWith({MockitoExtension.class})
51 class DatafileAppConfigTest {
53 private static final String DATAFILE_ENDPOINTS = "datafile_endpoints.json";
54 private static final String jsonString = "{\"configs\":{\"aai\":{\"aaiClientConfiguration\":{\"aaiHost\":"
55 + "\"localhost\",\"aaiPort\":8080,\"aaiIgnoreSslCertificateErrors\":true,\"aaiProtocol\":"
56 + "\"https\",\"aaiUserName\":\"admin\",\"aaiUserPassword\":\"admin\",\"aaiBasePath\":\"/aai/v11\","
57 + "\"aaiPnfPath\":\"/network/pnfs/pnf\",\"aaiHeaders\":{\"X-FromAppId\":\"datafile\",\"X-TransactionId\":\"9999\","
58 + "\"Accept\":\"application/json\",\"Real-Time\":\"true\",\"Content-Type\":\"application/merge-patch+json\","
59 + "\"Authorization\":\"Basic QUFJOkFBSQ==\"}}},"
60 + "\"dmaap\":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\","
61 + "\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2222,"
62 + "\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\""
63 + ":\"admin\",\"messageLimit\":1000,\"timeoutMs\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":"
64 + "\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\","
65 + "\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\"}}}}";
67 private static final String incorrectJsonString = "{\"configs\":{\"aai\":{\"aaiClientConfiguration\":{\"aaiHost\":"
68 + "\"localhost\",\"aaiPort\":8080,\"aaiIgnoreSslCertificateErrors\":true,\"aaiProtocol\":\"https\","
69 + "\"aaiUserName\":\"admin\",\"aaiUserPassword\":\"admin\",\"aaiBasePath\":\"/aai/v11\",\"aaiPnfPath\":"
70 + "\"/network/pnfs/pnf\",\"aaiHeaders\":{\"X-FromAppId\":\"datafile\",\"X-TransactionId\":\"9999\",\"Accept\":"
71 + "\"application/json\",\"Real-Time\":\"true\",\"Content-Type\":\"application/merge-patch+json\","
72 + "\"Authorization\":\"Basic QUFJOkFBSQ==\"}}},\"dmaap\""
73 + ":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\",\"dmaapContentType\""
74 + ":\"application/json\",\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2222,\"dmaapProtocol\":\"http\""
75 + ",\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\",\"messageLimit\""
76 + ":1000,\"timeoutMs\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":\"application/json\","
77 + "\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\",\"dmaaptopicName\""
78 + ":\"temp\",\"dmaapuserName\":\"admin\",\"dmaapuserPassword\":\"admin\"}}}}";
80 private static DatafileAppConfig datafileAppConfig;
81 private static AppConfig appConfig;
83 private static String filePath = Objects
84 .requireNonNull(DatafileAppConfigTest.class.getClassLoader().getResource(DATAFILE_ENDPOINTS)).getFile();
88 datafileAppConfig = spy(DatafileAppConfig.class);
89 appConfig = spy(new AppConfig());
93 void whenApplicationWasStarted_FilePathIsSet() {
97 datafileAppConfig.setFilepath(filePath);
101 verify(datafileAppConfig, times(1)).setFilepath(anyString());
102 verify(datafileAppConfig, times(0)).initFileStreamReader();
103 Assertions.assertEquals(filePath, datafileAppConfig.getFilepath());
107 void whenTheConfigurationFits_GetAaiAndDmaapObjectRepresentationConfiguration()
112 InputStream inputStream = new ByteArrayInputStream((jsonString.getBytes(
113 StandardCharsets.UTF_8)));
117 datafileAppConfig.setFilepath(filePath);
118 doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
119 datafileAppConfig.initFileStreamReader();
120 appConfig.dmaapConsumerConfiguration = datafileAppConfig.getDmaapConsumerConfiguration();
121 appConfig.dmaapPublisherConfiguration = datafileAppConfig.getDmaapPublisherConfiguration();
122 appConfig.aaiClientConfiguration = datafileAppConfig.getAaiClientConfiguration();
126 verify(datafileAppConfig, times(1)).setFilepath(anyString());
127 verify(datafileAppConfig, times(1)).initFileStreamReader();
128 Assertions.assertNotNull(datafileAppConfig.getAaiClientConfiguration());
129 Assertions.assertNotNull(datafileAppConfig.getDmaapConsumerConfiguration());
130 Assertions.assertNotNull(datafileAppConfig.getDmaapPublisherConfiguration());
132 .assertEquals(appConfig.getDmaapPublisherConfiguration(), datafileAppConfig.getDmaapPublisherConfiguration());
134 .assertEquals(appConfig.getDmaapConsumerConfiguration(), datafileAppConfig.getDmaapConsumerConfiguration());
136 .assertEquals(appConfig.getAaiClientConfiguration(), datafileAppConfig.getAaiClientConfiguration());
141 void whenFileIsNotExist_ThrowIoException() {
145 filePath = "/temp.json";
146 datafileAppConfig.setFilepath(filePath);
150 datafileAppConfig.initFileStreamReader();
154 verify(datafileAppConfig, times(1)).setFilepath(anyString());
155 verify(datafileAppConfig, times(1)).initFileStreamReader();
156 Assertions.assertNull(datafileAppConfig.getAaiClientConfiguration());
157 Assertions.assertNull(datafileAppConfig.getDmaapConsumerConfiguration());
158 Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
163 void whenFileIsExistsButJsonIsIncorrect() throws IOException {
167 InputStream inputStream = new ByteArrayInputStream((incorrectJsonString.getBytes(
168 StandardCharsets.UTF_8)));
172 datafileAppConfig.setFilepath(filePath);
173 doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
174 datafileAppConfig.initFileStreamReader();
179 verify(datafileAppConfig, times(1)).setFilepath(anyString());
180 verify(datafileAppConfig, times(1)).initFileStreamReader();
181 Assertions.assertNotNull(datafileAppConfig.getAaiClientConfiguration());
182 Assertions.assertNotNull(datafileAppConfig.getDmaapConsumerConfiguration());
183 Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
189 void whenTheConfigurationFits_ButRootElementIsNotAJsonObject()
192 InputStream inputStream = new ByteArrayInputStream((jsonString.getBytes(
193 StandardCharsets.UTF_8)));
195 datafileAppConfig.setFilepath(filePath);
196 doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
197 JsonElement jsonElement = mock(JsonElement.class);
198 when(jsonElement.isJsonObject()).thenReturn(false);
199 doReturn(jsonElement).when(datafileAppConfig).getJsonElement(any(JsonParser.class), any(InputStream.class));
200 datafileAppConfig.initFileStreamReader();
201 appConfig.dmaapConsumerConfiguration = datafileAppConfig.getDmaapConsumerConfiguration();
202 appConfig.dmaapPublisherConfiguration = datafileAppConfig.getDmaapPublisherConfiguration();
203 appConfig.aaiClientConfiguration = datafileAppConfig.getAaiClientConfiguration();
206 verify(datafileAppConfig, times(1)).setFilepath(anyString());
207 verify(datafileAppConfig, times(1)).initFileStreamReader();
208 Assertions.assertNull(datafileAppConfig.getAaiClientConfiguration());
209 Assertions.assertNull(datafileAppConfig.getDmaapConsumerConfiguration());
210 Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());