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.utils.JsonMessage;
30 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
32 import com.google.gson.JsonElement;
33 import com.google.gson.JsonParser;
35 import reactor.core.publisher.Mono;
36 import reactor.test.StepVerifier;
39 * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
40 * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
42 class DmaapConsumerJsonParserTest {
45 void whenPassingCorrectJson_validationNotThrowingAnException() throws DmaapNotFoundException {
46 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
47 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz").compression("gzip")
48 .fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
49 JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
50 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
52 FileData expectedFileData = ImmutableFileData.builder().changeIdentifier("PM_MEAS_FILES")
53 .changeType("FileReady").location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz")
54 .compression("gzip").fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
56 String messageString = message.toString();
57 String parsedString = message.getParsed();
58 DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
59 JsonElement jsonElement = new JsonParser().parse(parsedString);
60 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
61 .getJsonObjectFromAnArray(jsonElement);
63 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
65 assertNotNull(fileDataResult);
66 assertEquals(expectedFileData, fileDataResult.get(0));
70 void whenPassingCorrectJsonWihoutName_noFileData() {
71 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
72 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz").compression("gzip")
73 .fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
74 JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
75 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
77 String messageString = message.toString();
78 String parsedString = message.getParsed();
79 DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
80 JsonElement jsonElement = new JsonParser().parse(parsedString);
81 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
82 .getJsonObjectFromAnArray(jsonElement);
84 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
86 assertNotNull(fileDataResult);
87 assertEquals(0, fileDataResult.size());
91 void whenPassingCorrectJsonWihoutLocation_noFileData() {
92 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
93 .compression("gzip").fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
94 JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
95 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
97 String messageString = message.toString();
98 String parsedString = message.getParsed();
99 DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
100 JsonElement jsonElement = new JsonParser().parse(parsedString);
101 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
102 .getJsonObjectFromAnArray(jsonElement);
104 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
106 assertNotNull(fileDataResult);
107 assertEquals(0, fileDataResult.size());
111 void whenPassingCorrectJsonWihoutCompression_noFileData() {
112 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
113 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz")
114 .fileFormatType("org.3GPP.32.435#measCollec").fileFormatVersion("V10").build();
115 JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
116 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
118 String messageString = message.toString();
119 String parsedString = message.getParsed();
120 DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
121 JsonElement jsonElement = new JsonParser().parse(parsedString);
122 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
123 .getJsonObjectFromAnArray(jsonElement);
125 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
127 assertNotNull(fileDataResult);
128 assertEquals(0, fileDataResult.size());
132 void whenPassingCorrectJsonWihoutFileFormatType_noFileData() {
133 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
134 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz").compression("gzip")
135 .fileFormatVersion("V10").build();
136 JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
137 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalField).build();
139 String messageString = message.toString();
140 String parsedString = message.getParsed();
141 DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
142 JsonElement jsonElement = new JsonParser().parse(parsedString);
143 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
144 .getJsonObjectFromAnArray(jsonElement);
146 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
148 assertNotNull(fileDataResult);
149 assertEquals(0, fileDataResult.size());
153 void whenPassingOneCorrectJsonWihoutFileFormatVersionAndOneCorrect_oneFileData() {
154 AdditionalField additionalFaultyField =
155 new JsonMessage.AdditionalFieldBuilder().name("A20161224.1030-1045.bin.gz")
156 .location("ftpes://192.168.0.101:22/ftp/rop/A20161224.1030-1045.bin.gz").compression("gzip")
157 .fileFormatType("org.3GPP.32.435#measCollec").build();
158 AdditionalField additionalField = 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").fileFormatVersion("V10").build();
161 JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES")
162 .changeType("FileReady").notificationFieldsVersion("1.0").addAdditionalField(additionalFaultyField)
163 .addAdditionalField(additionalField).build();
165 String messageString = message.toString();
166 String parsedString = message.getParsed();
167 DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
168 JsonElement jsonElement = new JsonParser().parse(parsedString);
169 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
170 .getJsonObjectFromAnArray(jsonElement);
172 List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
174 assertNotNull(fileDataResult);
175 assertEquals(1, fileDataResult.size());
179 void whenPassingJsonWithoutMandatoryHeaderInformation_validationThrowingAnException() {
180 JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES_INVALID")
181 .changeType("FileReady_INVALID").notificationFieldsVersion("1.0_INVALID").build();
183 String incorrectMessageString = message.toString();
184 String parsedString = message.getParsed();
185 DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
186 JsonElement jsonElement = new JsonParser().parse(parsedString);
187 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
188 .getJsonObjectFromAnArray(jsonElement);
190 StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(incorrectMessageString)))
191 .expectSubscription().expectError(DmaapNotFoundException.class).verify();
195 void whenPassingJsonWithNullJsonElement_validationThrowingAnException() {
196 JsonMessage message = new JsonMessage.JsonMessageBuilder().build();
198 String incorrectMessageString = message.toString();
199 String parsedString = message.getParsed();
200 DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
201 JsonElement jsonElement = new JsonParser().parse(parsedString);
203 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
204 .getJsonObjectFromAnArray(jsonElement);
206 StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(incorrectMessageString)))
207 .expectSubscription().expectError(DmaapNotFoundException.class).verify();