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.JsonParser;
31 import java.io.ByteArrayInputStream;
32 import java.io.IOException;
33 import java.io.InputStream;
34 import java.nio.charset.StandardCharsets;
35 import java.util.Objects;
37 import org.junit.jupiter.api.Assertions;
38 import org.junit.jupiter.api.BeforeEach;
39 import org.junit.jupiter.api.Test;
40 import org.junit.jupiter.api.extension.ExtendWith;
41 import org.onap.dcaegen2.collectors.datafile.integration.junit5.mockito.MockitoExtension;
44 * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/9/18
45 * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
47 @ExtendWith({MockitoExtension.class})
48 class DatafileAppConfigTest {
50 private static final String DATAFILE_ENDPOINTS = "datafile_endpoints.json";
51 private static final String JSON_STRING =
52 "{\"configs\":{\"dmaap\":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\","
53 + "\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\","
54 + "\"dmaapPortNumber\":2222,\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\","
55 + "\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\",\"messageLimit\":1000,"
56 + "\"timeoutMS\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":\"application/json\","
57 + "\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\","
58 + "\"dmaapTopicName\":\"temp\",\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\"}}}}";
59 private static final String INCORRECT_JSON_STRING =
60 "{\"configs\":{\"dmaap\":{\"dmaapConsumerConfiguration\":{\"consumerGroup\":\"other\",\"consumerId\":\"1\","
61 + "\"dmaapContentType\":\"application/json\",\"dmaapHostName\":\"localhost\","
62 + "\"dmaapPortNumber\":2222,\"dmaapProtocol\":\"http\",\"dmaapTopicName\":\"temp\","
63 + "\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\",\"messageLimit\":1000,"
64 + "\"timeoutMS\":1000},\"dmaapProducerConfiguration\":{\"dmaapContentType\":\"application/json\","
65 + "\"dmaapHostName\":\"localhost\",\"dmaapPortNumber\":2223,\"dmaapProtocol\":\"http\","
66 + "\"FAULTY_PARAMETER_NAME\":\"temp\","
67 + "\"dmaapUserName\":\"admin\",\"dmaapUserPassword\":\"admin\"}}}}";
69 private static DatafileAppConfig datafileAppConfig;
70 private static AppConfig appConfig;
72 private static String filePath = Objects
73 .requireNonNull(DatafileAppConfigTest.class.getClassLoader().getResource(DATAFILE_ENDPOINTS)).getFile();
77 datafileAppConfig = spy(DatafileAppConfig.class);
78 appConfig = spy(new AppConfig());
82 public void whenApplicationWasStarted_FilePathIsSet() {
84 datafileAppConfig.setFilepath(filePath);
87 verify(datafileAppConfig, times(1)).setFilepath(anyString());
88 verify(datafileAppConfig, times(0)).initFileStreamReader();
89 Assertions.assertEquals(filePath, datafileAppConfig.getFilepath());
93 public void whenTheConfigurationFits_GetAaiAndDmaapObjectRepresentationConfiguration() throws IOException {
95 InputStream inputStream = new ByteArrayInputStream((JSON_STRING.getBytes(StandardCharsets.UTF_8)));
98 datafileAppConfig.setFilepath(filePath);
99 doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
100 datafileAppConfig.initFileStreamReader();
101 appConfig.dmaapConsumerConfiguration = datafileAppConfig.getDmaapConsumerConfiguration();
102 appConfig.dmaapPublisherConfiguration = datafileAppConfig.getDmaapPublisherConfiguration();
105 verify(datafileAppConfig, times(1)).setFilepath(anyString());
106 verify(datafileAppConfig, times(1)).initFileStreamReader();
107 Assertions.assertNotNull(datafileAppConfig.getDmaapConsumerConfiguration());
108 Assertions.assertNotNull(datafileAppConfig.getDmaapPublisherConfiguration());
109 Assertions.assertEquals(appConfig.getDmaapPublisherConfiguration(),
110 datafileAppConfig.getDmaapPublisherConfiguration());
111 Assertions.assertEquals(appConfig.getDmaapConsumerConfiguration(),
112 datafileAppConfig.getDmaapConsumerConfiguration());
117 public void whenFileIsNotExist_ThrowIoException() {
119 filePath = "/temp.json";
120 datafileAppConfig.setFilepath(filePath);
123 datafileAppConfig.initFileStreamReader();
126 verify(datafileAppConfig, times(1)).setFilepath(anyString());
127 verify(datafileAppConfig, times(1)).initFileStreamReader();
128 Assertions.assertNull(datafileAppConfig.getDmaapConsumerConfiguration());
129 Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
134 public void whenFileIsExistsButJsonIsIncorrect() throws IOException {
136 InputStream inputStream = new ByteArrayInputStream((INCORRECT_JSON_STRING.getBytes(StandardCharsets.UTF_8)));
139 datafileAppConfig.setFilepath(filePath);
140 doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
141 datafileAppConfig.initFileStreamReader();
144 verify(datafileAppConfig, times(1)).setFilepath(anyString());
145 verify(datafileAppConfig, times(1)).initFileStreamReader();
146 Assertions.assertNotNull(datafileAppConfig.getDmaapConsumerConfiguration());
147 Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
153 public void whenTheConfigurationFits_ButRootElementIsNotAJsonObject() throws IOException {
155 InputStream inputStream = new ByteArrayInputStream((JSON_STRING.getBytes(StandardCharsets.UTF_8)));
157 datafileAppConfig.setFilepath(filePath);
158 doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
159 JsonElement jsonElement = mock(JsonElement.class);
160 when(jsonElement.isJsonObject()).thenReturn(false);
161 doReturn(jsonElement).when(datafileAppConfig).getJsonElement(any(JsonParser.class), any(InputStream.class));
162 datafileAppConfig.initFileStreamReader();
163 appConfig.dmaapConsumerConfiguration = datafileAppConfig.getDmaapConsumerConfiguration();
164 appConfig.dmaapPublisherConfiguration = datafileAppConfig.getDmaapPublisherConfiguration();
167 verify(datafileAppConfig, times(1)).setFilepath(anyString());
168 verify(datafileAppConfig, times(1)).initFileStreamReader();
169 Assertions.assertNull(datafileAppConfig.getDmaapConsumerConfiguration());
170 Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());