@Override public Location visitInterfaceLocation(InterfaceLocation interfaceLocation) { return new InterfaceLinkLocation( interfaceLocation.getNodeName(), interfaceLocation.getInterfaceName()); } });
@Override public IpSpace visitInterfaceLocation(InterfaceLocation interfaceLocation) { return _specifierContext.getInterfaceOwnedIps( interfaceLocation.getNodeName(), interfaceLocation.getInterfaceName()); } }
@VisibleForTesting static IpSpaceAssignment initSourceIpAssignment( String sourceLocation, String sourceIps, SpecifierContext specifierContext) { /* construct specifiers */ LocationSpecifier sourceLocationSpecifier = LocationSpecifierFactory.load(SRC_LOCATION_SPECIFIER_FACTORY) .buildLocationSpecifier(sourceLocation); IpSpaceSpecifier sourceIpSpaceSpecifier = IpSpaceSpecifierFactory.load(IP_SPECIFIER_FACTORY).buildIpSpaceSpecifier(sourceIps); /* resolve specifiers */ Set<Location> sourceLocations = sourceLocationSpecifier.resolve(specifierContext); return sourceIpSpaceSpecifier.resolve(sourceLocations, specifierContext); }
@Test public void parseCombination() { LocationSpecifier leaf = new NodeSpecifierInterfaceLocationSpecifier( new FlexibleNodeSpecifierFactory().buildNodeSpecifier("foo")); LocationSpecifier difference = new DifferenceLocationSpecifier(leaf, leaf); LocationSpecifier union = new UnionLocationSpecifier(leaf, leaf); LocationSpecifier unionDiff = new DifferenceLocationSpecifier(union, leaf); assertThat(parse("foo - foo"), equalTo(difference)); assertThat(parse("foo + foo"), equalTo(union)); assertThat(parse("foo + foo - foo"), equalTo(unionDiff)); }
@Test public void testNoLocations() { MockSpecifierContext ctxt = MockSpecifierContext.builder().build(); IpSpaceSpecifier specifier = new LocationIpSpaceSpecifier(new MockLocationSpecifier(ImmutableSet.of())); _expectedException.expect(IllegalArgumentException.class); _expectedException.expectMessage("No such locations"); specifier.resolve(ImmutableSet.of(), ctxt); } }
@Nonnull public IpSpaceAssignment getAllSourcesInferFromLocationIpSpaceAssignment() { SpecifierContextImpl specifierContext = new SpecifierContextImpl(this, getNetworkSnapshot()); Set<Location> locations = new UnionLocationSpecifier( AllInterfacesLocationSpecifier.INSTANCE, AllInterfaceLinksLocationSpecifier.INSTANCE) .resolve(specifierContext); return InferFromLocationIpSpaceSpecifier.INSTANCE.resolve(locations, specifierContext); }
@Override public IpSpaceAssignment resolve(Set<Location> locations, SpecifierContext ctxt) { IpSpaceLocationVisitor ipSpaceLocationVisitor = new IpSpaceLocationVisitor(ctxt); IpSpaceAssignment.Builder builder = IpSpaceAssignment.builder(); locations.forEach( location -> builder.assign(location, location.accept(ipSpaceLocationVisitor))); return builder.build(); } }
@Override public IpSpaceSpecifier buildIpSpaceSpecifier(@Nullable Object input) { return new LocationIpSpaceSpecifier( new FlexibleLocationSpecifierFactory().buildLocationSpecifier(input)); } }
@Override public IpSpaceSpecifier buildIpSpaceSpecifier(Object input) { return new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE); } }
@Override public SpecifierContext specifierContext() { return MockSpecifierContext.builder().setConfigs(loadConfigurations()).build(); } }
@Override public String visitInterfaceLinkLocation(InterfaceLinkLocation interfaceLinkLocation) { return interfaceLinkLocation.getInterfaceName(); }
@Override LocationSpecifier buildLocationSpecifier(Pattern pattern) { return new VrfNameRegexInterfaceLinkLocationSpecifier(pattern); } }
@Override public LocationSpecifier buildLocationSpecifier(Pattern pattern) { return new NameRegexInterfaceLocationSpecifier(pattern); } }
@Override public LocationSpecifier buildLocationSpecifier(Pattern pattern) { return new VrfNameRegexInterfaceLocationSpecifier(pattern); } }
@Override public LocationSpecifier buildLocationSpecifier(Pattern input) { return new DescriptionRegexInterfaceLocationSpecifier(input); } }
@Override public LocationSpecifier buildLocationSpecifier(Pattern pattern) { return new NodeNameRegexInterfaceLinkLocationSpecifier(pattern); } }
@Override LocationSpecifier buildLocationSpecifier(Pattern pattern) { return new NameRegexInterfaceLinkLocationSpecifier(pattern); } }
@Override public LocationSpecifier buildLocationSpecifier(Pattern input) { return new DescriptionRegexInterfaceLinkLocationSpecifier(input); }
@Override protected IpSpaceSpecifier defaultIpSpaceSpecifier() { return new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE); }