From c51501aef8b66c06d70533cd0a61773ac691c8d8 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Fri, 16 Apr 2010 15:29:40 -0700 Subject: [PATCH] UDP test code for loopback net device --- src/internet-stack/udp-test.cc | 45 +++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) 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;