4aad5f4525865301f48e859dd1e3d146c4e0da56
[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.utils.JsonMessage;
30 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
31
32 import com.google.gson.JsonElement;
33 import com.google.gson.JsonParser;
34
35 import reactor.core.publisher.Mono;
36 import reactor.test.StepVerifier;
37
38 /**
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>
41  */
42 class DmaapConsumerJsonParserTest {
43
44     @Test
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();
51
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();
55
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);
62
63         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
64
65         assertNotNull(fileDataResult);
66         assertEquals(expectedFileData, fileDataResult.get(0));
67     }
68
69     @Test
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();
76
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);
83
84         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
85
86         assertNotNull(fileDataResult);
87         assertEquals(0, fileDataResult.size());
88     }
89
90     @Test
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();
96
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);
103
104         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
105
106         assertNotNull(fileDataResult);
107         assertEquals(0, fileDataResult.size());
108     }
109
110     @Test
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();
117
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);
124
125         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
126
127         assertNotNull(fileDataResult);
128         assertEquals(0, fileDataResult.size());
129     }
130
131     @Test
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();
138
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);
145
146         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
147
148         assertNotNull(fileDataResult);
149         assertEquals(0, fileDataResult.size());
150     }
151
152     @Test
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();
164
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);
171
172         List<FileData> fileDataResult = dmaapConsumerJsonParser.getJsonObject(Mono.just((messageString))).block();
173
174         assertNotNull(fileDataResult);
175         assertEquals(1, fileDataResult.size());
176     }
177
178     @Test
179     void whenPassingJsonWithoutMandatoryHeaderInformation_validationThrowingAnException() {
180         JsonMessage message = new JsonMessage.JsonMessageBuilder().changeIdentifier("PM_MEAS_FILES_INVALID")
181                 .changeType("FileReady_INVALID").notificationFieldsVersion("1.0_INVALID").build();
182
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);
189
190         StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(incorrectMessageString)))
191                 .expectSubscription().expectError(DmaapNotFoundException.class).verify();
192     }
193
194     @Test
195     void whenPassingJsonWithNullJsonElement_validationThrowingAnException() {
196         JsonMessage message = new JsonMessage.JsonMessageBuilder().build();
197
198         String incorrectMessageString = message.toString();
199         String parsedString = message.getParsed();
200         DmaapConsumerJsonParser dmaapConsumerJsonParser = spy(new DmaapConsumerJsonParser());
201         JsonElement jsonElement = new JsonParser().parse(parsedString);
202
203         Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(dmaapConsumerJsonParser)
204                 .getJsonObjectFromAnArray(jsonElement);
205
206         StepVerifier.create(dmaapConsumerJsonParser.getJsonObject(Mono.just(incorrectMessageString)))
207                 .expectSubscription().expectError(DmaapNotFoundException.class).verify();
208     }
209 }