@VisibleForTesting static SelfDescribingObject getRemoteAs(@Nonnull BgpPeerConfig peer) { if (peer instanceof BgpActivePeerConfig) { return new SelfDescribingObject(Schema.LONG, ((BgpActivePeerConfig) peer).getRemoteAs()); } if (peer instanceof BgpPassivePeerConfig) { return new SelfDescribingObject( Schema.list(Schema.LONG), ((BgpPassivePeerConfig) peer).getRemoteAs()); } throw new IllegalArgumentException( String.format("Peer is neither Active nor Passive: %s", peer)); }
outputPropertyValue = outputPropertyValue.toString(); } else if ((targetSchema.equals(Schema.list(Schema.STRING)) || targetSchema.equals(Schema.set(Schema.STRING))) && outputPropertyValue != null
@Test public void convertTypeCorrect() { assertThat(SchemaUtils.convertType(toJson(2), Schema.INTEGER), equalTo(2)); assertThat( SchemaUtils.convertType(toJson(ImmutableList.of(1, 2)), Schema.list(Schema.INTEGER)), equalTo(ImmutableList.of(1, 2))); assertThat( SchemaUtils.convertType( toJson(ImmutableList.of(ImmutableList.of(1), ImmutableList.of(2))), Schema.list(Schema.list(Schema.INTEGER))), equalTo(ImmutableList.of(ImmutableList.of(1), ImmutableList.of(2)))); }
/** * Creates a {@link TableAnswerElement} object with the right metadata * * @param question The question object for which the answer is being created, to borrow its {@link * DisplayHints} * @return The creates the answer element object. */ @VisibleForTesting static TableAnswerElement create(AaaAuthenticationLoginQuestion question) { List<ColumnMetadata> columnMetadata = ImmutableList.of( new ColumnMetadata(COLUMN_NODE, Schema.NODE, "Node", true, false), new ColumnMetadata( COLUMN_LINE_NAMES, Schema.list(Schema.STRING), "Line names", false, true)); String textDesc = TEXT_DESC; DisplayHints dhints = question.getDisplayHints(); if (dhints != null) { textDesc = firstNonNull(dhints.getTextDesc(), textDesc); } TableMetadata metadata = new TableMetadata(columnMetadata, textDesc); return new TableAnswerElement(metadata); }
@Test public void isIntBased() { assertThat(Schema.INTEGER.isIntBased(), equalTo(true)); assertThat(Schema.list(Schema.INTEGER).isIntBased(), equalTo(true)); assertThat(Schema.set(Schema.INTEGER).isIntBased(), equalTo(true)); assertThat(Schema.set(Schema.list(Schema.INTEGER)).isIntBased(), equalTo(true)); assertThat(Schema.list(Schema.STRING).isIntBased(), equalTo(false)); }
/** Collection of non-strings should be converted to collection of strings when desired */ @Test public void convertTypeIfNeededNonStringCollectionToStringCollection() { Object propertyValueCollection = PropertySpecifier.convertTypeIfNeeded( ImmutableList.of(new Configuration("cname", ConfigurationFormat.CISCO_IOS)), Schema.list(Schema.STRING)); assertThat(propertyValueCollection, equalTo(ImmutableList.of("cname"))); }
@Test public void isCollection() { assertThat(Schema.INTEGER.isCollection(), equalTo(false)); assertThat(Schema.list(Schema.INTEGER).isCollection(), equalTo(true)); assertThat(Schema.set(Schema.INTEGER).isCollection(), equalTo(true)); assertThat(Schema.set(Schema.list(Schema.INTEGER)).isCollection(), equalTo(true)); } }
/** Map should be converted to set of strings when the schema is string list */ @Test public void convertTypeIfNeededMapToStringSet() { Object propertyValueMap = PropertySpecifier.convertTypeIfNeeded( ImmutableSortedMap.of("k1", "v1", "k2", "v2"), Schema.list(Schema.STRING)); assertThat(propertyValueMap, equalTo(ImmutableSet.of("k1", "k2"))); }
@Test public void getRemoteAsPassivePeer() { BgpPassivePeerConfig passivePeerConfig = BgpPassivePeerConfig.builder().setRemoteAs(ImmutableList.of(100L)).build(); assertThat( getRemoteAs(passivePeerConfig), equalTo(new SelfDescribingObject(Schema.list(Schema.LONG), ImmutableList.of(100L)))); } }
@Test public void putListType() { TypedRowBuilder builder = Row.builder( ImmutableMap.of( "col", new ColumnMetadata("col", Schema.list(Schema.INTEGER), "desc"))); // we should be able to put a list but not a base type Row row = builder.put("col", ImmutableList.of(2)).build(); assertThat( row.get("col", Schema.list(Schema.INTEGER)), Matchers.equalTo(ImmutableList.of(2))); _thrown.expect(IllegalArgumentException.class); _thrown.expectMessage("Cannot convert"); builder.put("col", 2); }
@Test public void displayHintsParsingTest() throws IOException { String text = CommonUtil.readResource("org/batfish/datamodel/questions/displayHintsTest.json"); DisplayHints displayHints = BatfishObjectMapper.mapper().readValue(text, DisplayHints.class); // here, we only test for ExtractionHint level concepts // tests that sit with jsonpath question validate if prefix/suffix filters are parsed correctly assertThat( displayHints.getTextDesc().equals("${mynode} has nothing on ${myinterface}"), equalTo(true)); Map<String, Extraction> extractions = displayHints.getExtractions(); assertThat(extractions.size(), equalTo(3)); Extraction hint0 = extractions.get("node1"); assertThat(hint0.getSchemaAsObject(), equalTo(Schema.STRING)); assertThat( hint0.getSchemaAsObject().getBaseType().getCanonicalName(), equalTo("java.lang.String")); assertThat(hint0.getMethod().containsKey("use"), equalTo(true)); Extraction hint1 = extractions.get("interfaces1"); assertThat(hint1.getSchemaAsObject(), equalTo(Schema.list(Schema.STRING))); Extraction hint2 = extractions.get("nodes1"); assertThat(hint2.getSchemaAsObject(), equalTo(Schema.list(Schema.INTEGER))); } }
@Test public void get() { // check that non-list values are same after put and get assertThat(Row.builder().put("col", 42).build().get("col", Schema.INTEGER), equalTo(42)); assertThat( Row.builder().put("col", new Node("node")).build().get("col", Schema.NODE), equalTo(new Node("node"))); // check the same for lists assertThat( Row.builder() .put("col", ImmutableList.of(4, 2)) .build() .get("col", Schema.list(Schema.INTEGER)), equalTo(ImmutableList.of(4, 2))); assertThat( Row.builder() .put("col", ImmutableList.of(new Node("n1"), new Node("n2"))) .build() .get("col", Schema.list(Schema.NODE)), equalTo(ImmutableList.of(new Node("n1"), new Node("n2")))); }
@Test public void fillPropertyFail() { PropertyDescriptor<Configuration> propDescriptor = new PropertyDescriptor<>(null, Schema.list(Schema.STRING)); _thrown.expect(ClassCastException.class); _thrown.expectMessage("Cannot recover object"); PropertySpecifier.fillProperty("col", "stringNotList", Row.builder(), propDescriptor); }
@Test public void testColumnComparatorList() { String col = "col1"; ColumnMetadata columnMetadata = new ColumnMetadata(col, Schema.list(Schema.STRING), "colDesc"); Comparator<Row> comparator = _manager.columnComparator(columnMetadata); Row r1 = Row.of(col, ImmutableList.of()); Row r2 = Row.of(col, ImmutableList.of("a")); Row r3 = Row.of(col, ImmutableList.of("a", "b")); Row r4 = Row.of(col, ImmutableList.of("b")); Row r5 = Row.of(col, ImmutableList.of("b", "a")); assertThat(comparator.compare(r1, r2), lessThan(0)); assertThat(comparator.compare(r1, r3), lessThan(0)); assertThat(comparator.compare(r1, r4), lessThan(0)); assertThat(comparator.compare(r1, r5), lessThan(0)); assertThat(comparator.compare(r2, r3), lessThan(0)); assertThat(comparator.compare(r2, r4), lessThan(0)); assertThat(comparator.compare(r2, r5), lessThan(0)); assertThat(comparator.compare(r3, r4), lessThan(0)); assertThat(comparator.compare(r3, r5), lessThan(0)); assertThat(comparator.compare(r4, r5), lessThan(0)); }
TracerouteAnswerer.COL_BASE_TRACES, hasItem(TraceMatchers.hasDisposition(FlowDisposition.ACCEPTED)), Schema.list(Schema.TRACE)), hasColumn( TracerouteAnswerer.COL_BASE_TRACE_COUNT, equalTo(1), Schema.INTEGER), TracerouteAnswerer.COL_DELTA_TRACES, not(hasItem(TraceMatchers.hasDisposition(FlowDisposition.ACCEPTED))), Schema.list(Schema.TRACE)), hasColumn( TracerouteAnswerer.COL_DELTA_TRACE_COUNT,
@Test public void testGetBgpRoutesCommunities() { Ip ip = Ip.parse("1.1.1.1"); Table<String, String, Set<BgpRoute>> bgpRouteTable = HashBasedTable.create(); bgpRouteTable.put( "node", "vrf", ImmutableSet.of( new Builder() .setNetwork(Prefix.create(ip, MAX_PREFIX_LENGTH)) .setOriginType(OriginType.IGP) .setOriginatorIp(ip) .setReceivedFromIp(ip) .setCommunities(ImmutableSortedSet.of(65537L)) .setProtocol(RoutingProtocol.BGP) .build())); Multiset<Row> rows = getBgpRibRoutes( bgpRouteTable, RibProtocol.BGP, ImmutableSet.of("node"), null, RoutingProtocolSpecifier.ALL_PROTOCOLS_SPECIFIER, ".*"); assertThat( rows.iterator().next().get(COL_COMMUNITIES, Schema.list(Schema.STRING)), equalTo(ImmutableList.of("1:1"))); }
@Test public void constructorTest() { new EqualsTester() .addEqualityGroup(new Schema("Set<List<Integer>>"), Schema.set(Schema.list(Schema.INTEGER))) .addEqualityGroup(new Schema("List<Set<Integer>>"), Schema.list(Schema.set(Schema.INTEGER))) .addEqualityGroup(new Schema("Set<Set<Integer>>"), Schema.set(Schema.set(Schema.INTEGER))) .addEqualityGroup(new Schema("List<Integer>"), Schema.list(Schema.INTEGER)) .addEqualityGroup(new Schema("Set<Integer>"), Schema.set(Schema.INTEGER)) .addEqualityGroup(new Schema("Integer"), Schema.INTEGER) .addEqualityGroup(new Schema("String"), Schema.STRING) .testEquals(); }
private static @Nonnull Row buildPassivePeerWithoutRemoteRow( Map<String, ColumnMetadata> metadataMap, BgpPeerConfigId passiveId, BgpPassivePeerConfig passivePeer, ConfiguredSessionStatus status) { return Row.builder(metadataMap) .put(COL_CONFIGURED_STATUS, status) .put(COL_LOCAL_INTERFACE, null) .put(COL_LOCAL_AS, passivePeer.getLocalAs()) .put(COL_LOCAL_IP, passivePeer.getLocalIp()) .put(COL_NODE, new Node(passiveId.getHostname())) .put( COL_REMOTE_AS, new SelfDescribingObject(Schema.list(Schema.LONG), passivePeer.getRemoteAs())) .put(COL_REMOTE_NODE, null) .put(COL_REMOTE_IP, new SelfDescribingObject(Schema.PREFIX, passivePeer.getPeerPrefix())) .put(COL_SESSION_TYPE, SessionType.UNSET) .put(COL_VRF, passiveId.getVrfName()) .build(); }
private static @Nonnull Row buildPassivePeerWithoutRemoteRow( Map<String, ColumnMetadata> metadataMap, BgpPeerConfigId passiveId, BgpPassivePeerConfig passivePeer, SessionStatus status) { return Row.builder(metadataMap) .put(COL_ESTABLISHED_STATUS, status) .put(COL_LOCAL_INTERFACE, null) .put(COL_LOCAL_AS, passivePeer.getLocalAs()) .put(COL_LOCAL_IP, passivePeer.getLocalIp()) .put(COL_NODE, new Node(passiveId.getHostname())) .put( COL_REMOTE_AS, new SelfDescribingObject(Schema.list(Schema.LONG), passivePeer.getRemoteAs())) .put(COL_REMOTE_NODE, null) .put(COL_REMOTE_IP, new SelfDescribingObject(Schema.PREFIX, passivePeer.getPeerPrefix())) .put(COL_SESSION_TYPE, SessionType.UNSET) .put(COL_VRF, passiveId.getVrfName()) .build(); }
@Test public void testComputeAnswerMetadataInapplicable() throws IOException { String columnName = "col"; List<Integer> value = ImmutableList.of(5); Answer testAnswer = new Answer(); testAnswer.addAnswerElement( new TableAnswerElement( new TableMetadata( ImmutableList.of( new ColumnMetadata(columnName, Schema.list(Schema.INTEGER), "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value))); testAnswer.setStatus(AnswerStatus.SUCCESS); assertThat( AnswerMetadataUtil.computeAnswerMetadata(testAnswer, _logger), equalTo( AnswerMetadata.builder() .setMetrics(Metrics.builder().setNumRows(1).build()) .setStatus(AnswerStatus.SUCCESS) .build())); }