2 * ============LICENSE_START======================================================================
3 * Copyright (C) 2018 NOKIA Intellectual Property, 2018 Nordix Foundation. All rights reserved.
4 * ===============================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
6 * in compliance with the License. You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software distributed under the License
11 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12 * or implied. See the License for the specific language governing permissions and limitations under
14 * ============LICENSE_END========================================================================
17 package org.onap.dcaegen2.collectors.datafile.configuration;
19 import static org.mockito.ArgumentMatchers.any;
20 import static org.mockito.ArgumentMatchers.anyString;
21 import static org.mockito.Mockito.doReturn;
22 import static org.mockito.Mockito.mock;
23 import static org.mockito.Mockito.spy;
24 import static org.mockito.Mockito.times;
25 import static org.mockito.Mockito.verify;
26 import static org.mockito.Mockito.when;
28 import com.google.gson.JsonElement;
29 import com.google.gson.JsonObject;
30 import com.google.gson.JsonParser;
32 import java.io.ByteArrayInputStream;
33 import java.io.IOException;
34 import java.io.InputStream;
35 import java.nio.charset.StandardCharsets;
36 import java.util.Objects;
38 import org.junit.jupiter.api.Assertions;
39 import org.junit.jupiter.api.BeforeEach;
40 import org.junit.jupiter.api.Test;
41 import org.junit.jupiter.api.extension.ExtendWith;
42 import org.onap.dcaegen2.collectors.datafile.integration.junit5.mockito.MockitoExtension;
45 * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/9/18
46 * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
48 @ExtendWith({MockitoExtension.class})
49 class DatafileAppConfigTest {
51 private static final String DATAFILE_ENDPOINTS = "datafile_endpoints.json";
52 private static final boolean CORRECT_JSON = true;
53 private static final boolean INCORRECT_JSON = false;
55 private static DatafileAppConfig datafileAppConfig;
56 private static AppConfig appConfig;
58 private static String filePath = Objects
59 .requireNonNull(DatafileAppConfigTest.class.getClassLoader().getResource(DATAFILE_ENDPOINTS)).getFile();
63 datafileAppConfig = spy(DatafileAppConfig.class);
64 appConfig = spy(new AppConfig());
68 public void whenApplicationWasStarted_FilePathIsSet() {
70 datafileAppConfig.setFilepath(filePath);
73 verify(datafileAppConfig, times(1)).setFilepath(anyString());
74 verify(datafileAppConfig, times(0)).initFileStreamReader();
75 Assertions.assertEquals(filePath, datafileAppConfig.getFilepath());
79 public void whenTheConfigurationFits_GetFtpsAndDmaapObjectRepresentationConfiguration() throws IOException {
81 InputStream inputStream =
82 new ByteArrayInputStream((getJsonConfig(CORRECT_JSON).getBytes(StandardCharsets.UTF_8)));
85 datafileAppConfig.setFilepath(filePath);
86 doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
87 datafileAppConfig.initFileStreamReader();
88 appConfig.dmaapConsumerConfiguration = datafileAppConfig.getDmaapConsumerConfiguration();
89 appConfig.dmaapPublisherConfiguration = datafileAppConfig.getDmaapPublisherConfiguration();
90 appConfig.ftpesConfig = datafileAppConfig.getFtpesConfiguration();
93 verify(datafileAppConfig, times(1)).setFilepath(anyString());
94 verify(datafileAppConfig, times(1)).initFileStreamReader();
95 Assertions.assertNotNull(datafileAppConfig.getDmaapConsumerConfiguration());
96 Assertions.assertNotNull(datafileAppConfig.getDmaapPublisherConfiguration());
97 Assertions.assertEquals(appConfig.getDmaapPublisherConfiguration(),
98 datafileAppConfig.getDmaapPublisherConfiguration());
99 Assertions.assertEquals(appConfig.getDmaapConsumerConfiguration(),
100 datafileAppConfig.getDmaapConsumerConfiguration());
101 Assertions.assertEquals(appConfig.getFtpesConfiguration(), datafileAppConfig.getFtpesConfiguration());
106 public void whenFileIsNotExist_ThrowIoException() {
108 filePath = "/temp.json";
109 datafileAppConfig.setFilepath(filePath);
112 datafileAppConfig.initFileStreamReader();
115 verify(datafileAppConfig, times(1)).setFilepath(anyString());
116 verify(datafileAppConfig, times(1)).initFileStreamReader();
117 Assertions.assertNull(datafileAppConfig.getDmaapConsumerConfiguration());
118 Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
119 Assertions.assertNull(datafileAppConfig.getFtpesConfiguration());
124 public void whenFileIsExistsButJsonIsIncorrect() throws IOException {
126 InputStream inputStream =
127 new ByteArrayInputStream((getJsonConfig(INCORRECT_JSON).getBytes(StandardCharsets.UTF_8)));
130 datafileAppConfig.setFilepath(filePath);
131 doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
132 datafileAppConfig.initFileStreamReader();
135 verify(datafileAppConfig, times(1)).setFilepath(anyString());
136 verify(datafileAppConfig, times(1)).initFileStreamReader();
137 Assertions.assertNotNull(datafileAppConfig.getDmaapConsumerConfiguration());
138 Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
139 Assertions.assertNotNull(datafileAppConfig.getFtpesConfiguration());
145 public void whenTheConfigurationFits_ButRootElementIsNotAJsonObject() throws IOException {
147 InputStream inputStream =
148 new ByteArrayInputStream((getJsonConfig(CORRECT_JSON).getBytes(StandardCharsets.UTF_8)));
150 datafileAppConfig.setFilepath(filePath);
151 doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
152 JsonElement jsonElement = mock(JsonElement.class);
153 when(jsonElement.isJsonObject()).thenReturn(false);
154 doReturn(jsonElement).when(datafileAppConfig).getJsonElement(any(JsonParser.class), any(InputStream.class));
155 datafileAppConfig.initFileStreamReader();
156 appConfig.dmaapConsumerConfiguration = datafileAppConfig.getDmaapConsumerConfiguration();
157 appConfig.dmaapPublisherConfiguration = datafileAppConfig.getDmaapPublisherConfiguration();
158 appConfig.ftpesConfig = datafileAppConfig.getFtpesConfiguration();
161 verify(datafileAppConfig, times(1)).setFilepath(anyString());
162 verify(datafileAppConfig, times(1)).initFileStreamReader();
163 Assertions.assertNull(datafileAppConfig.getDmaapConsumerConfiguration());
164 Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
165 Assertions.assertNull(datafileAppConfig.getFtpesConfiguration());
168 private String getJsonConfig(boolean correct) {
169 JsonObject dmaapConsumerConfigData = new JsonObject();
170 dmaapConsumerConfigData.addProperty("dmaapHostName", "localhost");
171 dmaapConsumerConfigData.addProperty("dmaapPortNumber", 2222);
172 dmaapConsumerConfigData.addProperty("dmaapTopicName", "/events/unauthenticated.VES_NOTIFICATION_OUTPUT");
173 dmaapConsumerConfigData.addProperty("dmaapProtocol", "http");
174 dmaapConsumerConfigData.addProperty("dmaapUserName", "admin");
175 dmaapConsumerConfigData.addProperty("dmaapUserPassword", "admin");
176 dmaapConsumerConfigData.addProperty("dmaapContentType", "application/json");
177 dmaapConsumerConfigData.addProperty("consumerId", "C12");
178 dmaapConsumerConfigData.addProperty("consumerGroup", "OpenDcae-c12");
179 dmaapConsumerConfigData.addProperty("timeoutMS", -1);
180 dmaapConsumerConfigData.addProperty("messageLimit", 1);
182 JsonObject dmaapProducerConfigData = new JsonObject();
183 dmaapProducerConfigData.addProperty("dmaapHostName", "localhost");
184 dmaapProducerConfigData.addProperty("dmaapPortNumber", 3907);
185 dmaapProducerConfigData.addProperty("dmaapTopicName", "publish");
186 dmaapProducerConfigData.addProperty("dmaapProtocol", "https");
188 dmaapProducerConfigData.addProperty("dmaapUserName", "dradmin");
189 dmaapProducerConfigData.addProperty("dmaapUserPassword", "dradmin");
190 dmaapProducerConfigData.addProperty("dmaapContentType", "application/octet-stream");
193 JsonObject dmaapConfigs = new JsonObject();
194 dmaapConfigs.add("dmaapConsumerConfiguration", dmaapConsumerConfigData);
195 dmaapConfigs.add("dmaapProducerConfiguration", dmaapProducerConfigData);
197 JsonObject ftpesConfigData = new JsonObject();
198 ftpesConfigData.addProperty("keyCert", "config/ftpKey.jks");
199 ftpesConfigData.addProperty("keyPassword", "secret");
200 ftpesConfigData.addProperty("trustedCA", "config/cacerts");
201 ftpesConfigData.addProperty("trustedCAPassword", "secret");
203 JsonObject ftpesConfiguration = new JsonObject();
204 ftpesConfiguration.add("ftpesConfiguration", ftpesConfigData);
206 JsonObject configs = new JsonObject();
207 configs.add("dmaap", dmaapConfigs);
208 configs.add("ftp", ftpesConfiguration);
210 JsonObject completeJson = new JsonObject();
211 completeJson.add("configs", configs);
213 return completeJson.toString();