2cd854af78b3e56fe301550794d12a96222d6d7b
[dcaegen2/collectors/datafile.git] /
1 /*
2  * ============LICENSE_START======================================================================
3  * Copyright (C) 2018 NOKIA Intellectual Property, 2018-2019 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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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
13  * the License.
14  * ============LICENSE_END========================================================================
15  */
16
17 package org.onap.dcaegen2.collectors.datafile.configuration;
18
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;
27
28 import com.google.gson.JsonElement;
29 import com.google.gson.JsonObject;
30 import com.google.gson.JsonParser;
31
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;
37
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;
43
44 /**
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>
47  */
48 @ExtendWith({MockitoExtension.class})
49 class DatafileAppConfigTest {
50
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;
54
55     private static DatafileAppConfig datafileAppConfig;
56     private static AppConfig appConfig;
57
58     private static String filePath = Objects
59             .requireNonNull(DatafileAppConfigTest.class.getClassLoader().getResource(DATAFILE_ENDPOINTS)).getFile();
60
61     @BeforeEach
62     public void setUp() {
63         datafileAppConfig = spy(DatafileAppConfig.class);
64         appConfig = spy(new AppConfig());
65     }
66
67     @Test
68     public void whenApplicationWasStarted_FilePathIsSet() {
69         // When
70         datafileAppConfig.setFilepath(filePath);
71
72         // Then
73         verify(datafileAppConfig, times(1)).setFilepath(anyString());
74         verify(datafileAppConfig, times(0)).initFileStreamReader();
75         Assertions.assertEquals(filePath, datafileAppConfig.getFilepath());
76     }
77
78     @Test
79     public void whenTheConfigurationFits_GetFtpsAndDmaapObjectRepresentationConfiguration() throws IOException {
80         // Given
81         InputStream inputStream =
82                 new ByteArrayInputStream((getJsonConfig(CORRECT_JSON).getBytes(StandardCharsets.UTF_8)));
83
84         // When
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();
91
92         // Then
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());
102
103     }
104
105     @Test
106     public void whenFileIsNotExist_ThrowIoException() {
107         // Given
108         filePath = "/temp.json";
109         datafileAppConfig.setFilepath(filePath);
110
111         // When
112         datafileAppConfig.initFileStreamReader();
113
114         // Then
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());
120
121     }
122
123     @Test
124     public void whenFileIsExistsButJsonIsIncorrect() throws IOException {
125         // Given
126         InputStream inputStream =
127                 new ByteArrayInputStream((getJsonConfig(INCORRECT_JSON).getBytes(StandardCharsets.UTF_8)));
128
129         // When
130         datafileAppConfig.setFilepath(filePath);
131         doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
132         datafileAppConfig.initFileStreamReader();
133
134         // Then
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());
140
141     }
142
143
144     @Test
145     public void whenTheConfigurationFits_ButRootElementIsNotAJsonObject() throws IOException {
146         // Given
147         InputStream inputStream =
148                 new ByteArrayInputStream((getJsonConfig(CORRECT_JSON).getBytes(StandardCharsets.UTF_8)));
149         // When
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();
159
160         // Then
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());
166     }
167
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);
181
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");
187         if (correct) {
188             dmaapProducerConfigData.addProperty("dmaapUserName", "dradmin");
189             dmaapProducerConfigData.addProperty("dmaapUserPassword", "dradmin");
190             dmaapProducerConfigData.addProperty("dmaapContentType", "application/octet-stream");
191         }
192
193         JsonObject dmaapConfigs = new JsonObject();
194         dmaapConfigs.add("dmaapConsumerConfiguration", dmaapConsumerConfigData);
195         dmaapConfigs.add("dmaapProducerConfiguration", dmaapProducerConfigData);
196
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");
202
203         JsonObject security = new JsonObject();
204         security.addProperty("trustStorePath", "trustStorePath");
205         security.addProperty("trustStorePasswordPath", "trustStorePasswordPath");
206         security.addProperty("keyStorePath", "keyStorePath");
207         security.addProperty("keyStorePasswordPath", "keyStorePasswordPath");
208         security.addProperty("enableDmaapCertAuth", "enableDmaapCertAuth");
209
210         JsonObject ftpesConfiguration = new JsonObject();
211         ftpesConfiguration.add("ftpesConfiguration", ftpesConfigData);
212
213         JsonObject configs = new JsonObject();
214         configs.add("dmaap", dmaapConfigs);
215         configs.add("ftp", ftpesConfiguration);
216         configs.add("security", security);
217
218         JsonObject completeJson = new JsonObject();
219         completeJson.add("configs", configs);
220
221         return completeJson.toString();
222     }
223 }