use of org.openkilda.rulemanager.factory.generator.service.noviflow.RoundTripLatencyRuleGenerator in project open-kilda by telstra.
the class RoundTripLatencyRuleGeneratorTest method shouldBuildCorrectRuleForOf13.
@Test
public void shouldBuildCorrectRuleForOf13() {
Switch sw = buildSwitch("OF_13", Sets.newHashSet(NOVIFLOW_COPY_FIELD));
RoundTripLatencyRuleGenerator generator = RoundTripLatencyRuleGenerator.builder().config(config).build();
List<SpeakerData> commands = generator.generateCommands(sw);
assertEquals(1, commands.size());
FlowSpeakerData flowCommandData = getCommand(FlowSpeakerData.class, commands);
assertEquals(sw.getSwitchId(), flowCommandData.getSwitchId());
assertEquals(sw.getOfVersion(), flowCommandData.getOfVersion().toString());
assertTrue(flowCommandData.getDependsOn().isEmpty());
assertEquals(new Cookie(ROUND_TRIP_LATENCY_RULE_COOKIE), flowCommandData.getCookie());
assertEquals(OfTable.INPUT, flowCommandData.getTable());
assertEquals(ROUND_TRIP_LATENCY_RULE_PRIORITY, flowCommandData.getPriority());
FieldMatch ethSrcMatch = getMatchByField(Field.ETH_SRC, flowCommandData.getMatch());
assertEquals(sw.getSwitchId().toLong(), ethSrcMatch.getValue());
assertFalse(ethSrcMatch.isMasked());
FieldMatch ethDstMatch = getMatchByField(Field.ETH_DST, flowCommandData.getMatch());
assertEquals(new SwitchId(config.getDiscoveryBcastPacketDst()).toLong(), ethDstMatch.getValue());
assertFalse(ethDstMatch.isMasked());
FieldMatch ethTypeMatch = getMatchByField(Field.ETH_TYPE, flowCommandData.getMatch());
assertEquals(EthType.IPv4, ethTypeMatch.getValue());
assertFalse(ethTypeMatch.isMasked());
FieldMatch ipProtoMatch = getMatchByField(Field.IP_PROTO, flowCommandData.getMatch());
assertEquals(IpProto.UDP, ipProtoMatch.getValue());
assertFalse(ipProtoMatch.isMasked());
FieldMatch udpDstMatch = getMatchByField(Field.UDP_DST, flowCommandData.getMatch());
assertEquals(Constants.LATENCY_PACKET_UDP_PORT, udpDstMatch.getValue());
assertFalse(udpDstMatch.isMasked());
Instructions instructions = flowCommandData.getInstructions();
assertEquals(2, instructions.getApplyActions().size());
Action first = instructions.getApplyActions().get(0);
assertTrue(first instanceof CopyFieldAction);
CopyFieldAction copyFieldAction = (CopyFieldAction) first;
assertEquals(ROUND_TRIP_LATENCY_TIMESTAMP_SIZE, copyFieldAction.getNumberOfBits());
assertEquals(0, copyFieldAction.getSrcOffset());
assertEquals(ROUND_TRIP_LATENCY_T1_OFFSET, copyFieldAction.getDstOffset());
assertEquals(NOVIFLOW_RX_TIMESTAMP, copyFieldAction.getOxmSrcHeader());
assertEquals(NOVIFLOW_PACKET_OFFSET, copyFieldAction.getOxmDstHeader());
Action second = instructions.getApplyActions().get(1);
assertTrue(second instanceof PortOutAction);
PortOutAction portOutAction = (PortOutAction) second;
assertEquals(SpecialPortType.CONTROLLER, portOutAction.getPortNumber().getPortType());
}
use of org.openkilda.rulemanager.factory.generator.service.noviflow.RoundTripLatencyRuleGenerator in project open-kilda by telstra.
the class RuleManagerServiceRulesTest method shouldUseCorrectServiceRuleGeneratorsForSwitchInSingleTableMode.
@Test
public void shouldUseCorrectServiceRuleGeneratorsForSwitchInSingleTableMode() {
Switch sw = buildSwitch("OF_13", Collections.emptySet());
SwitchId switchId = sw.getSwitchId();
SwitchProperties switchProperties = buildSwitchProperties(sw, false);
List<RuleGenerator> generators = ruleManager.getServiceRuleGenerators(switchId, buildAdapter(switchId, switchProperties, new HashSet<>(), false));
assertEquals(7, generators.size());
assertTrue(generators.stream().anyMatch(g -> g instanceof TableDefaultRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof BroadCastDiscoveryRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof UniCastDiscoveryRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof DropDiscoveryLoopRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof BfdCatchRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof RoundTripLatencyRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof UnicastVerificationVxlanRuleGenerator));
}
use of org.openkilda.rulemanager.factory.generator.service.noviflow.RoundTripLatencyRuleGenerator in project open-kilda by telstra.
the class RuleManagerServiceRulesTest method shouldUseCorrectServiceRuleGeneratorsForSwitchInMultiTableMode.
@Test
public void shouldUseCorrectServiceRuleGeneratorsForSwitchInMultiTableMode() {
Switch sw = buildSwitch("OF_13", Collections.emptySet());
SwitchId switchId = sw.getSwitchId();
SwitchProperties switchProperties = buildSwitchProperties(sw, true);
List<RuleGenerator> generators = ruleManager.getServiceRuleGenerators(switchId, buildAdapter(switchId, switchProperties, new HashSet<>(), false));
assertEquals(18, generators.size());
assertTrue(generators.stream().anyMatch(g -> g instanceof BroadCastDiscoveryRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof UniCastDiscoveryRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof DropDiscoveryLoopRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof BfdCatchRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof RoundTripLatencyRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof UnicastVerificationVxlanRuleGenerator));
assertEquals(4, generators.stream().filter(g -> g instanceof TableDefaultRuleGenerator).count());
assertEquals(2, generators.stream().filter(g -> g instanceof TablePassThroughDefaultRuleGenerator).count());
assertTrue(generators.stream().anyMatch(g -> g instanceof LldpPostIngressRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof LldpPostIngressVxlanRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof LldpPostIngressOneSwitchRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof ArpPostIngressRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof ArpPostIngressVxlanRuleGenerator));
assertTrue(generators.stream().anyMatch(g -> g instanceof ArpPostIngressOneSwitchRuleGenerator));
}
Aggregations