private Optional<Flow> getFlow( BDDPacket pkt, BDDSourceManager bddSourceManager, String hostname, BDD bdd) { if (bdd.isZero()) { return Optional.empty(); } BDD assignment = bdd.fullSatOne(); return Optional.of( pkt.getFlowFromAssignment(assignment) .setTag(getFlowTag()) .setIngressNode(hostname) .setIngressInterface(bddSourceManager.getSourceFromAssignment(assignment).orElse(null)) .build()); }
@Test public void testTestFilter() { String hostname = _config.getHostname(); Flow flow = Flow.builder().setIngressNode(hostname).setDstIp(IP2).setTag("tag").build(); assertThat( TestFiltersAnswerer.getRow(ACL, flow, _config), allOf( hasColumn(COL_ACTION, equalTo("DENY"), Schema.STRING), hasColumn(COL_FILTER_NAME, equalTo(ACL.getName()), Schema.STRING))); }
@Test public void testGetFlowPreference1() { BDDPacket pkt = new BDDPacket(); Ip dstIp = Ip.parse("123.456.789.0"); Ip srcIp = Ip.parse("1.2.3.4"); BDD bdd = pkt.getDstIp().value(dstIp.asLong()).and(pkt.getSrcIp().value(srcIp.asLong())); Optional<Flow.Builder> flowBuilder = pkt.getFlow(bdd); assertThat("Unsat", flowBuilder.isPresent()); Flow flow = flowBuilder.get().setIngressNode("ingressNode").setTag("tag").build(); assertThat(flow, hasDstIp(dstIp)); assertThat(flow, hasSrcIp(srcIp)); assertThat(flow, hasIpProtocol(IpProtocol.ICMP)); assertThat(flow, hasIcmpType(8)); assertThat(flow, hasIcmpCode(0)); }
@Test public void testFlowTracesToRowsMaxTraces() { Flow flow = Flow.builder().setTag("tag").setIngressNode("node").setDstIp(Ip.parse("1.1.1.1")).build(); SortedMap<Flow, List<Trace>> flowTraces = ImmutableSortedMap.of( flow, ImmutableList.of( new Trace(FlowDisposition.DENIED_OUT, ImmutableList.of()), new Trace(FlowDisposition.DENIED_IN, ImmutableList.of()))); Multiset<Row> rows = flowTracesToRows(flowTraces, 1); assertThat( rows.iterator().next(), allOf( hasColumn( COL_FLOW, allOf(hasDstIp(Ip.parse("1.1.1.1")), hasIngressNode("node"), hasTag("tag")), Schema.FLOW), hasColumn(COL_TRACES, hasSize(1), Schema.set(Schema.TRACE)), hasColumn(TracerouteAnswerer.COL_TRACE_COUNT, equalTo(2), Schema.INTEGER))); }
@Test public void testGetFlowPreference3() { BDDPacket pkt = new BDDPacket(); Ip dstIp = Ip.parse("123.456.789.0"); Ip srcIp = Ip.parse("1.2.3.4"); BDD bdd = pkt.getDstIp().value(dstIp.asLong()).and(pkt.getSrcIp().value(srcIp.asLong())); BDD icmpbdd = pkt.getIpProtocol().value(IpProtocol.ICMP.number()); BDD udpbdd = pkt.getIpProtocol().value(IpProtocol.UDP.number()); bdd = bdd.and(icmpbdd.not()).and(udpbdd.not()); Optional<Flow.Builder> flowBuilder = pkt.getFlow(bdd); assertThat("Unsat", flowBuilder.isPresent()); Flow flow = flowBuilder.get().setIngressNode("ingressNode").setTag("tag").build(); assertThat(flow, hasDstIp(dstIp)); assertThat(flow, hasSrcIp(srcIp)); assertThat(flow, hasIpProtocol(IpProtocol.TCP)); assertThat(flow, not(hasDstPort(0))); } }
@Test public void testGetFlowPreference2() { BDDPacket pkt = new BDDPacket(); Ip dstIp = Ip.parse("123.456.789.0"); Ip srcIp = Ip.parse("1.2.3.4"); BDD bdd = pkt.getDstIp().value(dstIp.asLong()).and(pkt.getSrcIp().value(srcIp.asLong())); BDD icmpbdd = pkt.getIpProtocol().value(IpProtocol.ICMP.number()); bdd = bdd.and(icmpbdd.not()); Optional<Flow.Builder> flowBuilder = pkt.getFlow(bdd); assertThat("Unsat", flowBuilder.isPresent()); Flow flow = flowBuilder.get().setIngressNode("ingressNode").setTag("tag").build(); assertThat(flow, hasDstIp(dstIp)); assertThat(flow, hasSrcIp(srcIp)); assertThat(flow, hasIpProtocol(IpProtocol.UDP)); }
private Flow createFlow() { Flow.Builder b = new Flow.Builder(); b.setIngressNode("ingressNode"); b.setTag("empty"); return b.build(); }
private static Flow createFlow(String ipAddrStr) { Flow.Builder b = new Flow.Builder(); b.setIngressNode("ingressNode"); b.setSrcIp(Ip.parse(ipAddrStr)); b.setTag("test"); return b.build(); }
@Before public void setup() { _flow = Flow.builder() .setIngressNode("ingress") .setTag("tag") .setDstIp(Ip.parse("1.1.1.1")) .build(); _describerNoNamesNorMetadata = new IpSpaceDescriber( new AclTracer(_flow, null, ImmutableMap.of(), ImmutableMap.of(), ImmutableMap.of())); }
@Test public void testSetTcpFlags() { Builder builder = Flow.builder().setIngressNode("node").setIngressInterface("iface").setTag("tag"); PacketHeaderConstraints phc = PacketHeaderConstraints.builder() .setTcpFlags(Collections.singleton(TcpFlagsMatchConditions.ACK_TCP_FLAG)) .build(); setTcpFlags(phc, builder); assertThat(builder.build().getTcpFlagsAck(), equalTo(1)); }
@Test public void testSetEcnValue() { Builder builder = Flow.builder().setIngressNode("node").setIngressInterface("iface").setTag("tag"); PacketHeaderConstraints phc = PacketHeaderConstraints.builder().setEcns(IntegerSpace.of(1)).build(); setEcnValue(phc, builder); assertThat(builder.build().getEcn(), equalTo(1)); }
@Test public void testSetSrcPortMultiple() { Builder builder = Flow.builder().setIngressNode("node").setTag("tag"); PacketHeaderConstraints phc = PacketHeaderConstraints.builder().setSrcPorts(IntegerSpace.of(new SubRange(1, 10))).build(); thrown.expect(IllegalArgumentException.class); setSrcPort(phc, builder); }
private static Flow createFlow() { Flow.Builder b = new Flow.Builder(); b.setIngressNode("ingressNode"); b.setTag("empty"); return b.build(); }
private static Flow createFlow() { Flow.Builder b = new Flow.Builder(); b.setIngressNode("ingressNode"); b.setTag("empty"); return b.build(); }
@Test public void testColumnComparatorFlow() { String col = "col1"; ColumnMetadata columnMetadata = new ColumnMetadata(col, Schema.FLOW, "colDesc"); Comparator<Row> comparator = _manager.columnComparator(columnMetadata); Row r1 = Row.of(col, Flow.builder().setDstIp(Ip.ZERO).setIngressNode("a").setTag("a").build()); Row r2 = Row.of(col, Flow.builder().setDstIp(Ip.MAX).setIngressNode("a").setTag("a").build()); assertThat(comparator.compare(r1, r2), lessThan(0)); }
@Test public void testSetFlowStates() { Builder builder = Flow.builder().setIngressNode("node").setIngressInterface("iface").setTag("tag"); PacketHeaderConstraints phc = PacketHeaderConstraints.builder() .setFlowStates(Collections.singleton(FlowState.ESTABLISHED)) .build(); setFlowStates(phc, builder); assertThat(builder.build().getState(), equalTo(FlowState.ESTABLISHED)); }
@Test public void testDefaultPacketLength() { Builder builder = Flow.builder().setIngressNode("node").setIngressInterface("iface").setTag("tag"); PacketHeaderConstraints phc = PacketHeaderConstraints.unconstrained(); setPacketLength(phc, builder); assertThat(builder.build().getPacketLength(), equalTo(DEFAULT_PACKET_LENGTH)); }
@Test public void testSetFragmentOffsets() { Builder builder = Flow.builder().setIngressNode("node").setIngressInterface("iface").setTag("tag"); PacketHeaderConstraints phc = PacketHeaderConstraints.builder() .setFragmentOffsets(IntegerSpace.of(new SubRange(2, 2))) .build(); setFragmentOffsets(phc, builder); assertThat(builder.build().getFragmentOffset(), equalTo(2)); }
private static Flow createFlow() { Flow.Builder b = new Flow.Builder(); b.setIngressNode("ingressNode"); b.setTag("empty"); return b.build(); }
@Test public void testMatchFlow() { TcpFlags flags = TcpFlags.builder().setUrg(true).setRst(true).build(); TcpFlagsMatchConditions conditions = TcpFlagsMatchConditions.builder().setTcpFlags(flags).setUseUrg(true).build(); assertThat( conditions.match(Flow.builder().setTcpFlagsUrg(1).setIngressNode("n").setTag("t").build()), equalTo(true)); assertThat( conditions.match(Flow.builder().setTcpFlagsUrg(0).setIngressNode("n").setTag("t").build()), equalTo(false)); }