private Multimap<String, String> getSpecifiedAcls(SearchFiltersQuestion question) { SortedMap<String, Configuration> configs = _batfish.loadConfigurations(); FilterSpecifier filterSpecifier = question.getFilterSpecifier(); SpecifierContext specifierContext = _batfish.specifierContext(); ImmutableMultimap.Builder<String, String> acls = ImmutableMultimap.builder(); question.getNodesSpecifier().resolve(_batfish.specifierContext()).stream() .map(configs::get) .forEach( config -> filterSpecifier .resolve(config.getHostname(), specifierContext) .forEach(acl -> acls.put(config.getHostname(), acl.getName()))); return acls.build(); }
@Test public void testDeserializationDefaultValues() throws IOException { String serialized = String.format("{\"class\":\"%s\"}", SearchFiltersQuestion.class.getCanonicalName()); SearchFiltersQuestion q = BatfishObjectMapper.mapper().readValue(serialized, SearchFiltersQuestion.class); assertThat(q.getFilterSpecifier(), notNullValue()); assertThat(q.getType(), is(Type.PERMIT)); assertThat(q.getNodesSpecifier(), notNullValue()); assertThat(q.getDataPlane(), equalTo(false)); assertThat(q.getNodes(), nullValue()); // src/dst IPs NOT stored in headerspace at this stage assertThat(q.getHeaderSpace().getDstIps(), nullValue()); assertThat(q.getHeaderSpace().getSrcIps(), nullValue()); // src/dst IPs are in specifiers at this stage SearchFiltersParameters parameters = q.toSearchFiltersParameters(); for (IpSpaceSpecifier s : Arrays.asList( parameters.getSourceIpSpaceSpecifier(), parameters.getDestinationIpSpaceSpecifier())) { assertThat( s.resolve(ImmutableSet.of(), MockSpecifierContext.builder().build()).getEntries().stream() .map(Entry::getIpSpace) .collect(ImmutableList.toImmutableList()), hasItem(UniverseIpSpace.INSTANCE)); assertThat(q.getLineNumber(), nullValue()); } }
@Test public void testReachFilterNodeSpecifierDefault() { SearchFiltersQuestion q = new SearchFiltersQuestion(); Set<String> nodes = q.getNodesSpecifier().resolve(_batfish.specifierContext()); assertThat(nodes, contains(_config.getHostname())); q = SearchFiltersQuestion.builder() .setFilterSpecifier(ACL.getName()) .setAction("permit") .setNodeSpecifier("UNMATCHABLE") .build(); nodes = q.getNodesSpecifier().resolve(_batfish.specifierContext()); assertThat(nodes, emptyIterable()); }