/**
   * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext,
   * OfHeader)} with empty port stats
   */
  @Test
  public void testEmptyPortStats() {
    MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();
    mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
    mpBuilder.setXid(123L);
    mpBuilder.setFlags(new MultipartRequestFlags(false));
    mpBuilder.setType(MultipartType.OFPMPPORTSTATS);

    MultipartReplyPortStatsCaseBuilder caseBuilder = new MultipartReplyPortStatsCaseBuilder();
    MultipartReplyPortStatsBuilder statsBuilder = new MultipartReplyPortStatsBuilder();
    List<PortStats> portStats = new ArrayList<>();
    statsBuilder.setPortStats(portStats);
    caseBuilder.setMultipartReplyPortStats(statsBuilder.build());
    mpBuilder.setMultipartReplyBody(caseBuilder.build());
    MultipartReplyMessage message = mpBuilder.build();

    List<DataObject> list = translator.translate(cookie, sc, message);

    Assert.assertEquals("Wrong list size", 1, list.size());
    NodeConnectorStatisticsUpdate statUpdate = (NodeConnectorStatisticsUpdate) list.get(0);
    Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());
    Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());
    Assert.assertEquals(
        "Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());
    Assert.assertEquals(
        "Wrong port stats size", 0, statUpdate.getNodeConnectorStatisticsAndPortNumberMap().size());
  }
  /**
   * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext,
   * OfHeader)} with port stats
   */
  @Test
  public void testPortStats() {
    MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();
    mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
    mpBuilder.setXid(123L);
    mpBuilder.setFlags(new MultipartRequestFlags(false));
    mpBuilder.setType(MultipartType.OFPMPPORTSTATS);

    MultipartReplyPortStatsCaseBuilder caseBuilder = new MultipartReplyPortStatsCaseBuilder();
    MultipartReplyPortStatsBuilder statsBuilder = new MultipartReplyPortStatsBuilder();
    List<PortStats> portStats = new ArrayList<>();
    PortStatsBuilder builder = new PortStatsBuilder();
    builder.setPortNo(1L);
    builder.setRxPackets(new BigInteger("2"));
    builder.setTxPackets(new BigInteger("3"));
    builder.setRxBytes(new BigInteger("4"));
    builder.setTxBytes(new BigInteger("5"));
    builder.setRxDropped(new BigInteger("6"));
    builder.setTxDropped(new BigInteger("7"));
    builder.setRxErrors(new BigInteger("8"));
    builder.setTxErrors(new BigInteger("9"));
    builder.setRxFrameErr(new BigInteger("10"));
    builder.setRxOverErr(new BigInteger("11"));
    builder.setRxCrcErr(new BigInteger("12"));
    builder.setCollisions(new BigInteger("13"));
    builder.setDurationSec(14L);
    builder.setDurationNsec(15L);
    portStats.add(builder.build());
    builder = new PortStatsBuilder();
    builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.CONTROLLER.getIntValue()));
    builder.setRxPackets(new BigInteger("20"));
    builder.setTxPackets(new BigInteger("30"));
    builder.setRxBytes(new BigInteger("40"));
    builder.setTxBytes(new BigInteger("50"));
    builder.setRxDropped(new BigInteger("60"));
    builder.setTxDropped(new BigInteger("70"));
    builder.setRxErrors(new BigInteger("80"));
    builder.setTxErrors(new BigInteger("90"));
    builder.setRxFrameErr(new BigInteger("100"));
    builder.setRxOverErr(new BigInteger("110"));
    builder.setRxCrcErr(new BigInteger("120"));
    builder.setCollisions(new BigInteger("130"));
    portStats.add(builder.build());
    statsBuilder.setPortStats(portStats);
    caseBuilder.setMultipartReplyPortStats(statsBuilder.build());
    mpBuilder.setMultipartReplyBody(caseBuilder.build());
    MultipartReplyMessage message = mpBuilder.build();

    List<DataObject> list = translator.translate(cookie, sc, message);

    Assert.assertEquals("Wrong list size", 1, list.size());
    NodeConnectorStatisticsUpdate statUpdate = (NodeConnectorStatisticsUpdate) list.get(0);
    Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());
    Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());
    Assert.assertEquals(
        "Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());
    Assert.assertEquals(
        "Wrong port stats size", 2, statUpdate.getNodeConnectorStatisticsAndPortNumberMap().size());
    NodeConnectorStatisticsAndPortNumberMap stat =
        statUpdate.getNodeConnectorStatisticsAndPortNumberMap().get(0);
    Assert.assertEquals("Wrong port number", "openflow:42:1", stat.getNodeConnectorId().getValue());
    Assert.assertEquals("Wrong rx packets", 2, stat.getPackets().getReceived().intValue());
    Assert.assertEquals("Wrong tx packets", 3, stat.getPackets().getTransmitted().intValue());
    Assert.assertEquals("Wrong rx bytes", 4, stat.getBytes().getReceived().intValue());
    Assert.assertEquals("Wrong tx bytes", 5, stat.getBytes().getTransmitted().intValue());
    Assert.assertEquals("Wrong rx dropped", 6, stat.getReceiveDrops().intValue());
    Assert.assertEquals("Wrong tx dropped", 7, stat.getTransmitDrops().intValue());
    Assert.assertEquals("Wrong rx errors", 8, stat.getReceiveErrors().intValue());
    Assert.assertEquals("Wrong tx errors", 9, stat.getTransmitErrors().intValue());
    Assert.assertEquals("Wrong rx frame error", 10, stat.getReceiveFrameError().intValue());
    Assert.assertEquals("Wrong rx over error", 11, stat.getReceiveOverRunError().intValue());
    Assert.assertEquals("Wrong rx crc error", 12, stat.getReceiveCrcError().intValue());
    Assert.assertEquals("Wrong collision count", 13, stat.getCollisionCount().intValue());
    Assert.assertEquals(
        "Wrong duration sec", 14, stat.getDuration().getSecond().getValue().intValue());
    Assert.assertEquals(
        "Wrong duration n sec", 15, stat.getDuration().getNanosecond().getValue().intValue());
    stat = statUpdate.getNodeConnectorStatisticsAndPortNumberMap().get(1);
    Assert.assertEquals(
        "Wrong port number", "openflow:42:CONTROLLER", stat.getNodeConnectorId().getValue());
    Assert.assertEquals("Wrong rx packets", 20, stat.getPackets().getReceived().intValue());
    Assert.assertEquals("Wrong tx packets", 30, stat.getPackets().getTransmitted().intValue());
    Assert.assertEquals("Wrong rx bytes", 40, stat.getBytes().getReceived().intValue());
    Assert.assertEquals("Wrong tx bytes", 50, stat.getBytes().getTransmitted().intValue());
    Assert.assertEquals("Wrong rx dropped", 60, stat.getReceiveDrops().intValue());
    Assert.assertEquals("Wrong tx dropped", 70, stat.getTransmitDrops().intValue());
    Assert.assertEquals("Wrong rx errors", 80, stat.getReceiveErrors().intValue());
    Assert.assertEquals("Wrong tx errors", 90, stat.getTransmitErrors().intValue());
    Assert.assertEquals("Wrong rx frame error", 100, stat.getReceiveFrameError().intValue());
    Assert.assertEquals("Wrong rx over error", 110, stat.getReceiveOverRunError().intValue());
    Assert.assertEquals("Wrong rx crc error", 120, stat.getReceiveCrcError().intValue());
    Assert.assertEquals("Wrong collision count", 130, stat.getCollisionCount().intValue());
    Assert.assertEquals("Wrong duration sec", null, stat.getDuration().getSecond());
    Assert.assertEquals("Wrong duration n sec", null, stat.getDuration().getNanosecond());
  }