Search in sources :

Example 1 with MeterStatsAndDescriptor

use of org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor in project open-kilda by telstra.

the class KildaEntryCacheServiceTest method assertMeterCache.

private void assertMeterCache(List<MeterStatsAndDescriptor> statsEntries, long meterId, KildaEntryDescriptor expectedDescriptor) {
    for (MeterStatsAndDescriptor entry : statsEntries) {
        if (meterId == entry.getData().getMeterId()) {
            KildaEntryDescriptor descriptor = entry.getDescriptor();
            Assert.assertEquals(expectedDescriptor, descriptor);
            return;
        }
    }
    Assert.fail("Cache miss");
}
Also used : MeterStatsAndDescriptor(org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor) KildaEntryDescriptor(org.openkilda.wfm.topology.stats.model.KildaEntryDescriptor)

Example 2 with MeterStatsAndDescriptor

use of org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor in project open-kilda by telstra.

the class KildaEntryCacheServiceTest method shouldCacheServiceRefreshMeterCache.

@Test
public void shouldCacheServiceRefreshMeterCache() {
    Flow flow = buildFlow();
    when(flowRepository.findAll()).thenReturn(Collections.singletonList(flow));
    service.refreshCache();
    MeterStatsData statsOriginSrc = getMeterStatsDataSrcSwitch();
    service.completeAndForwardMeterStats(statsOriginSrc);
    final MeterId forwardMeterId = flow.getForwardPath().getMeterId();
    @SuppressWarnings({ "ConstantConditions" }) final MeterId forwardProtectedMeterId = flow.getProtectedForwardPath().getMeterId();
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    List<MeterStatsAndDescriptor> statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, statsOriginSrc.getStats().size(), 2);
    assertMeterCache(statsEntries, forwardMeterId.getValue(), new CommonFlowDescriptor(flow.getSrcSwitchId(), INGRESS, flow.getFlowId(), flow.getForwardPath().getCookie(), forwardMeterId));
    assertMeterCache(statsEntries, forwardProtectedMeterId.getValue(), new CommonFlowDescriptor(flow.getSrcSwitchId(), INGRESS, flow.getFlowId(), flow.getProtectedForwardPath().getCookie(), forwardProtectedMeterId));
    MeterStatsData statsOriginDst = getMeterStatsDataDstSwitch();
    service.completeAndForwardMeterStats(statsOriginDst);
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, statsOriginDst.getStats().size(), 2);
    final MeterId reverseMeterId = flow.getReversePath().getMeterId();
    assertMeterCache(statsEntries, reverseMeterId.getValue(), new CommonFlowDescriptor(flow.getDestSwitchId(), INGRESS, flow.getFlowId(), flow.getReversePath().getCookie(), reverseMeterId));
    final MeterId reverseProtectedMeterId = flow.getProtectedReversePath().getMeterId();
    assertMeterCache(statsEntries, reverseProtectedMeterId.getValue(), new CommonFlowDescriptor(flow.getDestSwitchId(), INGRESS, flow.getFlowId(), flow.getProtectedReversePath().getCookie(), reverseProtectedMeterId));
}
Also used : MeterStatsData(org.openkilda.messaging.info.stats.MeterStatsData) MeterStatsAndDescriptor(org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor) CommonFlowDescriptor(org.openkilda.wfm.topology.stats.model.CommonFlowDescriptor) Flow(org.openkilda.model.Flow) YFlow(org.openkilda.model.YFlow) MeterId(org.openkilda.model.MeterId) Test(org.junit.Test)

Example 3 with MeterStatsAndDescriptor

use of org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor in project open-kilda by telstra.

the class KildaEntryCacheServiceTest method shouldHandleRemovingMeterFromCache.

@Test
public void shouldHandleRemovingMeterFromCache() {
    Flow flow = buildFlow();
    MeterStatsData statsOrigin = getMeterStatsDataSrcSwitch();
    service.completeAndForwardMeterStats(statsOrigin);
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    List<MeterStatsAndDescriptor> statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, statsOrigin.getStats().size(), 0);
    FlowPath forwardPath = flow.getForwardPath();
    UpdateFlowPathInfo pathInfo = new UpdateFlowPathInfo(flow.getFlowId(), flow.getYFlowId(), forwardPath.getCookie(), forwardPath.getMeterId(), FlowPathMapper.INSTANCE.mapToPathNodes(forwardPath));
    service.addOrUpdateCache(pathInfo);
    service.completeAndForwardMeterStats(statsOrigin);
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, statsOrigin.getStats().size(), 1);
    assertMeterCache(statsEntries, forwardPath.getMeterId().getValue(), new CommonFlowDescriptor(flow.getSrcSwitchId(), INGRESS, flow.getFlowId(), forwardPath.getCookie(), forwardPath.getMeterId()));
    RemoveFlowPathInfo pathInfo2 = new RemoveFlowPathInfo(flow.getFlowId(), flow.getYFlowId(), forwardPath.getCookie(), forwardPath.getMeterId(), FlowPathMapper.INSTANCE.mapToPathNodes(forwardPath));
    service.removeCached(pathInfo2);
    service.completeAndForwardMeterStats(statsOrigin);
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, statsOrigin.getStats().size(), 0);
}
Also used : MeterStatsData(org.openkilda.messaging.info.stats.MeterStatsData) MeterStatsAndDescriptor(org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor) CommonFlowDescriptor(org.openkilda.wfm.topology.stats.model.CommonFlowDescriptor) UpdateFlowPathInfo(org.openkilda.messaging.info.stats.UpdateFlowPathInfo) FlowPath(org.openkilda.model.FlowPath) RemoveFlowPathInfo(org.openkilda.messaging.info.stats.RemoveFlowPathInfo) Flow(org.openkilda.model.Flow) YFlow(org.openkilda.model.YFlow) Test(org.junit.Test)

