7d54b4d5f11fb5460de3d47412b3e27a83aabd67
[dcaegen2/collectors/datafile.git] /
1 /*
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20
21 package org.onap.dcaegen2.collectors.datafile.configuration;
22
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;
31
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;
46
47 /**
48  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/9/18
49  */
50 @ExtendWith({MockitoExtension.class})
51 class DatafileAppConfigTest {
52
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\"}}}}";
66
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\"}}}}";
79
80     private static DatafileAppConfig datafileAppConfig;
81     private static AppConfig appConfig;
82
83     private static String filePath = Objects
84         .requireNonNull(DatafileAppConfigTest.class.getClassLoader().getResource(DATAFILE_ENDPOINTS)).getFile();
85
86     @BeforeEach
87     void setUp() {
88         datafileAppConfig = spy(DatafileAppConfig.class);
89         appConfig = spy(new AppConfig());
90     }
91
92     @Test
93     void whenApplicationWasStarted_FilePathIsSet() {
94         //
95         // When
96         //
97         datafileAppConfig.setFilepath(filePath);
98         //
99         // Then
100         //
101         verify(datafileAppConfig, times(1)).setFilepath(anyString());
102         verify(datafileAppConfig, times(0)).initFileStreamReader();
103         Assertions.assertEquals(filePath, datafileAppConfig.getFilepath());
104     }
105
106     @Test
107     void whenTheConfigurationFits_GetAaiAndDmaapObjectRepresentationConfiguration()
108         throws IOException {
109         //
110         // Given
111         //
112         InputStream inputStream = new ByteArrayInputStream((jsonString.getBytes(
113             StandardCharsets.UTF_8)));
114         //
115         // When
116         //
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();
123         //
124         // Then
125         //
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());
131         Assertions
132             .assertEquals(appConfig.getDmaapPublisherConfiguration(), datafileAppConfig.getDmaapPublisherConfiguration());
133         Assertions
134             .assertEquals(appConfig.getDmaapConsumerConfiguration(), datafileAppConfig.getDmaapConsumerConfiguration());
135         Assertions
136             .assertEquals(appConfig.getAaiClientConfiguration(), datafileAppConfig.getAaiClientConfiguration());
137
138     }
139
140     @Test
141     void whenFileIsNotExist_ThrowIoException() {
142         //
143         // Given
144         //
145         filePath = "/temp.json";
146         datafileAppConfig.setFilepath(filePath);
147         //
148         // When
149         //
150         datafileAppConfig.initFileStreamReader();
151         //
152         // Then
153         //
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());
159
160     }
161
162     @Test
163     void whenFileIsExistsButJsonIsIncorrect() throws IOException {
164         //
165         // Given
166         //
167         InputStream inputStream = new ByteArrayInputStream((incorrectJsonString.getBytes(
168             StandardCharsets.UTF_8)));
169         //
170         // When
171         //
172         datafileAppConfig.setFilepath(filePath);
173         doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
174         datafileAppConfig.initFileStreamReader();
175
176         //
177         // Then
178         //
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());
184
185     }
186
187
188     @Test
189     void whenTheConfigurationFits_ButRootElementIsNotAJsonObject()
190         throws IOException {
191         // Given
192         InputStream inputStream = new ByteArrayInputStream((jsonString.getBytes(
193             StandardCharsets.UTF_8)));
194         // When
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();
204
205         // Then
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());
211     }
212 }