@Override public Set<IpAccessList> resolve(String node, SpecifierContext ctxt) { checkArgument( ctxt.getConfigs().containsKey(node), "SpecifierContext does not have configs for node: " + node); Configuration config = ctxt.getConfigs().get(node); return config.getIpAccessLists().values().stream() .filter(filter -> _shorthandSpecifier.matches(filter, config)) .collect(Collectors.toSet()); } }
@Override public Set<IpAccessList> resolve(String node, SpecifierContext ctxt) { checkArgument( ctxt.getConfigs().containsKey(node), "SpecifierContext does not have configs for node " + node); Configuration config = ctxt.getConfigs().get(node); FilterGroup filterGroup = ctxt.getReferenceBook(_bookName) .orElseThrow( () -> new NoSuchElementException("ReferenceBook '" + _bookName + "' not found")) .getFilterGroup(_filterGroupName) .orElseThrow( () -> new NoSuchElementException( "FilterGroup '" + _filterGroupName + "' not found in ReferenceBook '" + _bookName + "'")); return config.getIpAccessLists().values().stream() .filter( filter -> filterGroup.getFilters().stream() .anyMatch(specifier -> specifier.matches(filter, config))) .collect(Collectors.toSet()); } }
@Test public void matchesIpv4() { FiltersSpecifier specifier = new FiltersSpecifier("ipv4:acl.*"); IpAccessList matchingList = new IpAccessList("acl-99"); Ip6AccessList nonMatchingList = new Ip6AccessList("acl-99"); assertThat(specifier.matches(matchingList, null), equalTo(true)); assertThat(specifier.matches(nonMatchingList), equalTo(false)); }
@Test public void matchesName() { FiltersSpecifier specifier = new FiltersSpecifier("name:acl.*"); IpAccessList matchingList = new IpAccessList("acl-99"); IpAccessList nonMatchingList = new IpAccessList("nana"); assertThat(specifier.matches(matchingList, null), equalTo(true)); assertThat(specifier.matches(nonMatchingList, null), equalTo(false)); }
@Test public void matchesFilterOn() { String inAclName = "inAcl"; String outAclName = "outAcl"; NetworkFactory nf = new NetworkFactory(); Configuration c = nf.configurationBuilder().setConfigurationFormat(ConfigurationFormat.CISCO_IOS).build(); Vrf v = nf.vrfBuilder().setOwner(c).build(); IpAccessList inAcl = IpAccessList.builder().setName(inAclName).setOwner(c).build(); IpAccessList outAcl = IpAccessList.builder().setName(outAclName).setOwner(c).build(); Interface i = nf.interfaceBuilder() .setIncomingFilter(inAcl) .setOutgoingFilter(outAcl) .setOwner(c) .setVrf(v) .build(); String iName = i.getName(); FiltersSpecifier inputFilterSpecifier = new FiltersSpecifier(String.format("%s:%s", Type.INPUTFILTERON.name(), iName)); FiltersSpecifier outputFilterSpecifier = new FiltersSpecifier(String.format("%s:%s", Type.OUTPUTFILTERON.name(), iName)); assertThat(inputFilterSpecifier.matches(inAcl, c), equalTo(true)); assertThat(inputFilterSpecifier.matches(outAcl, c), equalTo(false)); assertThat(outputFilterSpecifier.matches(outAcl, c), equalTo(true)); assertThat(outputFilterSpecifier.matches(inAcl, c), equalTo(false)); }