12c8c7e74d972bb9611e921471ff07dbacea05cb
[dcaegen2/collectors/datafile.git] /
1 /*
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
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.JsonParser;
30
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;
36
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;
42
43 /**
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>
46  */
47 @ExtendWith({MockitoExtension.class})
48 class DatafileAppConfigTest {
49
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\"}}}}";
68
69     private static DatafileAppConfig datafileAppConfig;
70     private static AppConfig appConfig;
71
72     private static String filePath = Objects
73             .requireNonNull(DatafileAppConfigTest.class.getClassLoader().getResource(DATAFILE_ENDPOINTS)).getFile();
74
75     @BeforeEach
76     public void setUp() {
77         datafileAppConfig = spy(DatafileAppConfig.class);
78         appConfig = spy(new AppConfig());
79     }
80
81     @Test
82     public void whenApplicationWasStarted_FilePathIsSet() {
83         // When
84         datafileAppConfig.setFilepath(filePath);
85
86         // Then
87         verify(datafileAppConfig, times(1)).setFilepath(anyString());
88         verify(datafileAppConfig, times(0)).initFileStreamReader();
89         Assertions.assertEquals(filePath, datafileAppConfig.getFilepath());
90     }
91
92     @Test
93     public void whenTheConfigurationFits_GetAaiAndDmaapObjectRepresentationConfiguration() throws IOException {
94         // Given
95         InputStream inputStream = new ByteArrayInputStream((JSON_STRING.getBytes(StandardCharsets.UTF_8)));
96
97         // When
98         datafileAppConfig.setFilepath(filePath);
99         doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
100         datafileAppConfig.initFileStreamReader();
101         appConfig.dmaapConsumerConfiguration = datafileAppConfig.getDmaapConsumerConfiguration();
102         appConfig.dmaapPublisherConfiguration = datafileAppConfig.getDmaapPublisherConfiguration();
103
104         // Then
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());
113
114     }
115
116     @Test
117     public void whenFileIsNotExist_ThrowIoException() {
118         // Given
119         filePath = "/temp.json";
120         datafileAppConfig.setFilepath(filePath);
121
122         // When
123         datafileAppConfig.initFileStreamReader();
124
125         // Then
126         verify(datafileAppConfig, times(1)).setFilepath(anyString());
127         verify(datafileAppConfig, times(1)).initFileStreamReader();
128         Assertions.assertNull(datafileAppConfig.getDmaapConsumerConfiguration());
129         Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
130
131     }
132
133     @Test
134     public void whenFileIsExistsButJsonIsIncorrect() throws IOException {
135         // Given
136         InputStream inputStream = new ByteArrayInputStream((INCORRECT_JSON_STRING.getBytes(StandardCharsets.UTF_8)));
137
138         // When
139         datafileAppConfig.setFilepath(filePath);
140         doReturn(inputStream).when(datafileAppConfig).getInputStream(any());
141         datafileAppConfig.initFileStreamReader();
142
143         // Then
144         verify(datafileAppConfig, times(1)).setFilepath(anyString());
145         verify(datafileAppConfig, times(1)).initFileStreamReader();
146         Assertions.assertNotNull(datafileAppConfig.getDmaapConsumerConfiguration());
147         Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
148
149     }
150
151
152     @Test
153     public void whenTheConfigurationFits_ButRootElementIsNotAJsonObject() throws IOException {
154         // Given
155         InputStream inputStream = new ByteArrayInputStream((JSON_STRING.getBytes(StandardCharsets.UTF_8)));
156         // When
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();
165
166         // Then
167         verify(datafileAppConfig, times(1)).setFilepath(anyString());
168         verify(datafileAppConfig, times(1)).initFileStreamReader();
169         Assertions.assertNull(datafileAppConfig.getDmaapConsumerConfiguration());
170         Assertions.assertNull(datafileAppConfig.getDmaapPublisherConfiguration());
171     }
172 }