@Override public IpSpaceSpecifier buildIpSpaceSpecifier(Object input) { return new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE); } }
@Override protected IpSpaceSpecifier defaultIpSpaceSpecifier() { return new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE); }
private static IpSpaceSpecifier toIpSpaceSpecifier(IpSpace include, IpSpace exclude) { return new ConstantIpSpaceSpecifier( firstNonNull(AclIpSpace.difference(include, exclude), UniverseIpSpace.INSTANCE)); }
@Override public IpSpaceSpecifier buildIpSpaceSpecifier(@Nullable Object input) { checkArgument(input instanceof String, "String input required for " + getName()); return new ConstantIpSpaceSpecifier(parseIpSpace((String) input)); } }
@Test public void testConstantUniverseIpSpaceSpecifier() { assertThat( new ConstantUniverseIpSpaceSpecifierFactory().buildIpSpaceSpecifier(null), equalTo(new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE))); }
@Test public void testFlexibleUniverseIpSpaceSpecifierFactory() { assertThat( load(FlexibleUniverseIpSpaceSpecifierFactory.NAME), instanceOf(FlexibleUniverseIpSpaceSpecifierFactory.class)); assertThat( new FlexibleUniverseIpSpaceSpecifierFactory().buildIpSpaceSpecifier(null), equalTo(new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE))); }
@Test public void testQuestionDefaults() { SpecifiersReachabilityQuestion question = new SpecifiersReachabilityQuestion(); assertThat( question.getActions().getDispositions(), equalTo(ImmutableSortedSet.of(ACCEPTED, DELIVERED_TO_SUBNET, EXITS_NETWORK))); assertThat( question.getReachabilityParameters().getDestinationIpSpaceSpecifier(), equalTo(new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE))); assertThat( question.getReachabilityParameters().getSourceIpSpaceSpecifier(), equalTo(InferFromLocationIpSpaceSpecifier.INSTANCE)); assertThat( question.getPathConstraints().getTransitLocations(), equalTo(NoNodesNodeSpecifier.INSTANCE)); assertThat( question.getPathConstraints().getForbiddenLocations(), equalTo(NoNodesNodeSpecifier.INSTANCE)); assertThat(question.getIgnoreFilters(), equalTo(false)); }
@Test public void testReachFilter_ACCEPT_ALL_dstIpConstraint() { Ip constraintIp = Ip.parse("21.21.21.21"); SearchFiltersParameters params = _allLocationsParams .toBuilder() .setDestinationIpSpaceSpecifier(new ConstantIpSpaceSpecifier(constraintIp.toIpSpace())) .setSourceIpSpaceSpecifier(new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE)) .setHeaderSpace(new HeaderSpace()) .build(); Optional<SearchFiltersResult> result = _batfish.reachFilter(_config, ACCEPT_ALL_ACL, params); assertThat(result.get().getExampleFlow(), hasDstIp(constraintIp)); }
@Test public void testReachFilter_ACCEPT_ALL_srcIpConstraint() { Ip constraintIp = Ip.parse("21.21.21.21"); SearchFiltersParameters params = _allLocationsParams .toBuilder() .setDestinationIpSpaceSpecifier(new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE)) .setSourceIpSpaceSpecifier(new ConstantIpSpaceSpecifier(constraintIp.toIpSpace())) .setHeaderSpace(new HeaderSpace()) .build(); Optional<SearchFiltersResult> result = _batfish.reachFilter(_config, ACCEPT_ALL_ACL, params); assertThat(result.get().getExampleFlow(), hasSrcIp(constraintIp)); }
@Test public void testReachFilter_DENY_ALL_portConstraints() { HeaderSpace hs = new HeaderSpace(); hs.setSrcPorts(Collections.singletonList(new SubRange(1111, 1111))); hs.setDstPorts(Collections.singletonList(new SubRange(2222, 2222))); SearchFiltersParameters params = _allLocationsParams .toBuilder() .setDestinationIpSpaceSpecifier(new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE)) .setSourceIpSpaceSpecifier(new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE)) .setHeaderSpace(hs) .build(); Optional<SearchFiltersResult> result = _batfish.reachFilter(_config, ACCEPT_ALL_ACL, params); assertThat(result.get().getExampleFlow(), allOf(hasSrcPort(1111), hasDstPort(2222))); }
@Test public void testReachFilter_permit_headerSpace() { SearchFiltersParameters.Builder paramsBuilder = _allLocationsParams .toBuilder() .setDestinationIpSpaceSpecifier(new ConstantIpSpaceSpecifier(IP0.toIpSpace())) .setSourceIpSpaceSpecifier(new ConstantIpSpaceSpecifier(UniverseIpSpace.INSTANCE)) .setHeaderSpace(HeaderSpace.builder().build()); SearchFiltersParameters params = paramsBuilder.build(); Optional<SearchFiltersResult> result = _batfish.reachFilter(_config, ACL, params); assertThat("Should find result", result.isPresent()); assertThat(result.get().getExampleFlow(), hasDstIp(IP0)); params = paramsBuilder.setHeaderSpace(HeaderSpace.builder().setNegate(true).build()).build(); result = _batfish.reachFilter(_config, ACL, params); assertThat("Should find result", result.isPresent()); assertThat(result.get().getExampleFlow(), hasDstIp(IP3)); }
@Test public void testConstantWildcardSetIpSpaceSpecifierFactory() { assertThat( load(ConstantWildcardSetIpSpaceSpecifierFactory.NAME), Matchers.instanceOf(ConstantWildcardSetIpSpaceSpecifierFactory.class)); assertThat( new ConstantWildcardSetIpSpaceSpecifierFactory() .buildIpSpaceSpecifier("1.2.3.0/24 - 1.2.3.4"), equalTo( new ConstantIpSpaceSpecifier( IpWildcardSetIpSpace.builder() .including(new IpWildcard("1.2.3.0/24")) .excluding(new IpWildcard("1.2.3.4")) .build()))); } }
@Test public void testConstantIpSpace() { assertThat( new FlexibleInferFromLocationIpSpaceSpecifierFactory().buildIpSpaceSpecifier("1.1.1.1"), equalTo( new ConstantIpSpaceSpecifier( IpWildcardSetIpSpace.builder().including(new IpWildcard("1.1.1.1")).build()))); }
@Test public void testParse() { assertThat( parse("1.2.3.4"), equalTo( new ConstantIpSpaceSpecifier( IpWildcardSetIpSpace.builder().including(new IpWildcard("1.2.3.4")).build()))); assertThat( parse("ref.addressgroup(foo,bar)"), equalTo(new ReferenceAddressGroupIpSpaceSpecifier("foo", "bar"))); assertThat( parse("ofLocation(foo)"), equalTo(new LocationIpSpaceSpecifier(FlexibleLocationSpecifierFactory.parse("foo")))); } }
@Test public void testSourceIpWildcardDifferenceAccepted() { SpecifiersReachabilityQuestion question = SpecifiersReachabilityQuestion.builder() .setHeaderConstraints( PacketHeaderConstraints.builder().setSrcIp("1.2.3.0/24 \\ 1.2.3.4").build()) .build(); assertThat( question.getReachabilityParameters().getSourceIpSpaceSpecifier(), equalTo( new ConstantIpSpaceSpecifier( IpWildcardSetIpSpace.builder() .including(new IpWildcard("1.2.3.0/24")) .excluding(new IpWildcard("1.2.3.4")) .build()))); }
@Test public void testDestinationIpSpaceSpecification() { SpecifiersReachabilityQuestion question = SpecifiersReachabilityQuestion.builder() .setHeaderConstraints( PacketHeaderConstraints.builder().setDstIp("1.2.3.0/24 - 1.2.3.4").build()) .build(); assertThat( question.getReachabilityParameters().getDestinationIpSpaceSpecifier(), equalTo( new ConstantIpSpaceSpecifier( IpWildcardSetIpSpace.builder() .including(new IpWildcard("1.2.3.0/24")) .excluding(new IpWildcard("1.2.3.4")) .build()))); }