Example 4 with MeterStatsAndDescriptor

use of org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor in project open-kilda by telstra.

the class KildaEntryCacheServiceTest method shouldRefreshYFlowMeterCache.

@Test
public void shouldRefreshYFlowMeterCache() {
    FlowEndpoint sharedEndpoint = new FlowEndpoint(SRC_SWITCH_ID, 1);
    FlowEndpoint splitEndEndpoint = new FlowEndpoint(DST_SWITCH_ID, 2);
    Switch sharedSwitch = Switch.builder().switchId(sharedEndpoint.getSwitchId()).build();
    Switch splitEndSwitch = Switch.builder().switchId(splitEndEndpoint.getSwitchId()).build();
    Switch yPointSwitch = Switch.builder().switchId(TRANSIT_SWITCH_ID).build();
    Flow subFlowAlpha = new TestFlowBuilder().srcSwitch(sharedSwitch).destSwitch(splitEndSwitch).addTransitionEndpoint(sharedSwitch, sharedEndpoint.getPortNumber()).addTransitionEndpoint(yPointSwitch, 1).addTransitionEndpoint(yPointSwitch, 2).addTransitionEndpoint(splitEndSwitch, sharedEndpoint.getPortNumber()).build();
    Flow subFlowBeta = new TestFlowBuilder().srcSwitch(sharedSwitch).destSwitch(splitEndSwitch).addTransitionEndpoint(sharedSwitch, sharedEndpoint.getPortNumber()).addTransitionEndpoint(yPointSwitch, 1).addTransitionEndpoint(yPointSwitch, 2).addTransitionEndpoint(splitEndSwitch, sharedEndpoint.getPortNumber()).build();
    YFlow yFlow = new TestYFlowBuilder().sharedEndpoint(new YFlow.SharedEndpoint(sharedEndpoint.getSwitchId(), sharedEndpoint.getPortNumber())).sharedEndpointMeterId(new MeterId(100)).yPoint(yPointSwitch.getSwitchId()).meterId(new MeterId(110)).subFlow(new TestYSubFlowBuilder().flow(subFlowAlpha).sharedEndpointVlan(10).endpoint(new FlowEndpoint(DST_SWITCH_ID, 2, 30))).subFlow(new TestYSubFlowBuilder().flow(subFlowBeta).sharedEndpointVlan(20).endpoint(new FlowEndpoint(DST_SWITCH_ID, 2, 40))).build();
    when(flowRepository.findAll()).thenReturn(Collections.emptyList());
    when(yFlowRepository.findAll()).thenReturn(Collections.singletonList(yFlow));
    service.refreshCache();
    // shared endpoint
    service.completeAndForwardMeterStats(new MeterStatsData(yFlow.getSharedEndpoint().getSwitchId(), Collections.singletonList(new MeterStatsEntry(yFlow.getSharedEndpointMeterId().getValue(), 0, 0))));
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    List<MeterStatsAndDescriptor> statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, 1, 1);
    assertMeterCache(statsEntries, yFlow.getSharedEndpointMeterId().getValue(), new YFlowDescriptor(yFlow.getSharedEndpoint().getSwitchId(), Y_FLOW_SHARED, yFlow.getYFlowId(), yFlow.getSharedEndpointMeterId()));
    // y-point
    service.completeAndForwardMeterStats(new MeterStatsData(yFlow.getYPoint(), Collections.singletonList(new MeterStatsEntry(yFlow.getMeterId().getValue(), 0, 0))));
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, 1, 1);
    assertMeterCache(statsEntries, yFlow.getMeterId().getValue(), new YFlowDescriptor(yFlow.getYPoint(), Y_FLOW_Y_POINT, yFlow.getYFlowId(), yFlow.getMeterId()));
}
Also used : YFlow(org.openkilda.model.YFlow) MeterStatsAndDescriptor(org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor) TestFlowBuilder(org.openkilda.wfm.share.flow.TestFlowBuilder) Flow(org.openkilda.model.Flow) YFlow(org.openkilda.model.YFlow) TestYFlowBuilder(org.openkilda.wfm.share.yflow.TestYFlowBuilder) MeterId(org.openkilda.model.MeterId) MeterStatsData(org.openkilda.messaging.info.stats.MeterStatsData) FlowEndpoint(org.openkilda.model.FlowEndpoint) Switch(org.openkilda.model.Switch) YFlowDescriptor(org.openkilda.wfm.topology.stats.model.YFlowDescriptor) MeterStatsEntry(org.openkilda.messaging.info.stats.MeterStatsEntry) TestYSubFlowBuilder(org.openkilda.wfm.share.yflow.TestYSubFlowBuilder) Test(org.junit.Test)

