@Test public void testInvertSearch() { SpecifiersReachabilityQuestion q = SpecifiersReachabilityQuestion.builder().setInvertSearch(true).build(); assertThat(q.getReachabilityParameters().getInvertSearch(), equalTo(true)); } }
@Test public void testIgnoreFilters() { SpecifiersReachabilityQuestion q = SpecifiersReachabilityQuestion.builder().setIgnoreFilters(true).build(); assertThat(q.getReachabilityParameters().getIgnoreFilters(), equalTo(true)); }
@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 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"))); }
@Override public AnswerElement answer() { SpecifiersReachabilityQuestion question = (SpecifiersReachabilityQuestion) _question; AnswerElement answer = _batfish.standard(question.getReachabilityParameters()); if (answer instanceof TraceWrapperAsAnswerElement) { TableAnswerElement tableAnswer = new TableAnswerElement(TracerouteAnswerer.metadata(false)); TracerouteAnswerer.flowTracesToRows( ((TraceWrapperAsAnswerElement) answer).getFlowTraces(), question.getMaxTraces()) .forEach(tableAnswer::addRow); return tableAnswer; } else if (answer instanceof FlowHistory) { TableAnswerElement tableAnswer = new TableAnswerElement(TracerouteAnswerer.createMetadata(false)); TracerouteAnswerer.flowHistoryToRows((FlowHistory) answer, false) .forEach(tableAnswer::addRow); return tableAnswer; } else { return answer; } } }
@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 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()))); }