8c36a51fcd4953c1e3ea44c3805ff0a69b18ddee
[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.service;
18
19 import static org.junit.Assert.assertNotNull;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.mockito.Mockito.spy;
22
23 import java.util.List;
24 import java.util.Optional;
25
26 import org.junit.jupiter.api.Test;
27 import org.mockito.Mockito;
28 import org.onap.dcaegen2.collectors.datafile.exceptions.DmaapNotFoundException;
29 import org.onap.dcaegen2.collectors.datafile.model.FileData;
30 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
31 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage;
32 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
33
34 import com.google.gson.JsonElement;
35 import com.google.gson.JsonParser;
36
37 import reactor.core.publisher.Mono;
38 import reactor.test.StepVerifier;
39
40 /**
41  * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
42  * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
43  */
44 class DmaapConsumerJsonParserTest {
45
46     @Test
47     void whenPassingCorrectJson_validationNotThrowingAnException() throws DmaapNotFoundException {
48         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
49
50                 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz").compression("gzip")
51                 .fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
52         JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
53                 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
54
55         FileData expectedFileData = ImmutableFileData.builder().changeIdentifier("PM_MEAS_FILES")
56                 .changeType("FileReady").location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz")
57                 .compression("gzip").fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
58
59         String messageString = message.toString();
60         String parsedString = message.getParsed();
61         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
62         JsonElement jsonElement = new JsonParser().parse(parsedString);
63         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
64                 .getJsonObjectFromAnArray(jsonElement);
65
66         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
67
68         assertNotNull(fileDataResult);
69         assertEquals(expectedFileData, fileDataResult.get(0));
70     }
71
72     @Test
73     void whenPassingCorrectJsonWihoutName_noFileData() {
74         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
75                 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz").compression("gzip")
76                 .fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
77         JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
78                 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
79
80         String messageString = message.toString();
81         String parsedString = message.getParsed();
82         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
83         JsonElement jsonElement = new JsonParser().parse(parsedString);
84         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
85                 .getJsonObjectFromAnArray(jsonElement);
86
87         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
88
89         assertNotNull(fileDataResult);
90         assertEquals(0, fileDataResult.size());
91     }
92
93     @Test
94     void whenPassingCorrectJsonWihoutLocation_noFileData() {
95         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
96                 .compression("gzip").fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
97         JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
98                 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
99
100         String messageString = message.toString();
101         String parsedString = message.getParsed();
102         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
103         JsonElement jsonElement = new JsonParser().parse(parsedString);
104         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
105                 .getJsonObjectFromAnArray(jsonElement);
106
107         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
108
109         assertNotNull(fileDataResult);
110         assertEquals(0, fileDataResult.size());
111     }
112
113     @Test
114     void whenPassingCorrectJsonWihoutCompression_noFileData() {
115         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
116                 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz")
117                 .fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
118         JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
119                 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
120
121         String messageString = message.toString();
122         String parsedString = message.getParsed();
123         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
124         JsonElement jsonElement = new JsonParser().parse(parsedString);
125         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
126                 .getJsonObjectFromAnArray(jsonElement);
127
128         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
129
130         assertNotNull(fileDataResult);
131         assertEquals(0, fileDataResult.size());
132     }
133
134     @Test
135     void whenPassingCorrectJsonWihoutFileFormatType_noFileData() {
136         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
137                 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz").compression("gzip")
138                 .fileFormatVersion("V10").build();
139         JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
140                 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
141
142         String messageString = message.toString();
143         String parsedString = message.getParsed();
144         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
145         JsonElement jsonElement = new JsonParser().parse(parsedString);
146         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
147                 .getJsonObjectFromAnArray(jsonElement);
148
149         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
150
151         assertNotNull(fileDataResult);
152         assertEquals(0, fileDataResult.size());
153     }
154
155     @Test
156     void whenPassingOneCorrectJsonWihoutFileFormatVersionAndOneCorrect_oneFileData() {
157         AdditionalField additionalFaultyField =
158                 new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
159                         .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz").compression("gzip")
160                         .fileFormatType("org.3GPP.32.435#measCollec").build();
161         AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
162                 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz").compression("gzip")
163                 .fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
164         JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
165                 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalFaultyField)
166                 .addAdditionalField(additionalField).build();
167
168         String messageString = message.toString();
169         String parsedString = message.getParsed();
170         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
171         JsonElement jsonElement = new JsonParser().parse(parsedString);
172         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
173                 .getJsonObjectFromAnArray(jsonElement);
174
175         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
176
177         assertNotNull(fileDataResult);
178         assertEquals(1, fileDataResult.size());
179     }
180
181     @Test
182     void whenPassingJsonWithoutMandatoryHeaderInformation_validationThrowingAnException() {
183         JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES_INVALID")
184                 .changeType("FileReady_INVALID").notificationFieldsVersion("1.0_INVALID").build();
185
186         String incorrectMessageString = message.toString();
187         String parsedString = message.getParsed();
188         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
189         JsonElement jsonElement = new JsonParser().parse(parsedString);
190         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
191                 .getJsonObjectFromAnArray(jsonElement);
192
193         StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(incorrectMessageString)))
194                 .expectSubscription().expectError(DmaapNotFoundException.class).verify();
195     }
196
197     @Test
198     void whenPassingJsonWithNullJsonElement_validationThrowingAnException() {
199         JsonMessage message = new JsonMessage.JsonMessageBuilder().build();
200
201         String incorrectMessageString = message.toString();
202         String parsedString = message.getParsed();
203         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
204         JsonElement jsonElement = new JsonParser().parse(parsedString);
205
206         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
207                 .getJsonObjectFromAnArray(jsonElement);
208
209         StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(incorrectMessageString)))
210                 .expectSubscription().expectError(DmaapNotFoundException.class).verify();
211     }
212 }