/* * Copyright (c) 2014 Pantheon Technologies s.r.o. 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.openflow.md.core.translator; import static org.mockito.Mockito.when; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.opendaylight.openflowjava.protocol.api.util.BinContent; import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants; import org.opendaylight.openflowplugin.api.openflow.md.core.ConnectionConductor; import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher; import org.opendaylight.openflowplugin.api.openflow.md.core.session.SessionContext; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsUpdate; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.flow.table.and.statistics.map.FlowTableAndStatisticsMap; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValues; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCaseBuilder; 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.MultipartReplyTableCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStatsBuilder; 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.PortStats; 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; 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.QueueStats; 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.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.MultipartReplyTableBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.multipart.reply.table.TableStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.multipart.reply.table.TableStatsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.NodeConnectorStatisticsUpdate; import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.QueueStatisticsUpdate; import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMap; import org.opendaylight.yangtools.yang.binding.DataObject; /** * @author michal.polkorab * */ @RunWith(MockitoJUnitRunner.class) public class MultipartReplyTranslatorThirdTest { @Mock SwitchConnectionDistinguisher cookie; @Mock SessionContext sc; @Mock ConnectionConductor conductor; @Mock GetFeaturesOutput features; MultipartReplyTranslator translator; /** * Initializes mocks */ @Before public void startUp() { final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager(); translator = new MultipartReplyTranslator(convertorManager); when(sc.getPrimaryConductor()).thenReturn(conductor); when(conductor.getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID); when(sc.getFeatures()).thenReturn(features); when(features.getDatapathId()).thenReturn(new BigInteger("42")); } /** * 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()); } /** * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)} * with empty table stats */ @Test public void testEmptyTableStats() { MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder(); mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID); mpBuilder.setXid(123L); mpBuilder.setFlags(new MultipartRequestFlags(false)); mpBuilder.setType(MultipartType.OFPMPTABLE); MultipartReplyTableCaseBuilder caseBuilder = new MultipartReplyTableCaseBuilder(); MultipartReplyTableBuilder statsBuilder = new MultipartReplyTableBuilder(); List<TableStats> tableStats = new ArrayList<>(); statsBuilder.setTableStats(tableStats); caseBuilder.setMultipartReplyTable(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()); FlowTableStatisticsUpdate statUpdate = (FlowTableStatisticsUpdate) 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 table stats size", 0, statUpdate.getFlowTableAndStatisticsMap().size()); } /** * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)} * with table stats */ @Test public void testTableStats() { MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder(); mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID); mpBuilder.setXid(123L); mpBuilder.setFlags(new MultipartRequestFlags(false)); mpBuilder.setType(MultipartType.OFPMPTABLE); MultipartReplyTableCaseBuilder caseBuilder = new MultipartReplyTableCaseBuilder(); MultipartReplyTableBuilder statsBuilder = new MultipartReplyTableBuilder(); List<TableStats> tableStats = new ArrayList<>(); TableStatsBuilder builder = new TableStatsBuilder(); builder.setTableId((short) 1); builder.setActiveCount(2L); builder.setLookupCount(new BigInteger("3")); builder.setMatchedCount(new BigInteger("4")); tableStats.add(builder.build()); builder = new TableStatsBuilder(); builder.setTableId((short) 10); builder.setActiveCount(20L); builder.setLookupCount(new BigInteger("30")); builder.setMatchedCount(new BigInteger("40")); tableStats.add(builder.build()); statsBuilder.setTableStats(tableStats); caseBuilder.setMultipartReplyTable(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()); FlowTableStatisticsUpdate statUpdate = (FlowTableStatisticsUpdate) 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 table stats size", 2, statUpdate.getFlowTableAndStatisticsMap().size()); FlowTableAndStatisticsMap stat = statUpdate.getFlowTableAndStatisticsMap().get(0); Assert.assertEquals("Wrong table-id", 1, stat.getTableId().getValue().intValue()); Assert.assertEquals("Wrong active count", 2, stat.getActiveFlows().getValue().intValue()); Assert.assertEquals("Wrong lookup count", 3, stat.getPacketsLookedUp().getValue().intValue()); Assert.assertEquals("Wrong matched count", 4, stat.getPacketsMatched().getValue().intValue()); stat = statUpdate.getFlowTableAndStatisticsMap().get(1); Assert.assertEquals("Wrong table-id", 10, stat.getTableId().getValue().intValue()); Assert.assertEquals("Wrong active count", 20, stat.getActiveFlows().getValue().intValue()); Assert.assertEquals("Wrong lookup count", 30, stat.getPacketsLookedUp().getValue().intValue()); Assert.assertEquals("Wrong matched count", 40, stat.getPacketsMatched().getValue().intValue()); } /** * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)} * with empty queue stats */ @Test public void testEmptyQueueStats() { MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder(); mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID); mpBuilder.setXid(123L); mpBuilder.setFlags(new MultipartRequestFlags(false)); mpBuilder.setType(MultipartType.OFPMPQUEUE); MultipartReplyQueueCaseBuilder caseBuilder = new MultipartReplyQueueCaseBuilder(); MultipartReplyQueueBuilder statsBuilder = new MultipartReplyQueueBuilder(); List<QueueStats> queueStats = new ArrayList<>(); statsBuilder.setQueueStats(queueStats); caseBuilder.setMultipartReplyQueue(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()); QueueStatisticsUpdate statUpdate = (QueueStatisticsUpdate) 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 queue stats size", 0, statUpdate.getQueueIdAndStatisticsMap().size()); } /** * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)} * with queue stats */ @Test public void testQueueStats() { MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder(); mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID); mpBuilder.setXid(123L); mpBuilder.setFlags(new MultipartRequestFlags(false)); mpBuilder.setType(MultipartType.OFPMPQUEUE); MultipartReplyQueueCaseBuilder caseBuilder = new MultipartReplyQueueCaseBuilder(); MultipartReplyQueueBuilder statsBuilder = new MultipartReplyQueueBuilder(); List<QueueStats> queueStats = new ArrayList<>(); QueueStatsBuilder builder = new QueueStatsBuilder(); builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.FLOOD.getIntValue())); builder.setQueueId(2L); builder.setTxPackets(new BigInteger("3")); builder.setTxBytes(new BigInteger("4")); builder.setTxErrors(new BigInteger("5")); builder.setDurationSec(6L); builder.setDurationNsec(7L); queueStats.add(builder.build()); builder = new QueueStatsBuilder(); builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.INPORT.getIntValue())); builder.setQueueId(20L); builder.setTxPackets(new BigInteger("30")); builder.setTxBytes(new BigInteger("40")); builder.setTxErrors(new BigInteger("50")); builder.setDurationSec(60L); builder.setDurationNsec(70L); queueStats.add(builder.build()); statsBuilder.setQueueStats(queueStats); caseBuilder.setMultipartReplyQueue(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()); QueueStatisticsUpdate statUpdate = (QueueStatisticsUpdate) 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 queue stats size", 2, statUpdate.getQueueIdAndStatisticsMap().size()); QueueIdAndStatisticsMap stat = statUpdate.getQueueIdAndStatisticsMap().get(0); Assert.assertEquals("Wrong port number", "openflow:42:FLOOD", stat.getNodeConnectorId().getValue()); Assert.assertEquals("Wrong queue-id", 2, stat.getQueueId().getValue().intValue()); Assert.assertEquals("Wrong tx packets", 3, stat.getTransmittedPackets().getValue().intValue()); Assert.assertEquals("Wrong tx bytes", 4, stat.getTransmittedBytes().getValue().intValue()); Assert.assertEquals("Wrong tx errors", 5, stat.getTransmissionErrors().getValue().intValue()); Assert.assertEquals("Wrong duration sec", 6, stat.getDuration().getSecond().getValue().intValue()); Assert.assertEquals("Wrong duration n sec", 7, stat.getDuration().getNanosecond().getValue().intValue()); stat = statUpdate.getQueueIdAndStatisticsMap().get(1); Assert.assertEquals("Wrong port number", "openflow:42:INPORT", stat.getNodeConnectorId().getValue()); Assert.assertEquals("Wrong queue-id", 20, stat.getQueueId().getValue().intValue()); Assert.assertEquals("Wrong tx packets", 30, stat.getTransmittedPackets().getValue().intValue()); Assert.assertEquals("Wrong tx bytes", 40, stat.getTransmittedBytes().getValue().intValue()); Assert.assertEquals("Wrong tx errors", 50, stat.getTransmissionErrors().getValue().intValue()); Assert.assertEquals("Wrong duration sec", 60, stat.getDuration().getSecond().getValue().intValue()); Assert.assertEquals("Wrong duration n sec", 70, stat.getDuration().getNanosecond().getValue().intValue()); } }