diff --git a/src/link_prober/LinkProber.cpp b/src/link_prober/LinkProber.cpp index 57438ecb..d974f01f 100644 --- a/src/link_prober/LinkProber.cpp +++ b/src/link_prober/LinkProber.cpp @@ -299,9 +299,10 @@ void LinkProber::sendHeartbeat() { MUXLOGTRACE(mMuxPortConfig.getPortName()); + updateIcmpSequenceNo(); + // check if suspend timer is running if ((!mSuspendTx) && (!mShutdownTx)) { - updateIcmpSequenceNo(); boost::system::error_code errorCode; mStream.write_some(boost::asio::buffer(mTxBuffer.data(), mTxPacketSize), errorCode); diff --git a/test/LinkProberTest.cpp b/test/LinkProberTest.cpp index 2d170455..a5e0a1f7 100644 --- a/test/LinkProberTest.cpp +++ b/test/LinkProberTest.cpp @@ -160,6 +160,17 @@ TEST_F(LinkProberTest, UpdateSequenceNo) EXPECT_TRUE(getRxSelfSeqNo() + 1 == ntohs(icmpHeader->un.echo.sequence)); EXPECT_TRUE(getRxPeerSeqNo() + 1 == ntohs(icmpHeader->un.echo.sequence)); + + // sequence number should still be updated when heartbeat is suspended + EXPECT_EQ(getRxSelfSeqNo(), 0); + EXPECT_EQ(getRxPeerSeqNo(), 0); + + handleSuspendTxProbes(); + EXPECT_TRUE(getSuspendTx()); + + handleSendHeartbeat(); + EXPECT_EQ(getRxSelfSeqNo(), 1); + EXPECT_EQ(getRxPeerSeqNo(), 1); } TEST_F(LinkProberTest, GenerateGuid) diff --git a/test/LinkProberTest.h b/test/LinkProberTest.h index 137b4343..9c5ef03c 100644 --- a/test/LinkProberTest.h +++ b/test/LinkProberTest.h @@ -42,6 +42,8 @@ class LinkProberTest: public ::testing::Test void initializeSendBuffer() {mLinkProber.initializeSendBuffer();}; void handleUpdateEthernetFrame() {mLinkProber.handleUpdateEthernetFrame();}; void handleUpdateSequenceNumber() {mLinkProber.updateIcmpSequenceNo();}; + void handleSuspendTxProbes() {mLinkProber.suspendTxProbes(300);}; + void handleSendHeartbeat() {mLinkProber.sendHeartbeat();}; void resetTxBufferTlv() {mLinkProber.resetTxBufferTlv();}; size_t getTxPacketSize() {return mLinkProber.mTxPacketSize;}; size_t appendTlvCommand(link_prober::Command commandType); @@ -54,6 +56,7 @@ class LinkProberTest: public ::testing::Test uint16_t getRxSelfSeqNo() {return mLinkProber.mRxSelfSeqNo;}; uint16_t getRxPeerSeqNo() {return mLinkProber.mRxPeerSeqNo;}; + bool getSuspendTx() {return mLinkProber.mSuspendTx;}; boost::asio::io_service mIoService; common::MuxConfig mMuxConfig;