Example 5 with MeterStatsAndDescriptor

use of org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor in project open-kilda by telstra.

the class KildaEntryCacheServiceTest method shouldCompleteMeterStats.

@Test
public void shouldCompleteMeterStats() {
    Flow flow = buildFlow();
    MeterStatsData statsOrigin = getMeterStatsDataSrcSwitch();
    service.completeAndForwardMeterStats(statsOrigin);
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    List<MeterStatsAndDescriptor> statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, statsOrigin.getStats().size(), 0);
    FlowPath forwardPath = flow.getForwardPath();
    UpdateFlowPathInfo pathInfo = new UpdateFlowPathInfo(flow.getFlowId(), flow.getYFlowId(), forwardPath.getCookie(), forwardPath.getMeterId(), FlowPathMapper.INSTANCE.mapToPathNodes(forwardPath));
    service.addOrUpdateCache(pathInfo);
    service.completeAndForwardMeterStats(statsOrigin);
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, statsOrigin.getStats().size(), 1);
    assertMeterCache(statsEntries, forwardPath.getMeterId().getValue(), new CommonFlowDescriptor(flow.getSrcSwitchId(), INGRESS, flow.getFlowId(), forwardPath.getCookie(), forwardPath.getMeterId()));
    FlowPath protectedForwardPath = flow.getProtectedForwardPath();
    UpdateFlowPathInfo pathInfo2 = new UpdateFlowPathInfo(flow.getFlowId(), flow.getYFlowId(), protectedForwardPath.getCookie(), protectedForwardPath.getMeterId(), FlowPathMapper.INSTANCE.mapToPathNodes(protectedForwardPath));
    service.addOrUpdateCache(pathInfo2);
    service.completeAndForwardMeterStats(statsOrigin);
    verify(carrier, atLeastOnce()).emitMeterStats(meterCacheCaptor.capture());
    statsEntries = meterCacheCaptor.getValue().getStatsEntries();
    assertDescriptionPopulation(statsEntries, statsOrigin.getStats().size(), 2);
    assertMeterCache(statsEntries, forwardPath.getMeterId().getValue(), new CommonFlowDescriptor(flow.getSrcSwitchId(), INGRESS, flow.getFlowId(), forwardPath.getCookie(), forwardPath.getMeterId()));
    assertMeterCache(statsEntries, protectedForwardPath.getMeterId().getValue(), new CommonFlowDescriptor(flow.getSrcSwitchId(), INGRESS, flow.getFlowId(), protectedForwardPath.getCookie(), protectedForwardPath.getMeterId()));
}
Also used : MeterStatsData(org.openkilda.messaging.info.stats.MeterStatsData) MeterStatsAndDescriptor(org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor) CommonFlowDescriptor(org.openkilda.wfm.topology.stats.model.CommonFlowDescriptor) UpdateFlowPathInfo(org.openkilda.messaging.info.stats.UpdateFlowPathInfo) FlowPath(org.openkilda.model.FlowPath) Flow(org.openkilda.model.Flow) YFlow(org.openkilda.model.YFlow) Test(org.junit.Test)

Aggregations

MeterStatsAndDescriptor (org.openkilda.wfm.topology.stats.model.MeterStatsAndDescriptor)6 Test (org.junit.Test)4 MeterStatsData (org.openkilda.messaging.info.stats.MeterStatsData)4 Flow (org.openkilda.model.Flow)4 YFlow (org.openkilda.model.YFlow)4 CommonFlowDescriptor (org.openkilda.wfm.topology.stats.model.CommonFlowDescriptor)3 UpdateFlowPathInfo (org.openkilda.messaging.info.stats.UpdateFlowPathInfo)2 FlowPath (org.openkilda.model.FlowPath)2 MeterId (org.openkilda.model.MeterId)2 MeterStatsEntry (org.openkilda.messaging.info.stats.MeterStatsEntry)1 RemoveFlowPathInfo (org.openkilda.messaging.info.stats.RemoveFlowPathInfo)1 FlowEndpoint (org.openkilda.model.FlowEndpoint)1 Switch (org.openkilda.model.Switch)1 SwitchId (org.openkilda.model.SwitchId)1 TestFlowBuilder (org.openkilda.wfm.share.flow.TestFlowBuilder)1 TestYFlowBuilder (org.openkilda.wfm.share.yflow.TestYFlowBuilder)1 TestYSubFlowBuilder (org.openkilda.wfm.share.yflow.TestYSubFlowBuilder)1 KildaEntryDescriptor (org.openkilda.wfm.topology.stats.model.KildaEntryDescriptor)1 SwitchMeterStats (org.openkilda.wfm.topology.stats.model.SwitchMeterStats)1 YFlowDescriptor (org.openkilda.wfm.topology.stats.model.YFlowDescriptor)1