@VisibleForTesting static @Nullable Metrics computeMetrics(@Nonnull Answer answer, @Nonnull BatfishLogger logger) { if (answer.getAnswerElements().isEmpty()) { return null; AnswerElement ae = answer.getAnswerElements().get(0); if (!(ae instanceof TableAnswerElement)) { return null;
@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); } }
return rawAnswer; AnswerElement answerElement = rawAnswer.getAnswerElements().get(0); if (!(answerElement instanceof TableAnswerElement)) { return rawAnswer;
BatfishObjectMapper.mapper() .readValue(_storage.loadAnswer(baseAnswerId), new TypeReference<Answer>() {}); TableAnswerElement oldTable = (TableAnswerElement) oldAnswer.getAnswerElements().get(0); TableMetadata tableMetadata = oldTable.getMetadata(); Set<String> issueColumns =
private String getTestComparisonString(Answer answer, TestComparisonMode comparisonMode) throws JsonProcessingException { switch (comparisonMode) { case COMPAREANSWER: // Use an array rather than a list to serialize the answer elements; this preserves // the type information. See https://github.com/FasterXML/jackson-databind/issues/336, // though this is a different workaround. AnswerElement[] elements = answer.getAnswerElements().toArray(new AnswerElement[0]); return BatfishObjectMapper.writePrettyString(elements); case COMPAREALL: return BatfishObjectMapper.writePrettyString(answer); case COMPAREFAILURES: return BatfishObjectMapper.writePrettyString(answer.getSummary().getNumFailed()); case COMPARESUMMARY: return BatfishObjectMapper.writePrettyString(answer.getSummary()); default: throw new BatfishException("Unhandled TestComparisonMode: " + comparisonMode); } }
@Test public void testLoadQuestionsNames() throws Exception { Client client = new Client(new String[] {"-runmode", "gendatamodel", "-prettyanswers", "false"}); JSONObject testQuestion = new JSONObject(); testQuestion.put( "instance", new JSONObject() .put("instanceName", "testQuestionName") .put("description", "test question description")); Path questionJsonPath = _folder.newFile("testquestion.json").toPath(); CommonUtil.writeFile(questionJsonPath, testQuestion.toString()); client._logger = new BatfishLogger("output", false); client.processCommand( new String[] {LOAD_QUESTIONS.commandName(), questionJsonPath.getParent().toString()}, null); // Reading the answer written by load-questions Answer answerLoadQuestions = _mapper.readValue( client.getLogger().getHistory().toString(BatfishLogger.LEVEL_OUTPUT), Answer.class); LoadQuestionAnswerElement ae = (LoadQuestionAnswerElement) answerLoadQuestions.getAnswerElements().get(0); // Checking that question name in answer element matches instanceName in file assertEquals("testQuestionName", ae.getAdded().first()); }
_manager.processAnalysisAnswers(rawAnswers, analysisAnswersOptions); List<Row> processedRows = ((TableAnswerElement) processedAnswers.get(questionName).getAnswerElements().get(0)) .getRowsList();
@Test public void testProcessAnswerRows2() throws IOException { String columnName = "issue"; int maxRows = 1; int rowOffset = 0; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.ISSUE, "foobar")))); table.addRow(Row.of(columnName, new Issue("blah", 5, new Issue.Type("m", "n")))); Answer answer = new Answer(); answer.addAnswerElement(table); answer.setStatus(AnswerStatus.SUCCESS); String answerStr = BatfishObjectMapper.writePrettyString(answer); AnswerRowsOptions options = new AnswerRowsOptions( ImmutableSet.of(columnName), ImmutableList.of(), maxRows, rowOffset, ImmutableList.of(new ColumnSortOption(columnName, true)), false); List<Row> processedRows = ((TableView) _manager.processAnswerRows2(answerStr, options).getAnswerElements().get(0)) .getInnerRows(); assertThat(processedRows, equalTo(table.getRowsList())); }
@Test public void testProcessAnswerRows() throws IOException { String columnName = "issue"; int maxRows = 1; int rowOffset = 0; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.ISSUE, "foobar")))); table.addRow(Row.of(columnName, new Issue("blah", 5, new Issue.Type("m", "n")))); Answer answer = new Answer(); answer.addAnswerElement(table); answer.setStatus(AnswerStatus.SUCCESS); String answerStr = BatfishObjectMapper.writePrettyString(answer); AnswerRowsOptions options = new AnswerRowsOptions( ImmutableSet.of(columnName), ImmutableList.of(), maxRows, rowOffset, ImmutableList.of(new ColumnSortOption(columnName, true)), false); List<Row> processedRows = ((TableAnswerElement) _manager.processAnswerRows(answerStr, options).getAnswerElements().get(0)) .getRowsList(); assertThat(processedRows, equalTo(table.getRowsList())); }
(TableAnswerElement) processedAnswer.getAnswerElements().get(0);
BatfishObjectMapper.mapper().readValue(answersJsonString, new TypeReference<Answer>() {}); TableView processedTable = (TableView) processedAnswer.getAnswerElements().get(0);
(TableAnswerElement) processedAnswer.getAnswerElements().get(0);
BatfishObjectMapper.mapper() .readValue(answer1Output, Answer.class) .getAnswerElements() .get(0)) .getAnswer(), BatfishObjectMapper.mapper() .readValue(answer2Output, Answer.class) .getAnswerElements() .get(0)) .getAnswer(),
BatfishObjectMapper.mapper().readValue(answersJsonString, new TypeReference<Answer>() {}); TableView processedTable = (TableView) processedAnswer.getAnswerElements().get(0);
(TableAnswerElement) processedAnswer.getAnswerElements().get(0);
BatfishObjectMapper.mapper() .readValue(_storage.loadAnswer(finalAnswerId), new TypeReference<Answer>() {}); TableAnswerElement newTable = (TableAnswerElement) newAnswer.getAnswerElements().get(0);