@Test public void testCaseInsensitive() { assertThat( DispositionSpecifier.create("SUCCESS").getDispositions(), equalTo(DispositionSpecifier.create("suCCess").getDispositions())); }
@JsonCreator @VisibleForTesting static DispositionSpecifier create(@Nullable String values) { return new DispositionSpecifier(fromString(firstNonNull(values, SUCCESS))); }
@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 testHeaderSpaceConstraint2() throws IOException { Question question = new DifferentialReachabilityQuestion( new DispositionSpecifier(ImmutableSet.of(FlowDisposition.ACCEPTED)), PacketHeaderConstraints.builder().setDstIp("5.5.5.5").build(), false, false, TracePruner.DEFAULT_MAX_TRACES, PathConstraintsInput.unconstrained()); Batfish batfish = initBatfish(); TableAnswerElement answer = new DifferentialReachabilityAnswerer(question, batfish).answer(); assertThat(answer.getRows().size(), equalTo(0)); } }
@Test public void testAutocomplete() { // should include values from FlowDisposition enum as well as "success" and "failure" assertThat( DispositionSpecifier.autoComplete("s").stream() .map(AutocompleteSuggestion::getText) .collect(Collectors.toSet()), equalTo( ImmutableSet.of( SUCCESS, NEIGHBOR_UNREACHABLE_OR_EXITS_NETWORK.name().toLowerCase(), INSUFFICIENT_INFO.name().toLowerCase(), DELIVERED_TO_SUBNET.name().toLowerCase(), EXITS_NETWORK.name().toLowerCase()))); assertThat( DispositionSpecifier.autoComplete("f").stream() .map(AutocompleteSuggestion::getText) .collect(Collectors.toSet()), equalTo(ImmutableSet.of(FAILURE, INSUFFICIENT_INFO.name().toLowerCase()))); } }
ReachabilityParameters.filterDispositions(question.getActions().getDispositions()), forbiddenTransitNodes, finalNodes,
.setStartLocation(String.format("%s[%s]", NODE1, LOOPBACK)) .build()) .setActions(new DispositionSpecifier(ImmutableSortedSet.of(FlowDisposition.NO_ROUTE))) .build(); AnswerElement answer = new SpecifiersReachabilityAnswerer(question, _batfish).answer();
suggestions = DispositionSpecifier.autoComplete(query); break;
@Test public void testSuccessDisjointFromFailure() { Set<FlowDisposition> success = DispositionSpecifier.create("SUCCESS").getDispositions(); Set<FlowDisposition> failure = DispositionSpecifier.create("FAILURE").getDispositions(); assertThat( "No overlap between success and failure dispositions", Sets.intersection(success, failure).isEmpty()); }
ReachabilityParameters getReachabilityParameters() { PathConstraints pathConstraints = getPathConstraints(); return ReachabilityParameters.builder() .setActions( ImmutableSortedSet.copyOf( ReachabilityParameters.filterDispositions(getActions().getDispositions()))) .setDestinationIpSpaceSpecifier(getDestinationIpSpaceSpecifier()) .setFinalNodesSpecifier(pathConstraints.getEndLocation()) .setForbiddenTransitNodesSpecifier(pathConstraints.getForbiddenLocations()) .setHeaderSpace(getHeaderSpace()) .setIgnoreFilters(getIgnoreFilters()) .setInvertSearch(getInvertSearch()) .setRequiredTransitNodesSpecifier(pathConstraints.getTransitLocations()) .setSourceLocationSpecifier(pathConstraints.getStartLocation()) .setSourceIpSpaceSpecifier(getSourceIpSpaceSpecifier()) .setSpecialize(true) .build(); }
Question question = new DifferentialReachabilityQuestion( new DispositionSpecifier(ImmutableSet.of(FlowDisposition.ACCEPTED)), PacketHeaderConstraints.unconstrained(), false,
@Test public void testFailure() { assertThat( DispositionSpecifier.create("FAILURE").getDispositions(), equalTo(FAILURE_SPECIFIER.getDispositions())); }
Question question = new DifferentialReachabilityQuestion( new DispositionSpecifier(ImmutableSet.of(FlowDisposition.ACCEPTED)), PacketHeaderConstraints.builder().setDstIp("2.2.2.2").build(), false,
@Test public void testTrimming() { assertThat( DispositionSpecifier.create("no_route , null_routed").getDispositions(), equalTo(ImmutableSet.of(FlowDisposition.NO_ROUTE, FlowDisposition.NULL_ROUTED))); }
@Test public void testSupportsPrimitiveDispositions() { assertThat( DispositionSpecifier.create("no_route").getDispositions(), equalTo(ImmutableSet.of(FlowDisposition.NO_ROUTE))); }
@Test public void testCreationDefault() { assertThat( DispositionSpecifier.create(null).getDispositions(), equalTo( ImmutableSet.of( FlowDisposition.ACCEPTED, FlowDisposition.DELIVERED_TO_SUBNET, FlowDisposition.EXITS_NETWORK))); }
@Test public void testSuccess() { assertThat( DispositionSpecifier.create("success").getDispositions(), equalTo( ImmutableSet.of( FlowDisposition.ACCEPTED, FlowDisposition.DELIVERED_TO_SUBNET, FlowDisposition.EXITS_NETWORK))); }
@Test public void testAllDispositionsCovered() { assertThat( DispositionSpecifier.create("success,failure").getDispositions(), equalTo( Sets.difference( ImmutableSet.copyOf(FlowDisposition.values()), ImmutableSet.of(NEIGHBOR_UNREACHABLE_OR_EXITS_NETWORK)))); }