From 72f7f0315968b99ef7c1ed4b1e2e35c8d622f013 Mon Sep 17 00:00:00 2001 From: Pavel Boyko Date: Thu, 8 Oct 2009 14:35:17 +0400 Subject: [PATCH] [aodv] Test rewrite in progress --- src/routing/aodv/aodv-rqueue.cc | 106 ------------- src/routing/aodv/aodv-rtable.cc | 155 ------------------ src/routing/aodv/aodv-test-suite.cc | 237 +++++++++++++++++++++++++++- 3 files changed, 236 insertions(+), 262 deletions(-) diff --git a/src/routing/aodv/aodv-rqueue.cc b/src/routing/aodv/aodv-rqueue.cc index 7773ec12b..1a3b49acb 100644 --- a/src/routing/aodv/aodv-rqueue.cc +++ b/src/routing/aodv/aodv-rqueue.cc @@ -31,7 +31,6 @@ #include "ns3/ipv4-route.h" #include "ns3/socket.h" #include "ns3/log.h" -#include "ns3/test.h" NS_LOG_COMPONENT_DEFINE ("AodvRequestQueue"); @@ -143,110 +142,5 @@ RequestQueue::Drop (QueueEntry en, std::string reason) return; } - -#ifdef RUN_SELF_TESTS -/// Unit test for RequestQueue -struct AodvRqueueTest : public Test - { - AodvRqueueTest () : Test ("AODV/Rqueue"), q (64, Seconds (30)), result (true) {} - virtual bool RunTests (); - void Unicast (Ptr route, Ptr packet, const Ipv4Header & header) {} - void Error (Ptr, const Ipv4Header &, Socket::SocketErrno) {} - void CheckSizeLimit (); - void CheckTimeout (); - - RequestQueue q; - bool result; - }; - -/// Test instance -static AodvRqueueTest g_AodvRqueueTest; - -bool -AodvRqueueTest::RunTests () -{ - NS_TEST_ASSERT_EQUAL (q.GetMaxQueueLen (), 64); - q.SetMaxQueueLen (32); - NS_TEST_ASSERT_EQUAL (q.GetMaxQueueLen (), 32); - NS_TEST_ASSERT_EQUAL (q.GetQueueTimeout (), Seconds (30)); - q.SetQueueTimeout (Seconds(10)); - NS_TEST_ASSERT_EQUAL (q.GetQueueTimeout (), Seconds (10)); - - Ptr packet = Create (); - Ipv4Header h; - h.SetDestination (Ipv4Address ("1.2.3.4")); - h.SetSource (Ipv4Address ("4.3.2.1")); - Ipv4RoutingProtocol::UnicastForwardCallback ucb = MakeCallback (&AodvRqueueTest::Unicast, this); - Ipv4RoutingProtocol::ErrorCallback ecb = MakeCallback (&AodvRqueueTest::Error, this); - QueueEntry e1 (packet, h, ucb, ecb, Seconds (1)); - q.Enqueue (e1); - q.Enqueue (e1); - q.Enqueue (e1); - NS_TEST_ASSERT_EQUAL (q.Find (Ipv4Address ("1.2.3.4")), true); - NS_TEST_ASSERT_EQUAL (q.Find (Ipv4Address ("1.1.1.1")), false); - NS_TEST_ASSERT_EQUAL (q.GetSize (), 1); - q.DropPacketWithDst (Ipv4Address ("1.2.3.4")); - NS_TEST_ASSERT_EQUAL (q.Find (Ipv4Address ("1.2.3.4")), false); - NS_TEST_ASSERT_EQUAL (q.GetSize (), 0); - - h.SetDestination (Ipv4Address ("2.2.2.2")); - QueueEntry e2 (packet, h, ucb, ecb, Seconds (1)); - q.Enqueue (e1); - q.Enqueue (e2); - Ptr packet2 = Create (); - QueueEntry e3 (packet2, h, ucb, ecb, Seconds (1)); - NS_TEST_ASSERT_EQUAL (q.Dequeue (Ipv4Address("3.3.3.3"), e3), false); - NS_TEST_ASSERT_EQUAL (q.Dequeue (Ipv4Address ("2.2.2.2"), e3), true); - NS_TEST_ASSERT_EQUAL (q.Find (Ipv4Address ("2.2.2.2")), false); - q.Enqueue (e2); - q.Enqueue (e3); - NS_TEST_ASSERT_EQUAL (q.GetSize (), 2); - Ptr packet4 = Create (); - h.SetDestination (Ipv4Address ("1.2.3.4")); - QueueEntry e4 (packet4, h, ucb, ecb, Seconds (20)); - q.Enqueue (e4); - NS_TEST_ASSERT_EQUAL (q.GetSize (), 3); - q.DropPacketWithDst (Ipv4Address ("1.2.3.4")); - NS_TEST_ASSERT_EQUAL (q.GetSize(), 1); - - CheckSizeLimit (); - - Ipv4Header header2; - Ipv4Address dst2 ("1.2.3.4"); - header2.SetDestination (dst2); - - Simulator::Schedule (q.GetQueueTimeout () + Seconds (1), &AodvRqueueTest::CheckTimeout, this); - - Simulator::Run (); - Simulator::Destroy (); - - return result; -} - -void -AodvRqueueTest::CheckSizeLimit () -{ - Ptr packet = Create (); - Ipv4Header header; - Ipv4RoutingProtocol::UnicastForwardCallback ucb = MakeCallback (&AodvRqueueTest::Unicast, this); - Ipv4RoutingProtocol::ErrorCallback ecb = MakeCallback (&AodvRqueueTest::Error, this); - QueueEntry e1 (packet, header, ucb, ecb, Seconds (1)); - - for (uint32_t i = 0; i < q.GetMaxQueueLen (); ++i) - q.Enqueue (e1); - NS_TEST_ASSERT_EQUAL (q.GetSize (), 2); - - for (uint32_t i = 0; i < q.GetMaxQueueLen (); ++i) - q.Enqueue (e1); - NS_TEST_ASSERT_EQUAL (q.GetSize (), 2); -} - -void -AodvRqueueTest::CheckTimeout () -{ - NS_TEST_ASSERT_EQUAL (q.GetSize (), 0); -} -#endif - } } diff --git a/src/routing/aodv/aodv-rtable.cc b/src/routing/aodv/aodv-rtable.cc index b8ccbdbac..b98580674 100644 --- a/src/routing/aodv/aodv-rtable.cc +++ b/src/routing/aodv/aodv-rtable.cc @@ -28,7 +28,6 @@ #include "aodv-rtable.h" #include #include "ns3/simulator.h" -#include "ns3/test.h" #include "ns3/log.h" NS_LOG_COMPONENT_DEFINE ("AodvRoutingTable"); @@ -161,96 +160,6 @@ RoutingTableEntry::Print (std::ostream & os) const << m_hops << "\n"; } -#ifdef RUN_SELF_TESTS -/// Unit test for AODV routing table entry -struct AodvRtableEntryTest : public Test - { - AodvRtableEntryTest () : Test ("AODV/RtableEntry"), result(true) - {} - virtual bool RunTests(); - bool result; - }; - -/// Test instance -static AodvRtableEntryTest g_AodvRtableEntryTest; - -bool -AodvRtableEntryTest::RunTests () - { - Ptr dev; - Ipv4InterfaceAddress iface; - RoutingTableEntry rt (/*output device*/dev, /*dst*/Ipv4Address("1.2.3.4"), /*validSeqNo*/true, /*seqNo*/10, - /*interface*/iface, /*hop*/5, /*next hop*/Ipv4Address("3.3.3.3"), /*lifetime*/Seconds(10)); - NS_TEST_ASSERT_EQUAL (rt.GetOutputDevice (), dev); - NS_TEST_ASSERT_EQUAL (rt.GetDestination (), Ipv4Address ("1.2.3.4")); - NS_TEST_ASSERT_EQUAL (rt.GetValidSeqNo (), true); - NS_TEST_ASSERT_EQUAL (rt.GetSeqNo (), 10); - NS_TEST_ASSERT_EQUAL (rt.GetInterface (), iface); - NS_TEST_ASSERT_EQUAL (rt.GetHop (), 5); - NS_TEST_ASSERT_EQUAL (rt.GetNextHop (), Ipv4Address ("3.3.3.3")); - NS_TEST_ASSERT_EQUAL (rt.GetLifeTime (), Seconds (10)); - NS_TEST_ASSERT_EQUAL (rt.GetFlag (), VALID); - NS_TEST_ASSERT_EQUAL (rt.GetRreqCnt (), 0); - NS_TEST_ASSERT_EQUAL (rt.IsPrecursorListEmpty (), true); - - Ptr dev2; - Ipv4InterfaceAddress iface2; - rt.SetOutputDevice (dev2); - NS_TEST_ASSERT_EQUAL (rt.GetOutputDevice (), dev2); - rt.SetInterface (iface2); - NS_TEST_ASSERT_EQUAL (rt.GetInterface (), iface2); - rt.SetValidSeqNo (false); - NS_TEST_ASSERT_EQUAL (rt.GetValidSeqNo (), false); - rt.SetFlag (INVALID); - NS_TEST_ASSERT_EQUAL (rt.GetFlag (), INVALID); - rt.SetFlag (IN_SEARCH); - NS_TEST_ASSERT_EQUAL (rt.GetFlag (), IN_SEARCH); - rt.SetHop (12); - NS_TEST_ASSERT_EQUAL (rt.GetHop (), 12); - rt.SetLifeTime (Seconds (1)); - NS_TEST_ASSERT_EQUAL (rt.GetLifeTime (), Seconds (1)); - rt.SetNextHop (Ipv4Address ("1.1.1.1")); - NS_TEST_ASSERT_EQUAL (rt.GetNextHop (), Ipv4Address ("1.1.1.1")); - rt.SetUnidirectional (true); - NS_TEST_ASSERT_EQUAL (rt.IsUnidirectional (), true); - rt.SetBalcklistTimeout (Seconds (7)); - NS_TEST_ASSERT_EQUAL (rt.GetBlacklistTimeout (), Seconds (7)); - rt.SetRreqCnt (2); - NS_TEST_ASSERT_EQUAL (rt.GetRreqCnt (), 2); - rt.IncrementRreqCnt (); - NS_TEST_ASSERT_EQUAL (rt.GetRreqCnt (), 3); - rt.Invalidate (Seconds (13)); - NS_TEST_ASSERT_EQUAL (rt.GetFlag (), INVALID); - NS_TEST_ASSERT_EQUAL (rt.GetLifeTime (), Seconds (13)); - rt.SetLifeTime (Seconds (0.1)); - NS_TEST_ASSERT_EQUAL (rt.GetLifeTime (), Seconds (0.1)); - Ptr route = rt.GetRoute (); - NS_TEST_ASSERT_EQUAL (route->GetDestination (), Ipv4Address ("1.2.3.4")); - - NS_TEST_ASSERT_EQUAL (rt.InsertPrecursor (Ipv4Address ("10.0.0.1")), true); - NS_TEST_ASSERT_EQUAL (rt.IsPrecursorListEmpty (), false); - NS_TEST_ASSERT_EQUAL (rt.InsertPrecursor (Ipv4Address ("10.0.0.2")), true); - NS_TEST_ASSERT_EQUAL (rt.InsertPrecursor (Ipv4Address ("10.0.0.2")), false); - NS_TEST_ASSERT_EQUAL (rt.LookupPrecursor (Ipv4Address ("10.0.0.3")), false); - NS_TEST_ASSERT_EQUAL (rt.LookupPrecursor (Ipv4Address ("10.0.0.1")), true); - NS_TEST_ASSERT_EQUAL (rt.DeletePrecursor (Ipv4Address ("10.0.0.2")), true); - NS_TEST_ASSERT_EQUAL (rt.LookupPrecursor (Ipv4Address ("10.0.0.2")), false); - std::vector prec; - rt.GetPrecursors (prec); - NS_TEST_ASSERT_EQUAL (prec.size (), 1); - NS_TEST_ASSERT_EQUAL (rt.InsertPrecursor (Ipv4Address ("10.0.0.4")), true); - NS_TEST_ASSERT_EQUAL (rt.DeletePrecursor (Ipv4Address ("10.0.0.5")), false); - rt.GetPrecursors (prec); - NS_TEST_ASSERT_EQUAL (prec.size (), 2); - rt.DeleteAllPrecursors (); - NS_TEST_ASSERT_EQUAL (rt.IsPrecursorListEmpty (), true); - rt.GetPrecursors (prec); - NS_TEST_ASSERT_EQUAL (prec.size (), 2); - - return result; - } -#endif - /* The Routing Table */ @@ -422,69 +331,5 @@ RoutingTable::Print (std::ostream &os) os << "\n"; } -#ifdef RUN_SELF_TESTS -/// Unit test for AODV routing table -struct AodvRtableTest : public Test - { - AodvRtableTest () : Test ("AODV/Rtable"), result(true) - {} - virtual bool RunTests(); - bool result; - }; - -/// Test instance -static AodvRtableTest g_AodvRtableTest; - -bool -AodvRtableTest::RunTests () - { - RoutingTable rtable (Seconds (2)); - NS_TEST_ASSERT_EQUAL (rtable.GetBadLinkLifetime (), Seconds (2)); - rtable.SetBadLinkLifetime (Seconds (1)); - NS_TEST_ASSERT_EQUAL (rtable.GetBadLinkLifetime (), Seconds (1)); - Ptr dev; - Ipv4InterfaceAddress iface; - RoutingTableEntry rt (/*output device*/dev, /*dst*/Ipv4Address("1.2.3.4"), /*validSeqNo*/true, /*seqNo*/10, - /*interface*/iface, /*hop*/5, /*next hop*/Ipv4Address("1.1.1.1"), /*lifetime*/Seconds(10)); - NS_TEST_ASSERT_EQUAL (rtable.AddRoute (rt), true); - NS_TEST_ASSERT_EQUAL (rtable.AddRoute (rt), false); - RoutingTableEntry rt2 (/*output device*/dev, /*dst*/Ipv4Address("4.3.2.1"), /*validSeqNo*/false, /*seqNo*/0, - /*interface*/iface, /*hop*/15, /*next hop*/Ipv4Address("1.1.1.1"), /*lifetime*/Seconds(1)); - NS_TEST_ASSERT_EQUAL (rtable.AddRoute (rt2), true); - NS_TEST_ASSERT_EQUAL (rtable.LookupRoute (rt2.GetDestination (), rt), true); - NS_TEST_ASSERT_EQUAL (rt2.GetDestination (), rt.GetDestination ()); - rt.SetHop (20); - rt.InsertPrecursor (Ipv4Address ("10.0.0.3")); - NS_TEST_ASSERT_EQUAL (rtable.Update (rt), true); - RoutingTableEntry rt3; - NS_TEST_ASSERT_EQUAL (rtable.LookupRoute (Ipv4Address ("10.0.0.1"), rt), false); - NS_TEST_ASSERT_EQUAL (rtable.Update (rt3), false); - NS_TEST_ASSERT_EQUAL (rtable.SetEntryState (Ipv4Address ("10.0.0.1"), INVALID), false); - NS_TEST_ASSERT_EQUAL (rtable.SetEntryState (Ipv4Address ("1.2.3.4"), IN_SEARCH), true); - NS_TEST_ASSERT_EQUAL (rtable.DeleteRoute (Ipv4Address ("5.5.5.5")), false); - RoutingTableEntry rt4 (/*output device*/dev, /*dst*/Ipv4Address ("5.5.5.5"), /*validSeqNo*/false, /*seqNo*/0, - /*interface*/iface, /*hop*/15, /*next hop*/Ipv4Address ("1.1.1.1"), /*lifetime*/Seconds (-10)); - NS_TEST_ASSERT_EQUAL (rtable.AddRoute (rt4), true); - NS_TEST_ASSERT_EQUAL (rtable.SetEntryState (Ipv4Address ("5.5.5.5"), INVALID), true); - NS_TEST_ASSERT_EQUAL (rtable.LookupRoute (Ipv4Address ("5.5.5.5"), rt), false); - NS_TEST_ASSERT_EQUAL (rtable.MarkLinkAsUinidirectional (Ipv4Address ("1.2.3.4"), Seconds (2)), true); - NS_TEST_ASSERT_EQUAL (rtable.LookupRoute (Ipv4Address ("1.2.3.4"), rt), true); - NS_TEST_ASSERT_EQUAL (rt.IsUnidirectional (), true); - rt.SetLifeTime (Seconds (-5)); - NS_TEST_ASSERT_EQUAL (rtable.Update (rt), true); - std::map unreachable; - rtable.GetListOfDestinationWithNextHop (Ipv4Address ("1.1.1.1"), unreachable); - NS_TEST_ASSERT_EQUAL (unreachable.size (), 2); - unreachable.insert (std::make_pair (Ipv4Address ("4.3.2.1"), 3)); - rtable.InvalidateRoutesWithDst (unreachable); - NS_TEST_ASSERT_EQUAL (rtable.LookupRoute (Ipv4Address ("4.3.2.1"), rt), true); - NS_TEST_ASSERT_EQUAL (rt.GetFlag (), INVALID); - NS_TEST_ASSERT_EQUAL (rtable.DeleteRoute (Ipv4Address ("1.2.3.4")), true); - NS_TEST_ASSERT_EQUAL (rtable.DeleteRoute (Ipv4Address ("1.2.3.4")), false); - - return result; - } -#endif - } } diff --git a/src/routing/aodv/aodv-test-suite.cc b/src/routing/aodv/aodv-test-suite.cc index 5695a0b2f..f8c87ea7d 100644 --- a/src/routing/aodv/aodv-test-suite.cc +++ b/src/routing/aodv/aodv-test-suite.cc @@ -21,9 +21,9 @@ #include "aodv-neighbor.h" #include "aodv-packet.h" #include "aodv-rqueue.h" +#include "aodv-rtable.h" #include "ns3/ipv4-route.h" - namespace ns3 { namespace aodv @@ -301,6 +301,238 @@ struct QueueEntryTest : public TestCase } }; //----------------------------------------------------------------------------- +/// Unit test for RequestQueue +struct AodvRqueueTest : public TestCase +{ + AodvRqueueTest () : TestCase ("Rqueue"), q (64, Seconds (30)) {} + virtual bool DoRun (); + void Unicast (Ptr route, Ptr packet, const Ipv4Header & header) {} + void Error (Ptr, const Ipv4Header &, Socket::SocketErrno) {} + void CheckSizeLimit (); + void CheckTimeout (); + + RequestQueue q; +}; + +bool +AodvRqueueTest::DoRun () +{ + NS_TEST_EXPECT_MSG_EQ (q.GetMaxQueueLen (), 64, "trivial"); + q.SetMaxQueueLen (32); + NS_TEST_EXPECT_MSG_EQ (q.GetMaxQueueLen (), 32, "trivial"); + NS_TEST_EXPECT_MSG_EQ (q.GetQueueTimeout (), Seconds (30), "trivial"); + q.SetQueueTimeout (Seconds(10)); + NS_TEST_EXPECT_MSG_EQ (q.GetQueueTimeout (), Seconds (10), "trivial"); + + Ptr packet = Create (); + Ipv4Header h; + h.SetDestination (Ipv4Address ("1.2.3.4")); + h.SetSource (Ipv4Address ("4.3.2.1")); + Ipv4RoutingProtocol::UnicastForwardCallback ucb = MakeCallback (&AodvRqueueTest::Unicast, this); + Ipv4RoutingProtocol::ErrorCallback ecb = MakeCallback (&AodvRqueueTest::Error, this); + QueueEntry e1 (packet, h, ucb, ecb, Seconds (1)); + q.Enqueue (e1); + q.Enqueue (e1); + q.Enqueue (e1); + NS_TEST_EXPECT_MSG_EQ (q.Find (Ipv4Address ("1.2.3.4")), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (q.Find (Ipv4Address ("1.1.1.1")), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 1, "trivial"); + q.DropPacketWithDst (Ipv4Address ("1.2.3.4")); + NS_TEST_EXPECT_MSG_EQ (q.Find (Ipv4Address ("1.2.3.4")), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 0, "trivial"); + + h.SetDestination (Ipv4Address ("2.2.2.2")); + QueueEntry e2 (packet, h, ucb, ecb, Seconds (1)); + q.Enqueue (e1); + q.Enqueue (e2); + Ptr packet2 = Create (); + QueueEntry e3 (packet2, h, ucb, ecb, Seconds (1)); + NS_TEST_EXPECT_MSG_EQ (q.Dequeue (Ipv4Address("3.3.3.3"), e3), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (q.Dequeue (Ipv4Address ("2.2.2.2"), e3), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (q.Find (Ipv4Address ("2.2.2.2")), false, "trivial"); + q.Enqueue (e2); + q.Enqueue (e3); + NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 2, "trivial"); + Ptr packet4 = Create (); + h.SetDestination (Ipv4Address ("1.2.3.4")); + QueueEntry e4 (packet4, h, ucb, ecb, Seconds (20)); + q.Enqueue (e4); + NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 3, "trivial"); + q.DropPacketWithDst (Ipv4Address ("1.2.3.4")); + NS_TEST_EXPECT_MSG_EQ (q.GetSize(), 1, "trivial"); + + CheckSizeLimit (); + + Ipv4Header header2; + Ipv4Address dst2 ("1.2.3.4"); + header2.SetDestination (dst2); + + Simulator::Schedule (q.GetQueueTimeout () + Seconds (1), &AodvRqueueTest::CheckTimeout, this); + + Simulator::Run (); + Simulator::Destroy (); + + return GetErrorStatus (); +} + +void +AodvRqueueTest::CheckSizeLimit () +{ + Ptr packet = Create (); + Ipv4Header header; + Ipv4RoutingProtocol::UnicastForwardCallback ucb = MakeCallback (&AodvRqueueTest::Unicast, this); + Ipv4RoutingProtocol::ErrorCallback ecb = MakeCallback (&AodvRqueueTest::Error, this); + QueueEntry e1 (packet, header, ucb, ecb, Seconds (1)); + + for (uint32_t i = 0; i < q.GetMaxQueueLen (); ++i) + q.Enqueue (e1); + NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 2, "trivial"); + + for (uint32_t i = 0; i < q.GetMaxQueueLen (); ++i) + q.Enqueue (e1); + NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 2, "trivial"); +} + +void +AodvRqueueTest::CheckTimeout () +{ + NS_TEST_EXPECT_MSG_EQ (q.GetSize (), 0, "Must be empty now"); +} +//----------------------------------------------------------------------------- +/// Unit test for AODV routing table entry +struct AodvRtableEntryTest : public TestCase +{ + AodvRtableEntryTest () : TestCase ("RtableEntry") {} + virtual bool DoRun() + { + Ptr dev; + Ipv4InterfaceAddress iface; + RoutingTableEntry rt (/*output device*/dev, /*dst*/Ipv4Address("1.2.3.4"), /*validSeqNo*/true, /*seqNo*/10, + /*interface*/iface, /*hop*/5, /*next hop*/Ipv4Address("3.3.3.3"), /*lifetime*/Seconds(10)); + NS_TEST_EXPECT_MSG_EQ (rt.GetOutputDevice (), dev, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetDestination (), Ipv4Address ("1.2.3.4"), "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetValidSeqNo (), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetSeqNo (), 10, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetInterface (), iface, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetHop (), 5, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetNextHop (), Ipv4Address ("3.3.3.3"), "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetLifeTime (), Seconds (10), "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetFlag (), VALID, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetRreqCnt (), 0, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.IsPrecursorListEmpty (), true, "trivial"); + + Ptr dev2; + Ipv4InterfaceAddress iface2; + rt.SetOutputDevice (dev2); + NS_TEST_EXPECT_MSG_EQ (rt.GetOutputDevice (), dev2, "trivial"); + rt.SetInterface (iface2); + NS_TEST_EXPECT_MSG_EQ (rt.GetInterface (), iface2, "trivial"); + rt.SetValidSeqNo (false); + NS_TEST_EXPECT_MSG_EQ (rt.GetValidSeqNo (), false, "trivial"); + rt.SetFlag (INVALID); + NS_TEST_EXPECT_MSG_EQ (rt.GetFlag (), INVALID, "trivial"); + rt.SetFlag (IN_SEARCH); + NS_TEST_EXPECT_MSG_EQ (rt.GetFlag (), IN_SEARCH, "trivial"); + rt.SetHop (12); + NS_TEST_EXPECT_MSG_EQ (rt.GetHop (), 12, "trivial"); + rt.SetLifeTime (Seconds (1)); + NS_TEST_EXPECT_MSG_EQ (rt.GetLifeTime (), Seconds (1), "trivial"); + rt.SetNextHop (Ipv4Address ("1.1.1.1")); + NS_TEST_EXPECT_MSG_EQ (rt.GetNextHop (), Ipv4Address ("1.1.1.1"), "trivial"); + rt.SetUnidirectional (true); + NS_TEST_EXPECT_MSG_EQ (rt.IsUnidirectional (), true, "trivial"); + rt.SetBalcklistTimeout (Seconds (7)); + NS_TEST_EXPECT_MSG_EQ (rt.GetBlacklistTimeout (), Seconds (7), "trivial"); + rt.SetRreqCnt (2); + NS_TEST_EXPECT_MSG_EQ (rt.GetRreqCnt (), 2, "trivial"); + rt.IncrementRreqCnt (); + NS_TEST_EXPECT_MSG_EQ (rt.GetRreqCnt (), 3, "trivial"); + rt.Invalidate (Seconds (13)); + NS_TEST_EXPECT_MSG_EQ (rt.GetFlag (), INVALID, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetLifeTime (), Seconds (13), "trivial"); + rt.SetLifeTime (Seconds (0.1)); + NS_TEST_EXPECT_MSG_EQ (rt.GetLifeTime (), Seconds (0.1), "trivial"); + Ptr route = rt.GetRoute (); + NS_TEST_EXPECT_MSG_EQ (route->GetDestination (), Ipv4Address ("1.2.3.4"), "trivial"); + + NS_TEST_EXPECT_MSG_EQ (rt.InsertPrecursor (Ipv4Address ("10.0.0.1")), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.IsPrecursorListEmpty (), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.InsertPrecursor (Ipv4Address ("10.0.0.2")), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.InsertPrecursor (Ipv4Address ("10.0.0.2")), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.LookupPrecursor (Ipv4Address ("10.0.0.3")), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.LookupPrecursor (Ipv4Address ("10.0.0.1")), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.DeletePrecursor (Ipv4Address ("10.0.0.2")), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.LookupPrecursor (Ipv4Address ("10.0.0.2")), false, "trivial"); + std::vector prec; + rt.GetPrecursors (prec); + NS_TEST_EXPECT_MSG_EQ (prec.size (), 1, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.InsertPrecursor (Ipv4Address ("10.0.0.4")), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.DeletePrecursor (Ipv4Address ("10.0.0.5")), false, "trivial"); + rt.GetPrecursors (prec); + NS_TEST_EXPECT_MSG_EQ (prec.size (), 2, "trivial"); + rt.DeleteAllPrecursors (); + NS_TEST_EXPECT_MSG_EQ (rt.IsPrecursorListEmpty (), true, "trivial"); + rt.GetPrecursors (prec); + NS_TEST_EXPECT_MSG_EQ (prec.size (), 2, "trivial"); + + return GetErrorStatus (); + } +}; +//----------------------------------------------------------------------------- +/// Unit test for AODV routing table +struct AodvRtableTest : public TestCase +{ + AodvRtableTest () : TestCase ("Rtable") {} + virtual bool DoRun() + { + RoutingTable rtable (Seconds (2)); + NS_TEST_EXPECT_MSG_EQ (rtable.GetBadLinkLifetime (), Seconds (2), "trivial"); + rtable.SetBadLinkLifetime (Seconds (1)); + NS_TEST_EXPECT_MSG_EQ (rtable.GetBadLinkLifetime (), Seconds (1), "trivial"); + Ptr dev; + Ipv4InterfaceAddress iface; + RoutingTableEntry rt (/*output device*/dev, /*dst*/Ipv4Address("1.2.3.4"), /*validSeqNo*/true, /*seqNo*/10, + /*interface*/iface, /*hop*/5, /*next hop*/Ipv4Address("1.1.1.1"), /*lifetime*/Seconds(10)); + NS_TEST_EXPECT_MSG_EQ (rtable.AddRoute (rt), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.AddRoute (rt), false, "trivial"); + RoutingTableEntry rt2 (/*output device*/dev, /*dst*/Ipv4Address("4.3.2.1"), /*validSeqNo*/false, /*seqNo*/0, + /*interface*/iface, /*hop*/15, /*next hop*/Ipv4Address("1.1.1.1"), /*lifetime*/Seconds(1)); + NS_TEST_EXPECT_MSG_EQ (rtable.AddRoute (rt2), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.LookupRoute (rt2.GetDestination (), rt), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt2.GetDestination (), rt.GetDestination (), "trivial"); + rt.SetHop (20); + rt.InsertPrecursor (Ipv4Address ("10.0.0.3")); + NS_TEST_EXPECT_MSG_EQ (rtable.Update (rt), true, "trivial"); + RoutingTableEntry rt3; + NS_TEST_EXPECT_MSG_EQ (rtable.LookupRoute (Ipv4Address ("10.0.0.1"), rt), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.Update (rt3), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.SetEntryState (Ipv4Address ("10.0.0.1"), INVALID), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.SetEntryState (Ipv4Address ("1.2.3.4"), IN_SEARCH), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.DeleteRoute (Ipv4Address ("5.5.5.5")), false, "trivial"); + RoutingTableEntry rt4 (/*output device*/dev, /*dst*/Ipv4Address ("5.5.5.5"), /*validSeqNo*/false, /*seqNo*/0, + /*interface*/iface, /*hop*/15, /*next hop*/Ipv4Address ("1.1.1.1"), /*lifetime*/Seconds (-10)); + NS_TEST_EXPECT_MSG_EQ (rtable.AddRoute (rt4), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.SetEntryState (Ipv4Address ("5.5.5.5"), INVALID), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.LookupRoute (Ipv4Address ("5.5.5.5"), rt), false, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.MarkLinkAsUinidirectional (Ipv4Address ("1.2.3.4"), Seconds (2)), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.LookupRoute (Ipv4Address ("1.2.3.4"), rt), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.IsUnidirectional (), true, "trivial"); + rt.SetLifeTime (Seconds (-5)); + NS_TEST_EXPECT_MSG_EQ (rtable.Update (rt), true, "trivial"); + std::map unreachable; + rtable.GetListOfDestinationWithNextHop (Ipv4Address ("1.1.1.1"), unreachable); + NS_TEST_EXPECT_MSG_EQ (unreachable.size (), 2, "trivial"); + unreachable.insert (std::make_pair (Ipv4Address ("4.3.2.1"), 3)); + rtable.InvalidateRoutesWithDst (unreachable); + NS_TEST_EXPECT_MSG_EQ (rtable.LookupRoute (Ipv4Address ("4.3.2.1"), rt), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rt.GetFlag (), INVALID, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.DeleteRoute (Ipv4Address ("1.2.3.4")), true, "trivial"); + NS_TEST_EXPECT_MSG_EQ (rtable.DeleteRoute (Ipv4Address ("1.2.3.4")), false, "trivial"); + + return GetErrorStatus (); + } +}; +//----------------------------------------------------------------------------- class AodvTestSuite : public TestSuite { public: @@ -313,6 +545,9 @@ public: AddTestCase (new RrepAckHeaderTest); AddTestCase (new RerrHeaderTest); AddTestCase (new QueueEntryTest); + AddTestCase (new AodvRqueueTest); + AddTestCase (new AodvRtableEntryTest); + AddTestCase (new AodvRtableTest); } } g_aodvTestSuite;