blob: 77176920f3d4330f9ef6c60e571d3798169fe0bf [file] [log] [blame]
/*
* Copyright 2021-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.cli.net;
import com.fasterxml.jackson.databind.JsonNode;
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.ChassisId;
import org.onosproject.net.DefaultAnnotations;
import org.onosproject.net.DefaultDevice;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.NetTestTools;
import org.onosproject.net.PortNumber;
import org.onosproject.net.device.DefaultPortStatistics;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.device.PortStatistics;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static junit.framework.TestCase.assertEquals;
import static org.easymock.EasyMock.*;
/**
* Unit test for DevicePortStatsCommand.
*/
public class DevicePortStatsCommandTest {
private DevicePortStatsCommand devicePortStatsCommand;
private PortStatistics portStatistics;
private DeviceService deviceService;
private List<Device> devices = new ArrayList<>();
private List<PortStatistics> portStatisticsList = new ArrayList<>();
private DeviceId id1;
@Before
public void setUp() {
devicePortStatsCommand = new DevicePortStatsCommand();
id1 = NetTestTools.did("d1");
DefaultDevice d1 = new DefaultDevice(NetTestTools.PID, id1, Device.Type.SWITCH,
"test", "1.0", "1.0",
"abacab", new ChassisId("c"),
DefaultAnnotations.EMPTY);
devices.add(d1);
portStatistics = DefaultPortStatistics.builder()
.setDurationSec(1)
.setBytesReceived(10)
.setBytesSent(20)
.setDurationNano(30)
.setPacketsReceived(40)
.setPacketsSent(50)
.setPacketsRxDropped(60)
.setPacketsRxErrors(70)
.setPacketsTxDropped(80)
.setPacketsTxErrors(90)
.setPort(PortNumber.portNumber(81))
.setDeviceId(id1)
.build();
portStatisticsList.add(portStatistics);
deviceService = createMock(DeviceService.class);
expect(deviceService.getPortStatistics(id1))
.andReturn(portStatisticsList);
expect(deviceService.getPortDeltaStatistics(id1))
.andReturn(portStatisticsList);
replay(deviceService);
}
/**
* Tests json port stats output.
*/
@Test
public void testJsonPortStats() {
JsonNode node = devicePortStatsCommand.jsonPortStats(deviceService, devices).get(0);
assertEquals(node.findValue("deviceId").asText(), id1.toString());
assertEquals(node.findValue("port").asText(), portStatistics.portNumber().toString());
assertEquals(node.findValue("pktRx").asLong(), portStatistics.packetsReceived());
assertEquals(node.findValue("pktTx").asLong(), portStatistics.packetsSent());
assertEquals(node.findValue("bytesRx").asLong(), portStatistics.bytesReceived());
assertEquals(node.findValue("bytesTx").asLong(), portStatistics.bytesSent());
assertEquals(node.findValue("pktRxDrp").asLong(), portStatistics.packetsRxDropped());
assertEquals(node.findValue("pktTxDrp").asLong(), portStatistics.packetsTxDropped());
assertEquals(node.findValue("Dur").asLong(), portStatistics.durationSec());
}
/**
* Tests json port stats delta output.
*/
@Test
public void testJsonPortStatsDelta() {
JsonNode node = devicePortStatsCommand.jsonPortStatsDelta(deviceService, devices).get(0);
float duration = ((float) portStatistics.durationSec()) +
(((float) portStatistics.durationNano()) / TimeUnit.SECONDS.toNanos(1));
float rateRx = portStatistics.bytesReceived() * 8 / duration;
float rateTx = portStatistics.bytesSent() * 8 / duration;
assertEquals(node.findValue("deviceId").asText(), id1.toString());
assertEquals(node.findValue("port").asText(), portStatistics.portNumber().toString());
assertEquals(node.findValue("pktRx").asLong(), portStatistics.packetsReceived());
assertEquals(node.findValue("pktTx").asLong(), portStatistics.packetsSent());
assertEquals(node.findValue("bytesRx").asLong(), portStatistics.bytesReceived());
assertEquals(node.findValue("bytesTx").asLong(), portStatistics.bytesSent());
assertEquals(node.findValue("rateRx").asText(), String.format("%.1f", rateRx));
assertEquals(node.findValue("rateTx").asText(), String.format("%.1f", rateTx));
assertEquals(node.findValue("pktRxDrp").asLong(), portStatistics.packetsRxDropped());
assertEquals(node.findValue("pktTxDrp").asLong(), portStatistics.packetsTxDropped());
assertEquals(node.findValue("interval").asText(), String.format("%.3f", duration));
}
}