SpecifiersReachabilityQuestion question = SpecifiersReachabilityQuestion.builder() .setPathConstraints( PathConstraintsInput.builder() .setStartLocation(".*") .setForbiddenLocations(".*") .build()) .build(); AnswerElement answer = new SpecifiersReachabilityAnswerer(question, _batfish).answer(); assertThat(answer, instanceOf(TableAnswerElement.class));
SpecifiersReachabilityQuestion.builder().build(), _batfish) .answer(); assertThat(answer, instanceOf(TableAnswerElement.class)); new SpecifiersReachabilityAnswerer( SpecifiersReachabilityQuestion.builder() .setHeaderConstraints( PacketHeaderConstraints.builder() .setDstIp(NODE1_LOOPBACK_IP.toString()) .build()) .setInvertSearch(true) .build(), _batfish) .answer();
@VisibleForTesting static Builder builder() { return new Builder(); }
SpecifiersReachabilityQuestion question = SpecifiersReachabilityQuestion.builder() .setPathConstraints( PathConstraintsInput.builder() .setStartLocation(String.format("%s[%s]", ".*", LOOPBACK)) .setTransitLocations(".*") .build()) .build(); AnswerElement answer = new SpecifiersReachabilityAnswerer(question, _batfish).answer(); assertThat(answer, instanceOf(TableAnswerElement.class));
SpecifiersReachabilityQuestion question = SpecifiersReachabilityQuestion.builder() .setPathConstraints( PathConstraintsInput.builder() .setStartLocation(String.format("%s[%s]", NODE1, LOOPBACK)) .build()) .setActions(new DispositionSpecifier(ImmutableSortedSet.of(FlowDisposition.NO_ROUTE))) .build(); AnswerElement answer = new SpecifiersReachabilityAnswerer(question, _batfish).answer(); assertThat(answer, instanceOf(TableAnswerElement.class));
/** * Test that the results we get with the default source IpSpace specifier ({@link * org.batfish.specifier.InferFromLocationIpSpaceSpecifier}) are correct for the network. */ @Test public void testInferSrcIpFromLocation() { SpecifiersReachabilityQuestion question = SpecifiersReachabilityQuestion.builder() .setPathConstraints( PathConstraintsInput.builder() .setStartLocation(String.format("%s[%s]", NODE1, LOOPBACK)) .build()) .build(); AnswerElement answer = new SpecifiersReachabilityAnswerer(question, _batfish).answer(); assertThat(answer, instanceOf(TableAnswerElement.class)); TableAnswerElement tableAnswerElement = (TableAnswerElement) answer; assertThat(tableAnswerElement.getRowsList().size(), equalTo(1)); assertThat( tableAnswerElement, hasRows( hasItem( hasColumn( COL_FLOW, allOf(hasIngressNode(NODE1), hasSrcIp(NODE1_LOOPBACK_IP)), FLOW)))); }
@Test public void testTransitAndForbiddenNodesSpecification() { SpecifiersReachabilityQuestion question = SpecifiersReachabilityQuestion.builder() .setPathConstraints( PathConstraintsInput.builder() .setTransitLocations("foo") .setForbiddenLocations("bar") .build()) .build(); assertThat( question.getReachabilityParameters().getRequiredTransitNodesSpecifier(), equalTo( NodeSpecifierFactory.load(FlexibleNodeSpecifierFactory.NAME) .buildNodeSpecifier("foo"))); assertThat( question.getReachabilityParameters().getForbiddenTransitNodesSpecifier(), equalTo( NodeSpecifierFactory.load(FlexibleNodeSpecifierFactory.NAME) .buildNodeSpecifier("bar"))); }
@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()))); }
@Test public void testInvalidApplicationsSpecification() { ImmutableSortedSet<Protocol> applications = ImmutableSortedSet.of(Protocol.DNS); IntegerSpace dstPorts = IntegerSpace.of(new SubRange(1, 2)); exception.expect(IllegalArgumentException.class); SpecifiersReachabilityQuestion.builder() .setHeaderConstraints( PacketHeaderConstraints.builder() .setDstPorts(dstPorts) .setApplications(applications) .build()) .build(); }
@Test public void testInvertSearch() { SpecifiersReachabilityQuestion q = SpecifiersReachabilityQuestion.builder().setInvertSearch(true).build(); assertThat(q.getReachabilityParameters().getInvertSearch(), equalTo(true)); } }
@Test public void testApplicationsSpecification() { ImmutableSortedSet<Protocol> applications = ImmutableSortedSet.of(Protocol.DNS); SpecifiersReachabilityQuestion question = SpecifiersReachabilityQuestion.builder() .setHeaderConstraints( PacketHeaderConstraints.builder().setApplications(applications).build()) .build(); HeaderSpace headerSpace = question.getHeaderSpace(); assertThat(headerSpace.getDstProtocols(), equalTo(applications)); }
@Test public void testIgnoreFilters() { SpecifiersReachabilityQuestion q = SpecifiersReachabilityQuestion.builder().setIgnoreFilters(true).build(); assertThat(q.getReachabilityParameters().getIgnoreFilters(), equalTo(true)); }