diff --git a/src/internet-stack/udp-test.cc b/src/internet-stack/udp-test.cc index 8125a59a2..b568e1c9e 100644 --- a/src/internet-stack/udp-test.cc +++ b/src/internet-stack/udp-test.cc @@ -73,6 +73,48 @@ AddInternetStack (Ptr node) } +class UdpSocketLoopbackTest: public TestCase +{ +public: + UdpSocketLoopbackTest (); + virtual bool DoRun (void); + + void ReceivePkt (Ptr socket); + Ptr m_receivedPacket; +}; + +UdpSocketLoopbackTest::UdpSocketLoopbackTest () + : TestCase ("UDP loopback test") +{ +} + +void UdpSocketLoopbackTest::ReceivePkt (Ptr socket) +{ + uint32_t availableData; + availableData = socket->GetRxAvailable (); + m_receivedPacket = socket->Recv (std::numeric_limits::max(), 0); + NS_ASSERT (availableData == m_receivedPacket->GetSize ()); +} + +bool +UdpSocketLoopbackTest::DoRun () +{ + Ptr rxNode = CreateObject (); + AddInternetStack (rxNode); + + Ptr rxSocketFactory = rxNode->GetObject (); + Ptr rxSocket = rxSocketFactory->CreateSocket (); + rxSocket->Bind (InetSocketAddress (Ipv4Address::GetAny(), 80)); + rxSocket->SetRecvCallback (MakeCallback (&UdpSocketLoopbackTest::ReceivePkt, this)); + + Ptr txSocket = rxSocketFactory->CreateSocket (); + txSocket->SendTo (Create (246), 0, InetSocketAddress ("127.0.0.1", 80)); + Simulator::Run (); + Simulator::Destroy (); + NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 246, "first socket should not receive it (it is bound specifically to the second interface's address"); + return GetErrorStatus (); +} + class UdpSocketImplTest: public TestCase { Ptr m_receivedPacket; @@ -90,7 +132,6 @@ public: void ReceivePkt2 (Ptr socket); }; - UdpSocketImplTest::UdpSocketImplTest () : TestCase ("UDP socket implementation") { @@ -270,6 +311,7 @@ UdpSocketImplTest::DoRun (void) return GetErrorStatus (); } + //----------------------------------------------------------------------------- class UdpTestSuite : public TestSuite { @@ -277,6 +319,7 @@ public: UdpTestSuite () : TestSuite ("udp", UNIT) { AddTestCase (new UdpSocketImplTest); + AddTestCase (new UdpSocketLoopbackTest); } } g_udpTestSuite;