/** * Take raw data and convert it to messages. Each raw message may produce multiple messages and therefore * multiple errors. A {@link MessageParserResult} is returned, which will have both the messages produced * and the errors. * @param parseMessage the raw bytes of the message * @return Optional of {@link MessageParserResult} */ default Optional<MessageParserResult<T>> parseOptionalResult(byte[] parseMessage) { Optional<MessageParserResult<T>> result = Optional.empty(); try { Optional<List<T>> optionalMessages = parseOptional(parseMessage); if (optionalMessages.isPresent()) { result = Optional.of(new DefaultMessageParserResult<>(optionalMessages.get())); } } catch (Throwable t) { return Optional.of(new DefaultMessageParserResult<>(t)); } return result; }
},errorMap::put); return Optional.of(new DefaultMessageParserResult<JSONObject>(returnList,errorMap)); return Optional.of(new DefaultMessageParserResult<JSONObject>( new IllegalStateException(message, e)));
+ " on " + originalMessage, e); return Optional.of(new DefaultMessageParserResult<>(innerException)); return Optional.of(new DefaultMessageParserResult<>(messages, errors));
+ " on " + originalMessage, e); return Optional.of(new DefaultMessageParserResult<>(innerException)); return Optional.of(new DefaultMessageParserResult<JSONObject>(messages, errors));
@Test public void shouldExecuteWithMasterThrowable() { parserRunner = spy(parserRunner); RawMessage rawMessage = new RawMessage("raw_message".getBytes(), new HashMap<>()); Throwable masterThrowable = mock(Throwable.class); MessageParserResult<JSONObject> messageParserResult = new DefaultMessageParserResult<>(masterThrowable); when(broParser.parseOptionalResult(rawMessage.getMessage())).thenReturn(Optional.of(messageParserResult)); parserRunner.setSensorToParserComponentMap(new HashMap<String, ParserComponent>() {{ put("bro", new ParserComponent(broParser, stellarFilter)); }}); ParserRunnerResults<JSONObject> parserRunnerResults = parserRunner.execute("bro", rawMessage, parserConfigurations); verify(parserRunner, times(0)) .processMessage(any(), any(), any(), any(), any()); MetronError expectedError = new MetronError() .withErrorType(Constants.ErrorType.PARSER_ERROR) .withThrowable(masterThrowable) .withSensorType(Collections.singleton("bro")) .addRawMessage(rawMessage.getMessage()); Assert.assertEquals(1, parserRunnerResults.getErrors().size()); Assert.assertTrue(parserRunnerResults.getErrors().contains(expectedError)); }
Throwable throwable1 = mock(Throwable.class); Throwable throwable2 = mock(Throwable.class); MessageParserResult<JSONObject> messageParserResult = new DefaultMessageParserResult<>(Arrays.asList(parsedMessage1, parsedMessage2), new HashMap<Object, Throwable>(){{ put(rawMessage1, throwable1);