2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2018 NOKIA Intellectual Property, 2018-2019 Nordix Foundation. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 * ============LICENSE_END=========================================================
19 package org.onap.dcaegen2.collectors.datafile.service;
21 import static org.mockito.Mockito.spy;
23 import com.google.gson.JsonElement;
24 import com.google.gson.JsonParser;
26 import java.util.ArrayList;
27 import java.util.List;
28 import java.util.Optional;
30 import org.junit.jupiter.api.Test;
31 import org.mockito.Mockito;
32 import org.onap.dcaegen2.collectors.datafile.exceptions.DmaapNotFoundException;
33 import org.onap.dcaegen2.collectors.datafile.ftp.Scheme;
34 import org.onap.dcaegen2.collectors.datafile.model.FileData;
35 import org.onap.dcaegen2.collectors.datafile.model.FileReadyMessage;
36 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileData;
37 import org.onap.dcaegen2.collectors.datafile.model.ImmutableFileReadyMessage;
38 import org.onap.dcaegen2.collectors.datafile.model.ImmutableMessageMetaData;
39 import org.onap.dcaegen2.collectors.datafile.model.MessageMetaData;
40 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage;
41 import org.onap.dcaegen2.collectors.datafile.utils.JsonMessage.AdditionalField;
43 import reactor.core.publisher.Mono;
44 import reactor.test.StepVerifier;
47 * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 5/8/18
48 * @author <a href="mailto:henrik.b.andersson@est.tech">Henrik Andersson</a>
50 class JsonMessageParserTest {
51 private static final String NR_RADIO_ERICSSON_EVENT_NAME = "Noti_NrRadio-Ericsson_FileReady";
52 private static final String PRODUCT_NAME = "NrRadio";
53 private static final String VENDOR_NAME = "Ericsson";
54 private static final String LAST_EPOCH_MICROSEC = "1519837825682";
55 private static final String SOURCE_NAME = "5GRAN_DU";
56 private static final String START_EPOCH_MICROSEC = "1519837825682";
57 private static final String TIME_ZONE_OFFSET = "UTC+05:00";
58 private static final String PM_FILE_NAME = "A20161224.1030-1045.bin.gz";
59 private static final String LOCATION = "ftpes://192.168.0.101:22/ftp/rop/" + PM_FILE_NAME;
60 private static final String GZIP_COMPRESSION = "gzip";
61 private static final String FILE_FORMAT_TYPE = "org.3GPP.32.435#measCollec";
62 private static final String FILE_FORMAT_VERSION = "V10";
63 private static final String CHANGE_IDENTIFIER = "PM_MEAS_FILES";
64 private static final String INCORRECT_CHANGE_IDENTIFIER = "INCORRECT_PM_MEAS_FILES";
65 private static final String CHANGE_TYPE = "FileReady";
66 private static final String INCORRECT_CHANGE_TYPE = "IncorrectFileReady";
67 private static final String NOTIFICATION_FIELDS_VERSION = "1.0";
70 void whenPassingCorrectJson_oneFileReadyMessage() throws DmaapNotFoundException {
72 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
75 .compression(GZIP_COMPRESSION)
76 .fileFormatType(FILE_FORMAT_TYPE)
77 .fileFormatVersion(FILE_FORMAT_VERSION)
79 JsonMessage message = new JsonMessage.JsonMessageBuilder()
80 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
81 .changeIdentifier(CHANGE_IDENTIFIER)
82 .changeType(CHANGE_TYPE)
83 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
84 .addAdditionalField(additionalField)
87 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder()
88 .productName(PRODUCT_NAME)
89 .vendorName(VENDOR_NAME)
90 .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
91 .sourceName(SOURCE_NAME)
92 .startEpochMicrosec(START_EPOCH_MICROSEC)
93 .timeZoneOffset(TIME_ZONE_OFFSET)
94 .changeIdentifier(CHANGE_IDENTIFIER)
95 .changeType(CHANGE_TYPE)
97 FileData expectedFileData = ImmutableFileData.builder()
101 .compression(GZIP_COMPRESSION)
102 .fileFormatType(FILE_FORMAT_TYPE)
103 .fileFormatVersion(FILE_FORMAT_VERSION)
105 List<FileData> files = new ArrayList<>();
106 files.add(expectedFileData);
107 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder()
108 .pnfName(SOURCE_NAME)
109 .messageMetaData(messageMetaData)
113 String messageString = message.toString();
114 String parsedString = message.getParsed();
115 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
116 JsonElement jsonElement = new JsonParser().parse(parsedString);
117 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
118 .getJsonObjectFromAnArray(jsonElement);
120 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
121 .expectSubscription().expectNext(expectedMessage).verifyComplete();
125 void whenPassingCorrectJsonWithTwoEvents_twoMessages() throws DmaapNotFoundException {
127 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
130 .compression(GZIP_COMPRESSION)
131 .fileFormatType(FILE_FORMAT_TYPE)
132 .fileFormatVersion(FILE_FORMAT_VERSION)
134 JsonMessage message = new JsonMessage.JsonMessageBuilder()
135 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
136 .changeIdentifier(CHANGE_IDENTIFIER)
137 .changeType(CHANGE_TYPE)
138 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
139 .addAdditionalField(additionalField)
142 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder()
143 .productName(PRODUCT_NAME)
144 .vendorName(VENDOR_NAME)
145 .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
146 .sourceName(SOURCE_NAME)
147 .startEpochMicrosec(START_EPOCH_MICROSEC)
148 .timeZoneOffset(TIME_ZONE_OFFSET)
149 .changeIdentifier(CHANGE_IDENTIFIER)
150 .changeType(CHANGE_TYPE)
152 FileData expectedFileData = ImmutableFileData.builder()
156 .compression(GZIP_COMPRESSION)
157 .fileFormatType(FILE_FORMAT_TYPE)
158 .fileFormatVersion(FILE_FORMAT_VERSION)
160 List<FileData> files = new ArrayList<>();
161 files.add(expectedFileData);
162 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder()
163 .pnfName(SOURCE_NAME)
164 .messageMetaData(messageMetaData)
168 String parsedString = message.getParsed();
169 String messageString = "[" + parsedString + "," + parsedString + "]";
170 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
171 JsonElement jsonElement = new JsonParser().parse(parsedString);
172 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
173 .getJsonObjectFromAnArray(jsonElement);
175 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
176 .expectSubscription().expectNext(expectedMessage).expectNext(expectedMessage).verifyComplete();
180 void whenPassingCorrectJsonWithoutLocation_noMessage() {
182 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
184 .compression(GZIP_COMPRESSION)
185 .fileFormatType(FILE_FORMAT_TYPE)
186 .fileFormatVersion(FILE_FORMAT_VERSION)
188 JsonMessage message = new JsonMessage.JsonMessageBuilder()
189 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
190 .changeIdentifier(CHANGE_IDENTIFIER)
191 .changeType(CHANGE_TYPE)
192 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
193 .addAdditionalField(additionalField)
196 String messageString = message.toString();
197 String parsedString = message.getParsed();
198 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
199 JsonElement jsonElement = new JsonParser().parse(parsedString);
200 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
201 .getJsonObjectFromAnArray(jsonElement);
203 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
204 .expectSubscription().expectNextCount(0).verifyComplete();
208 void whenPassingCorrectJsonWithTwoEventsFirstNoHeader_oneFileDatan() throws DmaapNotFoundException {
210 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
213 .compression(GZIP_COMPRESSION)
214 .fileFormatType(FILE_FORMAT_TYPE)
215 .fileFormatVersion(FILE_FORMAT_VERSION)
217 JsonMessage message = new JsonMessage.JsonMessageBuilder()
218 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
219 .changeIdentifier(CHANGE_IDENTIFIER)
220 .changeType(CHANGE_TYPE)
221 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
222 .addAdditionalField(additionalField)
225 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder()
226 .productName(PRODUCT_NAME)
227 .vendorName(VENDOR_NAME)
228 .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
229 .sourceName(SOURCE_NAME)
230 .startEpochMicrosec(START_EPOCH_MICROSEC)
231 .timeZoneOffset(TIME_ZONE_OFFSET)
232 .changeIdentifier(CHANGE_IDENTIFIER)
233 .changeType(CHANGE_TYPE)
235 FileData expectedFileData = ImmutableFileData.builder()
239 .compression(GZIP_COMPRESSION)
240 .fileFormatType(FILE_FORMAT_TYPE)
241 .fileFormatVersion(FILE_FORMAT_VERSION)
243 List<FileData> files = new ArrayList<>();
244 files.add(expectedFileData);
245 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder()
246 .pnfName(SOURCE_NAME)
247 .messageMetaData(messageMetaData)
251 String parsedString = message.getParsed();
252 String messageString = "[{\"event\":{}}," + parsedString + "]";
253 JsonMessageParser jsonMessageParserUnderTest = new JsonMessageParser();
255 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
256 .expectSubscription().expectNext(expectedMessage).verifyComplete();
260 void whenPassingCorrectJsonWithFaultyEventName_noFileData() {
262 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
264 .compression(GZIP_COMPRESSION)
265 .fileFormatType(FILE_FORMAT_TYPE)
266 .fileFormatVersion(FILE_FORMAT_VERSION)
268 JsonMessage message = new JsonMessage.JsonMessageBuilder()
269 .eventName("Faulty event name")
270 .changeIdentifier(CHANGE_IDENTIFIER)
271 .changeType(CHANGE_TYPE)
272 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
273 .addAdditionalField(additionalField)
276 String messageString = message.toString();
277 String parsedString = message.getParsed();
278 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
279 JsonElement jsonElement = new JsonParser().parse(parsedString);
280 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
281 .getJsonObjectFromAnArray(jsonElement);
283 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
284 .expectSubscription().expectComplete().verify();
288 void whenPassingCorrectJsonWithoutName_noFileData() {
290 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
292 .compression(GZIP_COMPRESSION)
293 .fileFormatType(FILE_FORMAT_TYPE)
294 .fileFormatVersion(FILE_FORMAT_VERSION)
296 JsonMessage message = new JsonMessage.JsonMessageBuilder()
297 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
298 .changeIdentifier(CHANGE_IDENTIFIER)
299 .changeType(CHANGE_TYPE)
300 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
301 .addAdditionalField(additionalField)
304 String messageString = message.toString();
305 String parsedString = message.getParsed();
306 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
307 JsonElement jsonElement = new JsonParser().parse(parsedString);
308 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
309 .getJsonObjectFromAnArray(jsonElement);
311 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
312 .expectSubscription().expectNextCount(0).verifyComplete();
316 void whenPassingCorrectJsonWithoutAdditionalFields_noFileData() {
318 JsonMessage message = new JsonMessage.JsonMessageBuilder()
319 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
320 .changeIdentifier(CHANGE_IDENTIFIER)
321 .changeType(CHANGE_TYPE)
322 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
325 String messageString = message.toString();
326 String parsedString = message.getParsed();
327 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
328 JsonElement jsonElement = new JsonParser().parse(parsedString);
329 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
330 .getJsonObjectFromAnArray(jsonElement);
332 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
333 .expectSubscription().expectNextCount(0).verifyComplete();
337 void whenPassingCorrectJsonWithoutCompression_noFileData() {
339 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
342 .fileFormatType(FILE_FORMAT_TYPE)
343 .fileFormatVersion(FILE_FORMAT_VERSION)
345 JsonMessage message = new JsonMessage.JsonMessageBuilder()
346 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
347 .changeIdentifier(CHANGE_IDENTIFIER)
348 .changeType(CHANGE_TYPE)
349 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
350 .addAdditionalField(additionalField)
353 String messageString = message.toString();
354 String parsedString = message.getParsed();
355 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
356 JsonElement jsonElement = new JsonParser().parse(parsedString);
357 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
358 .getJsonObjectFromAnArray(jsonElement);
360 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
361 .expectSubscription().expectNextCount(0).verifyComplete();
365 void whenPassingCorrectJsonWithoutFileFormatType_noFileData() {
367 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
370 .compression(GZIP_COMPRESSION)
371 .fileFormatVersion(FILE_FORMAT_VERSION)
373 JsonMessage message = new JsonMessage.JsonMessageBuilder()
374 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
375 .changeIdentifier(CHANGE_IDENTIFIER)
376 .changeType(CHANGE_TYPE)
377 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
378 .addAdditionalField(additionalField)
381 String messageString = message.toString();
382 String parsedString = message.getParsed();
383 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
384 JsonElement jsonElement = new JsonParser().parse(parsedString);
385 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
386 .getJsonObjectFromAnArray(jsonElement);
388 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
389 .expectSubscription().expectNextCount(0).verifyComplete();
393 void whenPassingOneCorrectJsonWithoutFileFormatVersionAndOneCorrect_oneFileData() {
395 AdditionalField additionalFaultyField = new JsonMessage.AdditionalFieldBuilder()
398 .compression(GZIP_COMPRESSION)
399 .fileFormatType(FILE_FORMAT_TYPE)
401 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
404 .compression(GZIP_COMPRESSION)
405 .fileFormatType(FILE_FORMAT_TYPE)
406 .fileFormatVersion(FILE_FORMAT_VERSION)
408 JsonMessage message = new JsonMessage.JsonMessageBuilder()
409 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
410 .changeIdentifier(CHANGE_IDENTIFIER)
411 .changeType(CHANGE_TYPE)
412 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
413 .addAdditionalField(additionalFaultyField)
414 .addAdditionalField(additionalField)
417 MessageMetaData messageMetaData = ImmutableMessageMetaData.builder()
418 .productName(PRODUCT_NAME)
419 .vendorName(VENDOR_NAME)
420 .lastEpochMicrosec(LAST_EPOCH_MICROSEC)
421 .sourceName(SOURCE_NAME)
422 .startEpochMicrosec(START_EPOCH_MICROSEC)
423 .timeZoneOffset(TIME_ZONE_OFFSET)
424 .changeIdentifier(CHANGE_IDENTIFIER)
425 .changeType(CHANGE_TYPE)
427 FileData expectedFileData = ImmutableFileData.builder()
431 .compression(GZIP_COMPRESSION)
432 .fileFormatType(FILE_FORMAT_TYPE)
433 .fileFormatVersion(FILE_FORMAT_VERSION)
435 List<FileData> files = new ArrayList<>();
436 files.add(expectedFileData);
437 FileReadyMessage expectedMessage = ImmutableFileReadyMessage.builder()
438 .pnfName(SOURCE_NAME)
439 .messageMetaData(messageMetaData)
443 String messageString = message.toString();
444 String parsedString = message.getParsed();
445 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
446 JsonElement jsonElement = new JsonParser().parse(parsedString);
447 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
448 .getJsonObjectFromAnArray(jsonElement);
450 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
451 .expectSubscription().expectNext(expectedMessage).verifyComplete();
455 void whenPassingJsonWithoutMandatoryHeaderInformation_noFileData() {
457 JsonMessage message = new JsonMessage.JsonMessageBuilder()
458 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
459 .changeIdentifier("PM_MEAS_FILES_INVALID")
460 .changeType("FileReady_INVALID")
461 .notificationFieldsVersion("1.0_INVALID")
464 String incorrectMessageString = message.toString();
465 String parsedString = message.getParsed();
466 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
467 JsonElement jsonElement = new JsonParser().parse(parsedString);
468 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
469 .getJsonObjectFromAnArray(jsonElement);
471 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(incorrectMessageString)))
472 .expectSubscription().expectComplete().verify();
476 void whenPassingJsonWithNullJsonElement_noFileData() {
477 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
478 JsonElement jsonElement = new JsonParser().parse("{}");
480 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
481 .getJsonObjectFromAnArray(jsonElement);
483 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just("[{}]"))).expectSubscription()
484 .expectComplete().verify();
488 void whenPassingCorrectJsonWithIncorrectChangeType_noFileData() {
490 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
493 .compression(GZIP_COMPRESSION)
494 .fileFormatVersion(FILE_FORMAT_VERSION)
496 JsonMessage message = new JsonMessage.JsonMessageBuilder()
497 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
498 .changeIdentifier(CHANGE_IDENTIFIER)
499 .changeType(INCORRECT_CHANGE_TYPE)
500 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
501 .addAdditionalField(additionalField)
504 String messageString = message.toString();
505 String parsedString = message.getParsed();
506 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
507 JsonElement jsonElement = new JsonParser().parse(parsedString);
508 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
509 .getJsonObjectFromAnArray(jsonElement);
511 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
512 .expectSubscription().expectNextCount(0).expectComplete().verify();
516 void whenPassingCorrectJsonWithIncorrectChangeIdentifier_noFileData() {
518 AdditionalField additionalField = new JsonMessage.AdditionalFieldBuilder()
521 .compression(GZIP_COMPRESSION)
522 .fileFormatVersion(FILE_FORMAT_VERSION)
524 JsonMessage message = new JsonMessage.JsonMessageBuilder()
525 .eventName(NR_RADIO_ERICSSON_EVENT_NAME)
526 .changeIdentifier(INCORRECT_CHANGE_IDENTIFIER)
527 .changeType(CHANGE_TYPE)
528 .notificationFieldsVersion(NOTIFICATION_FIELDS_VERSION)
529 .addAdditionalField(additionalField)
532 String messageString = message.toString();
533 String parsedString = message.getParsed();
534 JsonMessageParser jsonMessageParserUnderTest = spy(new JsonMessageParser());
535 JsonElement jsonElement = new JsonParser().parse(parsedString);
536 Mockito.doReturn(Optional.of(jsonElement.getAsJsonObject())).when(jsonMessageParserUnderTest)
537 .getJsonObjectFromAnArray(jsonElement);
539 StepVerifier.create(jsonMessageParserUnderTest.getMessagesFromJson(Mono.just(messageString)))
540 .expectSubscription().expectComplete().verify();