2 * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.openflowplugin.impl.statistics.services;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertTrue;
12 import static org.mockito.ArgumentMatchers.any;
13 import static org.mockito.ArgumentMatchers.eq;
14 import static org.mockito.Mockito.doAnswer;
15 import static org.mockito.Mockito.verify;
17 import com.google.common.util.concurrent.FutureCallback;
18 import java.util.List;
19 import java.util.concurrent.atomic.AtomicLong;
20 import org.junit.After;
21 import org.junit.Test;
22 import org.mockito.ArgumentCaptor;
23 import org.mockito.Captor;
24 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStatsBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.multipart.reply.port.stats.PortStatsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetAllNodeConnectorsStatisticsInputBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetAllNodeConnectorsStatisticsOutput;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.GetNodeConnectorStatisticsInputBuilder;
35 import org.opendaylight.yangtools.yang.common.RpcResult;
36 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
37 import org.opendaylight.yangtools.yang.common.Uint32;
38 import org.opendaylight.yangtools.yang.common.Uint64;
41 * Test for {@link OpendaylightPortStatisticsServiceImpl}.
44 public class OpendaylightPortStatisticsServiceImplTest extends AbstractSingleStatsServiceTest {
46 private ArgumentCaptor<MultipartRequestInput> requestInput;
48 private GetAllNodeConnectorsStatisticsImpl getAllNodeConnectorsStatistics;
49 private GetNodeConnectorStatisticsImpl getNodeConnectorStatistics;
53 final var xid = new AtomicLong();
54 getAllNodeConnectorsStatistics = new GetAllNodeConnectorsStatisticsImpl(rqContextStack, deviceContext, xid,
55 notificationPublishService);
56 getNodeConnectorStatistics = new GetNodeConnectorStatisticsImpl(rqContextStack, deviceContext, xid,
57 notificationPublishService);
59 doAnswer(answerVoidToCallback).when(outboundQueueProvider)
60 .commitEntry(eq(Uint32.valueOf(42)), requestInput.capture(), any(FutureCallback.class));
64 public void tearDown() {
65 verify(notificationPublishService).offerNotification(any());
69 public void testGetAllNodeConnectorsStatistics() throws Exception {
70 var input = new GetAllNodeConnectorsStatisticsInputBuilder().setNode(createNodeRef("unitProt:123"));
72 rpcResult = buildPortStatisticsReply();
74 final var resultFuture = getAllNodeConnectorsStatistics.invoke(input.build());
76 assertTrue(resultFuture.isDone());
77 final RpcResult<GetAllNodeConnectorsStatisticsOutput> rpcResult = resultFuture.get();
78 assertTrue(rpcResult.isSuccessful());
79 assertEquals(MultipartType.OFPMPPORTSTATS, requestInput.getValue().getType());
82 private static RpcResult<Object> buildPortStatisticsReply() {
83 return RpcResultBuilder.<Object>success(List.of(
84 new MultipartReplyMessageBuilder()
85 .setVersion(EncodeConstants.OF_VERSION_1_3)
86 .setMultipartReplyBody(new MultipartReplyPortStatsCaseBuilder()
87 .setMultipartReplyPortStats(new MultipartReplyPortStatsBuilder()
88 .setPortStats(List.of(new PortStatsBuilder()
89 .setDurationSec(Uint32.valueOf(90))
90 .setDurationNsec(Uint32.valueOf(91))
91 .setCollisions(Uint64.valueOf(92))
92 .setPortNo(Uint32.valueOf(93))
93 .setRxBytes(Uint64.valueOf(94))
94 .setRxCrcErr(Uint64.valueOf(95))
95 .setRxDropped(Uint64.valueOf(96))
96 .setRxFrameErr(Uint64.valueOf(97))
97 .setRxErrors(Uint64.valueOf(98))
98 .setRxOverErr(Uint64.valueOf(99))
99 .setRxPackets(Uint64.valueOf(100))
100 .setTxBytes(Uint64.valueOf(94))
101 .setTxDropped(Uint64.valueOf(96))
102 .setTxErrors(Uint64.valueOf(98))
103 .setTxPackets(Uint64.valueOf(98))
112 public void testGetNodeConnectorStatistics() throws Exception {
113 var input = new GetNodeConnectorStatisticsInputBuilder()
114 .setNode(createNodeRef("unitProt:123"))
115 .setNodeConnectorId(new NodeConnectorId("unitProt:123:321"));
117 rpcResult = buildPortStatisticsReply();
119 final var resultFuture = getNodeConnectorStatistics.invoke(input.build());
121 assertTrue(resultFuture.isDone());
122 final var rpcResult = resultFuture.get();
123 assertTrue(rpcResult.isSuccessful());
124 assertEquals(MultipartType.OFPMPPORTSTATS, requestInput.getValue().getType());