/*
* Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.openflowplugin.impl.statistics.services;
import com.google.common.util.concurrent.FutureCallback;
import java.math.BigInteger;
import java.util.Collections;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicLong;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Matchers;
import org.mockito.Mockito;
import org.opendaylight.openflowplugin.api.OFConstants;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.queue.rev130925.QueueId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueueBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStatsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromAllPortsInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromAllPortsOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromGivenPortInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetAllQueuesStatisticsFromGivenPortOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetQueueStatisticsFromGivenPortInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.GetQueueStatisticsFromGivenPortOutput;
import org.opendaylight.yangtools.yang.binding.Notification;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
/**
* Test for {@link OpendaylightQueueStatisticsServiceImpl}
*/
public class OpendaylightQueueStatisticsServiceImplTest extends AbstractSingleStatsServiceTest {
@Captor
private ArgumentCaptor<MultipartRequestInput> requestInput;
private OpendaylightQueueStatisticsServiceImpl queueStatisticsService;
public void setUp() {
queueStatisticsService = new OpendaylightQueueStatisticsServiceImpl(rqContextStack, deviceContext,
new AtomicLong(), notificationPublishService);
}
@After
public void tearDown() throws Exception {
Mockito.verify(notificationPublishService).offerNotification(Matchers.<Notification>any());
}
@Test
public void testGetAllQueuesStatisticsFromAllPorts() throws Exception {
Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
.commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class));
GetAllQueuesStatisticsFromAllPortsInputBuilder input = new GetAllQueuesStatisticsFromAllPortsInputBuilder()
.setNode(createNodeRef("unitProt:123"));
rpcResult = buildQueueStatsReply();
final Future<RpcResult<GetAllQueuesStatisticsFromAllPortsOutput>> resultFuture
= queueStatisticsService.getAllQueuesStatisticsFromAllPorts(input.build());
Assert.assertTrue(resultFuture.isDone());
final RpcResult<GetAllQueuesStatisticsFromAllPortsOutput> rpcResult = resultFuture.get();
Assert.assertTrue(rpcResult.isSuccessful());
Assert.assertEquals(MultipartType.OFPMPQUEUE, requestInput.getValue().getType());
}
protected RpcResult<Object> buildQueueStatsReply() {
return RpcResultBuilder.<Object>success(Collections.singletonList(
new MultipartReplyMessageBuilder()
.setVersion(OFConstants.OFP_VERSION_1_3)
.setMultipartReplyBody(new MultipartReplyQueueCaseBuilder()
.setMultipartReplyQueue(new MultipartReplyQueueBuilder()
.setQueueStats(Collections.singletonList(new QueueStatsBuilder()
.setDurationSec(41L)
.setDurationNsec(42L)
.setTxBytes(BigInteger.valueOf(43L))
.setTxErrors(BigInteger.valueOf(44L))
.setTxPackets(BigInteger.valueOf(45L))
.setPortNo(46L)
.setQueueId(47L)
.build()))
.build())
.build())
.build()
)).build();
}
@Test
public void testGetAllQueuesStatisticsFromGivenPort() throws Exception {
Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
.commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class));
GetAllQueuesStatisticsFromGivenPortInputBuilder input = new GetAllQueuesStatisticsFromGivenPortInputBuilder()
.setNode(createNodeRef("unitProt:123"))
.setNodeConnectorId(new NodeConnectorId("unitProt:123:321"));
rpcResult = buildQueueStatsReply();
final Future<RpcResult<GetAllQueuesStatisticsFromGivenPortOutput>> resultFuture
= queueStatisticsService.getAllQueuesStatisticsFromGivenPort(input.build());
Assert.assertTrue(resultFuture.isDone());
final RpcResult<GetAllQueuesStatisticsFromGivenPortOutput> rpcResult = resultFuture.get();
Assert.assertTrue(rpcResult.isSuccessful());
Assert.assertEquals(MultipartType.OFPMPQUEUE, requestInput.getValue().getType());
}
@Test
public void testGetQueueStatisticsFromGivenPort() throws Exception {
Mockito.doAnswer(answerVoidToCallback).when(outboundQueueProvider)
.commitEntry(Matchers.eq(42L), requestInput.capture(), Matchers.any(FutureCallback.class));
GetQueueStatisticsFromGivenPortInputBuilder input = new GetQueueStatisticsFromGivenPortInputBuilder()
.setNode(createNodeRef("unitProt:123"))
.setNodeConnectorId(new NodeConnectorId("unitProt:123:321"))
.setQueueId(new QueueId(21L));
rpcResult = buildQueueStatsReply();
final Future<RpcResult<GetQueueStatisticsFromGivenPortOutput>> resultFuture
= queueStatisticsService.getQueueStatisticsFromGivenPort(input.build());
Assert.assertTrue(resultFuture.isDone());
final RpcResult<GetQueueStatisticsFromGivenPortOutput> rpcResult = resultFuture.get();
Assert.assertTrue(rpcResult.isSuccessful());
Assert.assertEquals(MultipartType.OFPMPQUEUE, requestInput.getValue().getType());
}
}