@JsonCreator @VisibleForTesting static IpProtocolSpecifier create(@Nullable String text) { return new IpProtocolSpecifier(text); }
public IpProtocolSpecifier(@Nullable String text) { _text = text; _protocols = expandProtocols(text); }
@Nullable @VisibleForTesting static Set<IpProtocol> expandProtocols(@Nullable String ipProtocols) { if (Strings.isNullOrEmpty(ipProtocols)) { return null; } String[] atoms = ipProtocols.trim().split(","); ImmutableSet.Builder<IpProtocol> including = ImmutableSet.builder(); ImmutableSet.Builder<IpProtocol> excluding = ImmutableSet.builder(); for (String atom : atoms) { String trimmed = atom.trim(); if (trimmed.startsWith("!")) { excluding.add(fromString(trimmed.replaceFirst("!", ""))); } else { including.add(fromString(trimmed)); } } if (including.build().isEmpty()) { including.addAll(Arrays.asList(IpProtocol.values())); } return ImmutableSet.copyOf(Sets.difference(including.build(), excluding.build())); }
public IpProtocolSpecifier(@Nullable JsonNode node) { _text = parseIpProtocols(node); _protocols = expandProtocols(_text); }
@Test public void testConstructorValidJsonNode() throws IOException { JsonNode jsonNode = _mapper.readTree("[\"89 (OSpf)\", \"61\", \"chaos\"]"); assertThat( new IpProtocolSpecifier(jsonNode).getProtocols(), equalTo( ImmutableSet.of( IpProtocol.OSPF, IpProtocol.CHAOS, IpProtocol.ANY_HOST_INTERNAL_PROTOCOL))); }
@Test public void testCreateEqualsConstructor() { String input = "89 (OSpf), 61, chaos"; assertThat(IpProtocolSpecifier.create(input), equalTo(new IpProtocolSpecifier(input))); }
@Test public void testAutocomplete() { assertThat( IpProtocolSpecifier.autoComplete("os").stream() .map(AutocompleteSuggestion::getText) .collect(Collectors.toSet()), IpProtocolSpecifier.autoComplete("89").stream() .map(AutocompleteSuggestion::getText) .collect(Collectors.toSet()), assertThat(IpProtocolSpecifier.autoComplete("UNNAMED"), equalTo(ImmutableList.of())); IpProtocolSpecifier.autoComplete("89 (o").stream() .map(AutocompleteSuggestion::getText) .collect(Collectors.toSet()), IpProtocolSpecifier.autoComplete("89 (ospf), 18 (").stream() .map(AutocompleteSuggestion::getText) .collect(Collectors.toSet()), IpProtocolSpecifier.autoComplete("89 (ospf), ").stream() .map(AutocompleteSuggestion::getText) .collect(Collectors.toSet()) IpProtocolSpecifier.autoComplete("89 (ospf),").stream() .map(AutocompleteSuggestion::getText) .collect(Collectors.toSet()),
suggestion -> new AutocompleteSuggestion( createSuggestionText(atoms, startsWith + suggestion.getText()), suggestion.getIsPartial(), suggestion.getDescription(),
flowStates, processBuilder(fragmentOffsets, VALID_FRAGMENT_OFFSET), new IpProtocolSpecifier(ipProtocols).getProtocols(), srcIps, dstIps,
suggestions = IpProtocolSpecifier.autoComplete(query); break;
@Test public void testConstructorValid() { assertThat( new IpProtocolSpecifier("89 (OSpf), 61, chaos").getProtocols(), equalTo( ImmutableSet.of( IpProtocol.OSPF, IpProtocol.CHAOS, IpProtocol.ANY_HOST_INTERNAL_PROTOCOL))); }
@Test public void testIpProtocolExpansion() { assertThat(expandProtocols(null), nullValue()); assertThat(expandProtocols(""), nullValue()); assertThat(expandProtocols("TCP"), contains(IpProtocol.TCP)); assertThat(expandProtocols(" TCP , UDP"), containsInAnyOrder(IpProtocol.TCP, IpProtocol.UDP)); assertThat(expandProtocols("6,17"), containsInAnyOrder(IpProtocol.TCP, IpProtocol.UDP)); assertThat(expandProtocols("6,!17"), containsInAnyOrder(IpProtocol.TCP)); assertThat(expandProtocols("TCP, !UDP"), containsInAnyOrder(IpProtocol.TCP)); assertThat( expandProtocols("!UDP"), equalTo( Sets.difference( ImmutableSet.copyOf(IpProtocol.values()), ImmutableSet.of(IpProtocol.UDP)))); }
@Test public void testConstructorInvalidJsonNode() throws IOException { thrown.expect(IllegalArgumentException.class); JsonNode jsonNode = _mapper.readTree("[\"blah\", \"(chaos) 61\"]"); new IpProtocolSpecifier(jsonNode); }
@Test public void testConstructorInvalid() { thrown.expect(IllegalArgumentException.class); assertThat( new IpProtocolSpecifier("blah, (ospf) 89, ").getProtocols(), equalTo(ImmutableSet.of())); }
@Test public void testIpProtocolExpansionWrongValues() { assertThat(expandProtocols(null), nullValue()); thrown.expect(IllegalArgumentException.class); expandProtocols("TC!P"); }
@Test public void testIpProtocolExpansionInvalidInt() { thrown.expect(BatfishException.class); expandProtocols("257"); } }
@Test public void testIpProtocolExpansionNoComma() { thrown.expect(IllegalArgumentException.class); expandProtocols("!TCP!UDP"); }