@Override public ParseVendorConfigurationAnswerElement loadParseVendorConfigurationAnswerElement() { ParseVendorConfigurationAnswerElement pvcae = new ParseVendorConfigurationAnswerElement(); pvcae.setFileMap(ImmutableMultimap.of("h", "f")); pvcae.setParseStatus(ImmutableSortedMap.of("f", ParseStatus.PASSED)); return pvcae; } }
answerElement.getFileMap().put(hostname, _filename); if (!_warnings.isEmpty()) { answerElement.getWarnings().put(hostname, _warnings); answerElement.getParseTrees().put(hostname, _parseTree); answerElement.getParseStatus().put(_filename, ParseStatus.PARTIALLY_UNRECOGNIZED); } else { answerElement.getParseStatus().put(_filename, ParseStatus.PASSED); answerElement.getParseStatus().put(_filename, _status); if (_status == ParseStatus.FAILED) { assert _failureCause != null; // status == FAILED, failureCause must be non-null answerElement .getErrors() .put(_filename, ((BatfishException) _failureCause).getBatfishStackTrace());
@VisibleForTesting public static AwsConfiguration parseAwsConfigurations( Map<Path, String> configurationData, ParseVendorConfigurationAnswerElement pvcae) { AwsConfiguration config = new AwsConfiguration(); for (Entry<Path, String> configFile : configurationData.entrySet()) { Path path = configFile.getKey(); int pathLength = configFile.getKey().getNameCount(); String fileText = configFile.getValue(); String regionName = path.getName(pathLength - 2).toString(); // parent dir name String fileName = path.subpath(pathLength - 3, pathLength).toString(); pvcae.getFileMap().put(BfConsts.RELPATH_AWS_CONFIGS_FILE, fileName); JSONObject jsonObj = null; try { jsonObj = new JSONObject(fileText); } catch (JSONException e) { pvcae.addRedFlagWarning( BfConsts.RELPATH_AWS_CONFIGS_FILE, new Warning(String.format("AWS file %s is not valid JSON", fileName), "AWS")); } if (jsonObj != null) { try { config.addConfigElement(regionName, jsonObj, fileName, pvcae); } catch (JSONException e) { throw new BatfishException("Problems parsing JSON in " + fileName, e); } } } return config; }
@Override public ParseVendorConfigurationAnswerElement loadParseVendorConfigurationAnswerElement() { ParseVendorConfigurationAnswerElement pvcae = new ParseVendorConfigurationAnswerElement(); pvcae.setFileMap(ImmutableMultimap.of("h", "f", "h2", "f2")); return pvcae; }
@Override public TableAnswerElement answer() { ParseVendorConfigurationAnswerElement pvcae = _batfish.loadParseVendorConfigurationAnswerElement(); Map<String, ParseStatus> statusMap = pvcae.getParseStatus(); Rows rows = new Rows(); Multimap<String, String> fileToHost = TreeMultimap.create(); pvcae.getFileMap().forEach((hostname, filename) -> fileToHost.put(filename, hostname)); statusMap.forEach( (filename, status) -> rows.add(getRow(filename, status, fileToHost.get(filename)))); TableAnswerElement answerElement = new TableAnswerElement(TABLE_METADATA); answerElement.postProcessAnswer(_question, rows.getData()); return answerElement; }
hostConfig.getIptablesFile(), hostConfig.getHostname()); BatfishException bfc; if (answerElement.getErrors().containsKey(hostConfig.getHostname())) { bfc = new BatfishException( failureMessage, answerElement.getErrors().get(hostConfig.getHostname()).getException()); answerElement.getErrors().put(hostConfig.getHostname(), bfc.getBatfishStackTrace()); } else { bfc = new BatfishException(failureMessage); } else { failureCauses.add(bfc); answerElement.getErrors().put(hostConfig.getHostname(), bfc.getBatfishStackTrace()); answerElement.getParseStatus().put(hostConfig.getIptablesFile(), ParseStatus.FAILED);
new ParseVendorConfigurationAnswerElement(); answerElement.setVersion(Version.getVersion()); if (_settings.getVerboseParse()) { answer.addAnswerElement(answerElement);
@Override public ParseVendorConfigurationAnswerElement loadParseVendorConfigurationAnswerElement() { ParseVendorConfigurationAnswerElement pvcae = new ParseVendorConfigurationAnswerElement(); Warnings warnings = new Warnings(); warnings.getParseWarnings().add(new ParseWarning(3, "text", "ctx", "comment")); pvcae.setWarnings(ImmutableSortedMap.of("nowarnings", new Warnings(), "f", warnings)); return pvcae; } }
public JSONObject getParsingResults(String networkName, String snapshotName) throws JsonProcessingException, JSONException { ParseVendorConfigurationAnswerElement pvcae = deserializeObject( getdirSnapshot(networkName, snapshotName) .resolve(Paths.get(BfConsts.RELPATH_OUTPUT, BfConsts.RELPATH_PARSE_ANSWER_PATH)), ParseVendorConfigurationAnswerElement.class); JSONObject warnings = new JSONObject(); SortedMap<String, Warnings> warningsMap = pvcae.getWarnings(); ObjectWriter writer = BatfishObjectMapper.prettyWriter(); for (String s : warningsMap.keySet()) { warnings.put(s, writer.writeValueAsString(warningsMap.get(s))); } return warnings; }
@Override public TableAnswerElement answer() { UnusedStructuresQuestion question = (UnusedStructuresQuestion) _question; // Find all the filenames that produced the queried nodes. This might have false positives if // a file produced multiple nodes, but that was already mis-handled before. Need to rewrite // this question as a TableAnswerElement. Set<String> includeNodes = question.getNodes().getMatchingNodes(_batfish); Multimap<String, String> hostnameFilenameMap = _batfish.loadParseVendorConfigurationAnswerElement().getFileMap(); Set<String> includeFiles = hostnameFilenameMap.entries().stream() .filter(e -> includeNodes.contains(e.getKey())) .map(Entry::getValue) .collect(Collectors.toSet()); Multiset<Row> rows = LinkedHashMultiset.create(); SortedMap<String, SortedMap<String, SortedMap<String, DefinedStructureInfo>>> definedStructures = _batfish.loadConvertConfigurationAnswerElementOrReparse().getDefinedStructures(); definedStructures.entrySet().stream() .filter(e -> includeFiles.contains(e.getKey())) .forEach(e -> rows.addAll(processEntryToRows(e))); TableAnswerElement table = new TableAnswerElement(createMetadata(question)); table.postProcessAnswer(_question, rows); return table; }
@Before public void setUp() { _element = new ParseVendorConfigurationAnswerElement(); }
@Test public void testPrettyPrint() { BatfishException exception = new BatfishException("sample exception"); BatfishStackTrace stackTrace = new BatfishStackTrace(exception); _element.getErrors().put("sampleError", stackTrace); StringBuilder expected = new StringBuilder(); expected.append("Results of parsing vendor configurations\n"); expected.append("\n sampleError[Parser errors]\n"); for (String line : _element.getErrors().get("sampleError").getLineMap()) { expected.append(" " + line + "\n"); } assertThat(_element.prettyPrint(), equalTo(expected.toString())); }
@Test public void testSetErrors() { BatfishException exception = new BatfishException("sample exception"); BatfishStackTrace stackTrace = new BatfishStackTrace(exception); SortedMap<String, BatfishStackTrace> errors = new TreeMap<>(); errors.put("error", stackTrace); _element.setErrors(errors); assertThat(_element.getErrors().get("error"), is(stackTrace)); } }
answerElement.addRedFlagWarning( name, new Warning( answerElement.getParseStatus().put(overlay.getFilename(), ParseStatus.ORPHANED));
@Override public ParseTreesAnswerElement answer() { // ParseTreesQuestion question = (ParseTreesQuestion) _question; ParseTreesAnswerElement answerElement = new ParseTreesAnswerElement(); ParseVendorConfigurationAnswerElement parseAnswer = _batfish.loadParseVendorConfigurationAnswerElement(); answerElement._parseTrees = parseAnswer.getParseTrees(); return answerElement; } }
private void repairConfigurations() { ParseVendorConfigurationAnswerElement pvcae = loadParseVendorConfigurationAnswerElement(); if (!Version.isCompatibleVersion("Service", "Old parsed configurations", pvcae.getVersion())) { repairVendorConfigurations(); } Path inputPath = _testrigSettings.getSerializeVendorPath(); serializeIndependentConfigs(inputPath); }
public void addConfigElement( JSONObject jsonObj, String sourceFileName, ParseVendorConfigurationAnswerElement pvcae) throws JSONException { Iterator<?> keys = jsonObj.keys(); while (keys.hasNext()) { String key = (String) keys.next(); if (ignoreElement(key)) { continue; } // All objects nested under the current key will be subjected to this function, which will // integrate them appropriately into this Region. Returns null on unrecognized keys. ThrowingConsumer<JSONObject, JSONException> integratorFunction = getChildConsumer(key); if (integratorFunction == null) { // Add warning for unrecognized key in AWS file pvcae.addUnimplementedWarning( BfConsts.RELPATH_AWS_CONFIGS_FILE, new Warning( String.format("Unrecognized element '%s' in AWS file %s", key, sourceFileName), "AWS")); } else { JSONArray jsonArray = jsonObj.getJSONArray(key); for (int index = 0; index < jsonArray.length(); index++) { integratorFunction.accept(jsonArray.getJSONObject(index)); } } } }
@Override public ParseVendorConfigurationAnswerElement loadParseVendorConfigurationAnswerElement() { ParseVendorConfigurationAnswerElement pvcae = new ParseVendorConfigurationAnswerElement(); pvcae.setFileMap(ImmutableMultimap.of("h", "f", "h2", "f2")); return pvcae; }
@Override public TableAnswerElement answer() { ParseWarningQuestion question = (ParseWarningQuestion) _question; TableMetadata metadata = createMetadata(question); Map<String, ColumnMetadata> columnMetadataMap = metadata.toColumnMap(); ParseVendorConfigurationAnswerElement pvcae = _batfish.loadParseVendorConfigurationAnswerElement(); Map<String, Warnings> fileWarnings = pvcae.getWarnings(); Rows rows = new Rows(); if (question.getAggregateDuplicates()) { aggregateDuplicateWarnings(fileWarnings) .forEach( (triplet, filelines) -> rows.add(getAggregateRow(triplet, filelines, columnMetadataMap))); } else { fileWarnings.forEach( (filename, warnings) -> { for (ParseWarning w : warnings.getParseWarnings()) { rows.add(getRow(filename, w, columnMetadataMap)); } }); } TableAnswerElement answerElement = new TableAnswerElement(createMetadata(question)); answerElement.postProcessAnswer(_question, rows.getData()); return answerElement; }