public static @Nonnull AnswerMetadata computeAnswerMetadata( @Nonnull Answer answer, @Nonnull BatfishLogger logger) { try { return AnswerMetadata.builder() .setMetrics(computeMetrics(answer, logger)) .setStatus(answer.getStatus()) .build(); } catch (Exception e) { return AnswerMetadata.forStatus(AnswerStatus.FAILURE); } }
@VisibleForTesting @Nonnull Answer processAnswerRows(String rawAnswerStr, AnswerRowsOptions options) { if (rawAnswerStr == null) { Answer answer = Answer.failureAnswer("Not found", null); answer.setStatus(AnswerStatus.NOTFOUND); return answer; } try { Answer rawAnswer = BatfishObjectMapper.mapper().readValue(rawAnswerStr, new TypeReference<Answer>() {}); // If the AnswerStatus is not SUCCESS, the answer cannot have any AnswerElements related to // actual answers (but, e.g., it might have a BatfishStackTrace). Return that as-is. if (rawAnswer.getStatus() != AnswerStatus.SUCCESS) { return rawAnswer; } TableAnswerElement rawTable = (TableAnswerElement) rawAnswer.getAnswerElements().get(0); Answer answer = new Answer(); answer.setStatus(rawAnswer.getStatus()); answer.addAnswerElement(processAnswerTable(rawTable, options)); return answer; } catch (Exception e) { _logger.errorf("Failed to convert answer string to Answer: %s", e.getMessage()); return Answer.failureAnswer(e.getMessage(), null); } }
try { Answer testAnswer = BatfishObjectMapper.mapper().readValue(testOutput, Answer.class); testPassed = (testAnswer.getStatus() == AnswerStatus.FAILURE); } catch (JsonProcessingException e) {
@Test public void testProcessAnswerRowsNotFound() throws IOException { String columnName = "issue"; int maxRows = 1; int rowOffset = 0; AnswerRowsOptions options = new AnswerRowsOptions( ImmutableSet.of(columnName), ImmutableList.of(), maxRows, rowOffset, ImmutableList.of(new ColumnSortOption(columnName, true)), false); Answer processedAnswer = _manager.processAnswerRows(null, options); assertThat(processedAnswer.getStatus(), equalTo(AnswerStatus.NOTFOUND)); }
@Test public void testProcessAnswerRowsFailure() throws IOException { String columnName = "issue"; int maxRows = 1; int rowOffset = 0; AnswerRowsOptions options = new AnswerRowsOptions( ImmutableSet.of(columnName), ImmutableList.of(), maxRows, rowOffset, ImmutableList.of(new ColumnSortOption(columnName, true)), false); Answer badInput = new Answer(); badInput.setStatus(AnswerStatus.SUCCESS); String rawAnswerStr = BatfishObjectMapper.writePrettyString(badInput); Answer processedAnswer = _manager.processAnswerRows(rawAnswerStr, options); assertThat(processedAnswer.getStatus(), equalTo(AnswerStatus.FAILURE)); }
@Test public void testProcessAnswerRowsStale() throws IOException { String columnName = "issue"; int maxRows = 1; int rowOffset = 0; AnswerRowsOptions options = new AnswerRowsOptions( ImmutableSet.of(columnName), ImmutableList.of(), maxRows, rowOffset, ImmutableList.of(new ColumnSortOption(columnName, true)), false); Answer badInput = new Answer(); badInput.setStatus(AnswerStatus.STALE); String rawAnswerStr = BatfishObjectMapper.writePrettyString(badInput); Answer processedAnswer = _manager.processAnswerRows(rawAnswerStr, options); assertThat(processedAnswer.getStatus(), equalTo(AnswerStatus.STALE)); }
try { answer = batfish.run(); if (answer.getStatus() == null) { answer.setStatus(AnswerStatus.SUCCESS);