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.service;
19 import static org.junit.Assert.assertNotNull;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.mockito.Mockito.spy;
23 import java.util.List;
24 import java.util.Optional;
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;
34 import com.google.gson.JsonElement;
35 import com.google.gson.JsonParser;
37 import reactor.core.publisher.Mono;
38 import reactor.test.StepVerifier;
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>
44 class DmaapConsumerJsonParserTest {
47 void whenPassingCorrectJson_validationNotThrowingAnException() throws DmaapNotFoundException {
48 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
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();
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();
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);
66 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
68 assertNotNull(fileDataResult);
69 assertEquals(expectedFileData, fileDataResult.get(0));
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();
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);
87 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
89 assertNotNull(fileDataResult);
90 assertEquals(0, fileDataResult.size());
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();
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);
107 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
109 assertNotNull(fileDataResult);
110 assertEquals(0, fileDataResult.size());
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();
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);
128 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
130 assertNotNull(fileDataResult);
131 assertEquals(0, fileDataResult.size());
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();
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);
149 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
151 assertNotNull(fileDataResult);
152 assertEquals(0, fileDataResult.size());
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();
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);
175 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
177 assertNotNull(fileDataResult);
178 assertEquals(1, fileDataResult.size());
182 void whenPassingJsonWithoutMandatoryHeaderInformation_validationThrowingAnException() {
183 JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES_INVALID")
184 .changeType("FileReady_INVALID").notificationFieldsVersion("1.0_INVALID").build();
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);
193 StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(incorrectMessageString)))
194 .expectSubscription().expectError(DmaapNotFoundException.class).verify();
198 void whenPassingJsonWithNullJsonElement_validationThrowingAnException() {
199 JsonMessage message = new JsonMessage.JsonMessageBuilder().build();
201 String incorrectMessageString = message.toString();
202 String parsedString = message.getParsed();
203 DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
204 JsonElement jsonElement = new JsonParser().parse(parsedString);
206 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
207 .getJsonObjectFromAnArray(jsonElement);
209 StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(incorrectMessageString)))
210 .expectSubscription().expectError(DmaapNotFoundException.class).verify();