diff --git a/src/olsr/model/olsr-header.cc b/src/olsr/model/olsr-header.cc index 55c6acccb..d1aaa72a1 100644 --- a/src/olsr/model/olsr-header.cc +++ b/src/olsr/model/olsr-header.cc @@ -501,293 +501,3 @@ MessageHeader::Hna::Deserialize (Buffer::Iterator start, uint32_t messageSize) }} // namespace olsr, ns3 -#include "ns3/test.h" -#include "ns3/packet.h" - -namespace ns3 { - -class OlsrEmfTestCase : public TestCase { -public: - OlsrEmfTestCase (); - virtual void DoRun (void); -}; - -OlsrEmfTestCase::OlsrEmfTestCase () - : TestCase ("Check Emf olsr time conversion") -{} -void -OlsrEmfTestCase::DoRun (void) -{ - for (int time = 1; time <= 30; time++) - { - uint8_t emf = olsr::SecondsToEmf (time); - double seconds = olsr::EmfToSeconds (emf); - NS_TEST_ASSERT_MSG_EQ((seconds < 0 || fabs (seconds - time) > 0.1), false, - "XXX"); - } -} - - -class OlsrMidTestCase : public TestCase { -public: - OlsrMidTestCase (); - virtual void DoRun (void); -}; - -OlsrMidTestCase::OlsrMidTestCase () - : TestCase ("Check Mid olsr messages") -{} -void -OlsrMidTestCase::DoRun (void) -{ - Packet packet; - - { - olsr::PacketHeader hdr; - olsr::MessageHeader msg1; - olsr::MessageHeader::Mid &mid1 = msg1.GetMid (); - olsr::MessageHeader msg2; - olsr::MessageHeader::Mid &mid2 = msg2.GetMid (); - - // MID message #1 - { - std::vector &addresses = mid1.interfaceAddresses; - addresses.clear (); - addresses.push_back (Ipv4Address ("1.2.3.4")); - addresses.push_back (Ipv4Address ("1.2.3.5")); - } - - msg1.SetTimeToLive (255); - msg1.SetOriginatorAddress (Ipv4Address ("11.22.33.44")); - msg1.SetVTime (Seconds (9)); - msg1.SetMessageSequenceNumber (7); - - // MID message #2 - { - std::vector &addresses = mid2.interfaceAddresses; - addresses.clear (); - addresses.push_back (Ipv4Address ("2.2.3.4")); - addresses.push_back (Ipv4Address ("2.2.3.5")); - } - - msg2.SetTimeToLive (254); - msg2.SetOriginatorAddress (Ipv4Address ("12.22.33.44")); - msg2.SetVTime (Seconds (10)); - msg2.SetMessageType (olsr::MessageHeader::MID_MESSAGE); - msg2.SetMessageSequenceNumber (7); - - // Build an OLSR packet header - hdr.SetPacketLength (hdr.GetSerializedSize () + msg1.GetSerializedSize () + msg2.GetSerializedSize ()); - hdr.SetPacketSequenceNumber (123); - - - // Now add all the headers in the correct order - packet.AddHeader (msg2); - packet.AddHeader (msg1); - packet.AddHeader (hdr); - } - - { - olsr::PacketHeader hdr; - packet.RemoveHeader (hdr); - NS_TEST_ASSERT_MSG_EQ (hdr.GetPacketSequenceNumber (), 123, "XXX"); - uint32_t sizeLeft = hdr.GetPacketLength () - hdr.GetSerializedSize (); - { - olsr::MessageHeader msg1; - - packet.RemoveHeader (msg1); - - NS_TEST_ASSERT_MSG_EQ (msg1.GetTimeToLive (), 255, "XXX"); - NS_TEST_ASSERT_MSG_EQ (msg1.GetOriginatorAddress (), Ipv4Address ("11.22.33.44"), "XXX"); - NS_TEST_ASSERT_MSG_EQ (msg1.GetVTime (), Seconds (9), "XXX"); - NS_TEST_ASSERT_MSG_EQ (msg1.GetMessageType (), olsr::MessageHeader::MID_MESSAGE, "XXX"); - NS_TEST_ASSERT_MSG_EQ (msg1.GetMessageSequenceNumber (), 7, "XXX"); - - olsr::MessageHeader::Mid &mid1 = msg1.GetMid (); - NS_TEST_ASSERT_MSG_EQ (mid1.interfaceAddresses.size (), 2, "XXX"); - NS_TEST_ASSERT_MSG_EQ (*mid1.interfaceAddresses.begin (), Ipv4Address ("1.2.3.4"), "XXX"); - - sizeLeft -= msg1.GetSerializedSize (); - NS_TEST_ASSERT_MSG_EQ((sizeLeft > 0), true, "XXX"); - } - { - // now read the second message - olsr::MessageHeader msg2; - - packet.RemoveHeader (msg2); - - NS_TEST_ASSERT_MSG_EQ (msg2.GetTimeToLive (), 254, "XXX"); - NS_TEST_ASSERT_MSG_EQ (msg2.GetOriginatorAddress (), Ipv4Address ("12.22.33.44"), "XXX"); - NS_TEST_ASSERT_MSG_EQ (msg2.GetVTime (), Seconds (10), "XXX"); - NS_TEST_ASSERT_MSG_EQ (msg2.GetMessageType (), olsr::MessageHeader::MID_MESSAGE, "XXX"); - NS_TEST_ASSERT_MSG_EQ (msg2.GetMessageSequenceNumber (), 7, "XXX"); - - olsr::MessageHeader::Mid mid2 = msg2.GetMid (); - NS_TEST_ASSERT_MSG_EQ (mid2.interfaceAddresses.size (), 2, "XXX"); - NS_TEST_ASSERT_MSG_EQ (*mid2.interfaceAddresses.begin (), Ipv4Address ("2.2.3.4"), "XXX"); - - sizeLeft -= msg2.GetSerializedSize (); - NS_TEST_ASSERT_MSG_EQ (sizeLeft, 0, "XXX"); - } - } -} - - -class OlsrHelloTestCase : public TestCase { -public: - OlsrHelloTestCase (); - virtual void DoRun (void); -}; - -OlsrHelloTestCase::OlsrHelloTestCase () - : TestCase ("Check Hello olsr messages") -{} -void -OlsrHelloTestCase::DoRun (void) -{ - Packet packet; - olsr::MessageHeader msgIn; - olsr::MessageHeader::Hello &helloIn = msgIn.GetHello (); - - helloIn.SetHTime (Seconds (7)); - helloIn.willingness = 66; - - { - olsr::MessageHeader::Hello::LinkMessage lm1; - lm1.linkCode = 2; - lm1.neighborInterfaceAddresses.push_back (Ipv4Address ("1.2.3.4")); - lm1.neighborInterfaceAddresses.push_back (Ipv4Address ("1.2.3.5")); - helloIn.linkMessages.push_back (lm1); - - olsr::MessageHeader::Hello::LinkMessage lm2; - lm2.linkCode = 3; - lm2.neighborInterfaceAddresses.push_back (Ipv4Address ("2.2.3.4")); - lm2.neighborInterfaceAddresses.push_back (Ipv4Address ("2.2.3.5")); - helloIn.linkMessages.push_back (lm2); - } - - packet.AddHeader (msgIn); - - olsr::MessageHeader msgOut; - packet.RemoveHeader (msgOut); - olsr::MessageHeader::Hello &helloOut = msgOut.GetHello (); - - NS_TEST_ASSERT_MSG_EQ (helloOut.GetHTime (), Seconds (7), "XXX"); - NS_TEST_ASSERT_MSG_EQ (helloOut.willingness, 66, "XXX"); - NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages.size (), 2, "XXX"); - - NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].linkCode, 2, "XXX"); - NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].neighborInterfaceAddresses[0], - Ipv4Address ("1.2.3.4"), "XXX"); - NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].neighborInterfaceAddresses[1], - Ipv4Address ("1.2.3.5"), "XXX"); - - NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].linkCode, 3, "XXX"); - NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].neighborInterfaceAddresses[0], - Ipv4Address ("2.2.3.4"), "XXX"); - NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].neighborInterfaceAddresses[1], - Ipv4Address ("2.2.3.5"), "XXX"); - - NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "All bytes in packet were not read"); - -} - -class OlsrTcTestCase : public TestCase { -public: - OlsrTcTestCase (); - virtual void DoRun (void); -}; - -OlsrTcTestCase::OlsrTcTestCase () - : TestCase ("Check Tc olsr messages") -{} -void -OlsrTcTestCase::DoRun (void) -{ - Packet packet; - olsr::MessageHeader msgIn; - olsr::MessageHeader::Tc &tcIn = msgIn.GetTc (); - - tcIn.ansn = 0x1234; - tcIn.neighborAddresses.push_back (Ipv4Address ("1.2.3.4")); - tcIn.neighborAddresses.push_back (Ipv4Address ("1.2.3.5")); - packet.AddHeader (msgIn); - - olsr::MessageHeader msgOut; - packet.RemoveHeader (msgOut); - olsr::MessageHeader::Tc &tcOut = msgOut.GetTc (); - - NS_TEST_ASSERT_MSG_EQ (tcOut.ansn, 0x1234, "XXX"); - NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses.size (), 2, "XXX"); - - NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses[0], - Ipv4Address ("1.2.3.4"), "XXX"); - NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses[1], - Ipv4Address ("1.2.3.5"), "XXX"); - - NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "XXX"); - -} - -class OlsrHnaTestCase : public TestCase { -public: - OlsrHnaTestCase (); - virtual void DoRun (void); -}; - -OlsrHnaTestCase::OlsrHnaTestCase () - : TestCase ("Check Hna olsr messages") -{} - -void -OlsrHnaTestCase::DoRun (void) -{ - Packet packet; - olsr::MessageHeader msgIn; - olsr::MessageHeader::Hna &hnaIn = msgIn.GetHna (); - - hnaIn.associations.push_back ((olsr::MessageHeader::Hna::Association) - { Ipv4Address ("1.2.3.4"), Ipv4Mask ("255.255.255.0")}); - hnaIn.associations.push_back ((olsr::MessageHeader::Hna::Association) - {Ipv4Address ("1.2.3.5"), Ipv4Mask ("255.255.0.0")}); - packet.AddHeader (msgIn); - - olsr::MessageHeader msgOut; - packet.RemoveHeader (msgOut); - olsr::MessageHeader::Hna &hnaOut = msgOut.GetHna (); - - NS_TEST_ASSERT_MSG_EQ (hnaOut.associations.size (), 2, "XXX"); - - NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[0].address, - Ipv4Address ("1.2.3.4"), "XXX"); - NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[0].mask, - Ipv4Mask ("255.255.255.0"), "XXX"); - - NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[1].address, - Ipv4Address ("1.2.3.5"), "XXX"); - NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[1].mask, - Ipv4Mask ("255.255.0.0"), "XXX"); - - NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "All bytes in packet were not read"); - -} - - -static class OlsrTestSuite : public TestSuite -{ -public: - OlsrTestSuite (); -} g_olsrTestSuite; - -OlsrTestSuite::OlsrTestSuite() - : TestSuite("routing-olsr-header", UNIT) -{ - AddTestCase(new OlsrHnaTestCase()); - AddTestCase(new OlsrTcTestCase()); - AddTestCase(new OlsrHelloTestCase()); - AddTestCase(new OlsrMidTestCase()); - AddTestCase(new OlsrEmfTestCase()); -} - -} // namespace ns3 - diff --git a/src/olsr/model/olsr-routing-protocol.cc b/src/olsr/model/olsr-routing-protocol.cc index 94d218ec9..129629465 100644 --- a/src/olsr/model/olsr-routing-protocol.cc +++ b/src/olsr/model/olsr-routing-protocol.cc @@ -3294,133 +3294,6 @@ RoutingProtocol::GetRoutingTableEntries () const } return retval; } -OlsrMprTestCase::OlsrMprTestCase () - : TestCase ("Check OLSR MPR computing mechanism") -{ -} -OlsrMprTestCase::~OlsrMprTestCase () -{ -} -void -OlsrMprTestCase::DoRun () -{ - Ptr protocol = CreateObject (); - protocol->m_mainAddress = Ipv4Address ("10.0.0.1"); - OlsrState & state = protocol->m_state; - - /* - * 1 -- 2 - * | | - * 3 -- 4 - * - * Node 1 must select only one MPR (2 or 3, doesn't matter) - */ - NeighborTuple neigbor; - neigbor.status = NeighborTuple::STATUS_SYM; - neigbor.willingness = OLSR_WILL_DEFAULT; - neigbor.neighborMainAddr = Ipv4Address ("10.0.0.2"); - protocol->m_state.InsertNeighborTuple (neigbor); - neigbor.neighborMainAddr = Ipv4Address ("10.0.0.3"); - protocol->m_state.InsertNeighborTuple (neigbor); - TwoHopNeighborTuple tuple; - tuple.expirationTime = Seconds (3600); - tuple.neighborMainAddr = Ipv4Address ("10.0.0.2"); - tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.4"); - protocol->m_state.InsertTwoHopNeighborTuple (tuple); - tuple.neighborMainAddr = Ipv4Address ("10.0.0.3"); - tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.4"); - protocol->m_state.InsertTwoHopNeighborTuple (tuple); - - protocol->MprComputation (); - NS_TEST_EXPECT_MSG_EQ (state.GetMprSet ().size (), 1 , "An only address must be chosen."); - /* - * 1 -- 2 -- 5 - * | | - * 3 -- 4 - * - * Node 1 must select node 2 as MPR. - */ - tuple.neighborMainAddr = Ipv4Address ("10.0.0.2"); - tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.5"); - protocol->m_state.InsertTwoHopNeighborTuple (tuple); - - protocol->MprComputation (); - MprSet mpr = state.GetMprSet (); - NS_TEST_EXPECT_MSG_EQ (mpr.size (), 1 , "An only address must be chosen."); - NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.2") != mpr.end ()), true, "Node 1 must select node 2 as MPR"); - /* - * 1 -- 2 -- 5 - * | | - * 3 -- 4 - * | - * 6 - * - * Node 1 must select nodes 2 and 3 as MPRs. - */ - tuple.neighborMainAddr = Ipv4Address ("10.0.0.3"); - tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.6"); - protocol->m_state.InsertTwoHopNeighborTuple (tuple); - - protocol->MprComputation (); - mpr = state.GetMprSet (); - NS_TEST_EXPECT_MSG_EQ (mpr.size (), 2 , "An only address must be chosen."); - NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.2") != mpr.end ()), true, "Node 1 must select node 2 as MPR"); - NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.3") != mpr.end ()), true, "Node 1 must select node 3 as MPR"); - /* - * 7 (OLSR_WILL_ALWAYS) - * | - * 1 -- 2 -- 5 - * | | - * 3 -- 4 - * | - * 6 - * - * Node 1 must select nodes 2, 3 and 7 (since it is WILL_ALWAYS) as MPRs. - */ - neigbor.willingness = OLSR_WILL_ALWAYS; - neigbor.neighborMainAddr = Ipv4Address ("10.0.0.7"); - protocol->m_state.InsertNeighborTuple (neigbor); - - protocol->MprComputation (); - mpr = state.GetMprSet (); - NS_TEST_EXPECT_MSG_EQ (mpr.size (), 3 , "An only address must be chosen."); - NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.7") != mpr.end ()), true, "Node 1 must select node 7 as MPR"); - /* - * 7 <- WILL_ALWAYS - * | - * 9 -- 8 -- 1 -- 2 -- 5 - * | | - * ^ 3 -- 4 - * | | - * WILL_NEVER 6 - * - * Node 1 must select nodes 2, 3 and 7 (since it is WILL_ALWAYS) as MPRs. - * Node 1 must NOT select node 8 as MPR since it is WILL_NEVER - */ - neigbor.willingness = OLSR_WILL_NEVER; - neigbor.neighborMainAddr = Ipv4Address ("10.0.0.8"); - protocol->m_state.InsertNeighborTuple (neigbor); - tuple.neighborMainAddr = Ipv4Address ("10.0.0.8"); - tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.9"); - protocol->m_state.InsertTwoHopNeighborTuple (tuple); - - protocol->MprComputation (); - mpr = state.GetMprSet (); - NS_TEST_EXPECT_MSG_EQ (mpr.size (), 3 , "An only address must be chosen."); - NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.9") == mpr.end ()), true, "Node 1 must NOT select node 8 as MPR"); -} - -static class OlsrProtocolTestSuite : public TestSuite -{ -public: - OlsrProtocolTestSuite (); -} g_olsrProtocolTestSuite; - -OlsrProtocolTestSuite::OlsrProtocolTestSuite() - : TestSuite("routing-olsr", UNIT) -{ - AddTestCase (new OlsrMprTestCase ()); -} bool RoutingProtocol::IsMyOwnAddress (const Ipv4Address & a) const diff --git a/src/olsr/test/olsr-header-test-suite.cc b/src/olsr/test/olsr-header-test-suite.cc new file mode 100644 index 000000000..ac375638f --- /dev/null +++ b/src/olsr/test/olsr-header-test-suite.cc @@ -0,0 +1,311 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2007 INESC Porto + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Gustavo J. A. M. Carneiro + */ + +#include "ns3/test.h" +#include "ns3/olsr-header.h" +#include "ns3/packet.h" + +namespace ns3 { + +class OlsrEmfTestCase : public TestCase { +public: + OlsrEmfTestCase (); + virtual void DoRun (void); +}; + +OlsrEmfTestCase::OlsrEmfTestCase () + : TestCase ("Check Emf olsr time conversion") +{} +void +OlsrEmfTestCase::DoRun (void) +{ + for (int time = 1; time <= 30; time++) + { + uint8_t emf = olsr::SecondsToEmf (time); + double seconds = olsr::EmfToSeconds (emf); + NS_TEST_ASSERT_MSG_EQ((seconds < 0 || fabs (seconds - time) > 0.1), false, + "XXX"); + } +} + + +class OlsrMidTestCase : public TestCase { +public: + OlsrMidTestCase (); + virtual void DoRun (void); +}; + +OlsrMidTestCase::OlsrMidTestCase () + : TestCase ("Check Mid olsr messages") +{} +void +OlsrMidTestCase::DoRun (void) +{ + Packet packet; + + { + olsr::PacketHeader hdr; + olsr::MessageHeader msg1; + olsr::MessageHeader::Mid &mid1 = msg1.GetMid (); + olsr::MessageHeader msg2; + olsr::MessageHeader::Mid &mid2 = msg2.GetMid (); + + // MID message #1 + { + std::vector &addresses = mid1.interfaceAddresses; + addresses.clear (); + addresses.push_back (Ipv4Address ("1.2.3.4")); + addresses.push_back (Ipv4Address ("1.2.3.5")); + } + + msg1.SetTimeToLive (255); + msg1.SetOriginatorAddress (Ipv4Address ("11.22.33.44")); + msg1.SetVTime (Seconds (9)); + msg1.SetMessageSequenceNumber (7); + + // MID message #2 + { + std::vector &addresses = mid2.interfaceAddresses; + addresses.clear (); + addresses.push_back (Ipv4Address ("2.2.3.4")); + addresses.push_back (Ipv4Address ("2.2.3.5")); + } + + msg2.SetTimeToLive (254); + msg2.SetOriginatorAddress (Ipv4Address ("12.22.33.44")); + msg2.SetVTime (Seconds (10)); + msg2.SetMessageType (olsr::MessageHeader::MID_MESSAGE); + msg2.SetMessageSequenceNumber (7); + + // Build an OLSR packet header + hdr.SetPacketLength (hdr.GetSerializedSize () + msg1.GetSerializedSize () + msg2.GetSerializedSize ()); + hdr.SetPacketSequenceNumber (123); + + + // Now add all the headers in the correct order + packet.AddHeader (msg2); + packet.AddHeader (msg1); + packet.AddHeader (hdr); + } + + { + olsr::PacketHeader hdr; + packet.RemoveHeader (hdr); + NS_TEST_ASSERT_MSG_EQ (hdr.GetPacketSequenceNumber (), 123, "XXX"); + uint32_t sizeLeft = hdr.GetPacketLength () - hdr.GetSerializedSize (); + { + olsr::MessageHeader msg1; + + packet.RemoveHeader (msg1); + + NS_TEST_ASSERT_MSG_EQ (msg1.GetTimeToLive (), 255, "XXX"); + NS_TEST_ASSERT_MSG_EQ (msg1.GetOriginatorAddress (), Ipv4Address ("11.22.33.44"), "XXX"); + NS_TEST_ASSERT_MSG_EQ (msg1.GetVTime (), Seconds (9), "XXX"); + NS_TEST_ASSERT_MSG_EQ (msg1.GetMessageType (), olsr::MessageHeader::MID_MESSAGE, "XXX"); + NS_TEST_ASSERT_MSG_EQ (msg1.GetMessageSequenceNumber (), 7, "XXX"); + + olsr::MessageHeader::Mid &mid1 = msg1.GetMid (); + NS_TEST_ASSERT_MSG_EQ (mid1.interfaceAddresses.size (), 2, "XXX"); + NS_TEST_ASSERT_MSG_EQ (*mid1.interfaceAddresses.begin (), Ipv4Address ("1.2.3.4"), "XXX"); + + sizeLeft -= msg1.GetSerializedSize (); + NS_TEST_ASSERT_MSG_EQ((sizeLeft > 0), true, "XXX"); + } + { + // now read the second message + olsr::MessageHeader msg2; + + packet.RemoveHeader (msg2); + + NS_TEST_ASSERT_MSG_EQ (msg2.GetTimeToLive (), 254, "XXX"); + NS_TEST_ASSERT_MSG_EQ (msg2.GetOriginatorAddress (), Ipv4Address ("12.22.33.44"), "XXX"); + NS_TEST_ASSERT_MSG_EQ (msg2.GetVTime (), Seconds (10), "XXX"); + NS_TEST_ASSERT_MSG_EQ (msg2.GetMessageType (), olsr::MessageHeader::MID_MESSAGE, "XXX"); + NS_TEST_ASSERT_MSG_EQ (msg2.GetMessageSequenceNumber (), 7, "XXX"); + + olsr::MessageHeader::Mid mid2 = msg2.GetMid (); + NS_TEST_ASSERT_MSG_EQ (mid2.interfaceAddresses.size (), 2, "XXX"); + NS_TEST_ASSERT_MSG_EQ (*mid2.interfaceAddresses.begin (), Ipv4Address ("2.2.3.4"), "XXX"); + + sizeLeft -= msg2.GetSerializedSize (); + NS_TEST_ASSERT_MSG_EQ (sizeLeft, 0, "XXX"); + } + } +} + + +class OlsrHelloTestCase : public TestCase { +public: + OlsrHelloTestCase (); + virtual void DoRun (void); +}; + +OlsrHelloTestCase::OlsrHelloTestCase () + : TestCase ("Check Hello olsr messages") +{} +void +OlsrHelloTestCase::DoRun (void) +{ + Packet packet; + olsr::MessageHeader msgIn; + olsr::MessageHeader::Hello &helloIn = msgIn.GetHello (); + + helloIn.SetHTime (Seconds (7)); + helloIn.willingness = 66; + + { + olsr::MessageHeader::Hello::LinkMessage lm1; + lm1.linkCode = 2; + lm1.neighborInterfaceAddresses.push_back (Ipv4Address ("1.2.3.4")); + lm1.neighborInterfaceAddresses.push_back (Ipv4Address ("1.2.3.5")); + helloIn.linkMessages.push_back (lm1); + + olsr::MessageHeader::Hello::LinkMessage lm2; + lm2.linkCode = 3; + lm2.neighborInterfaceAddresses.push_back (Ipv4Address ("2.2.3.4")); + lm2.neighborInterfaceAddresses.push_back (Ipv4Address ("2.2.3.5")); + helloIn.linkMessages.push_back (lm2); + } + + packet.AddHeader (msgIn); + + olsr::MessageHeader msgOut; + packet.RemoveHeader (msgOut); + olsr::MessageHeader::Hello &helloOut = msgOut.GetHello (); + + NS_TEST_ASSERT_MSG_EQ (helloOut.GetHTime (), Seconds (7), "XXX"); + NS_TEST_ASSERT_MSG_EQ (helloOut.willingness, 66, "XXX"); + NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages.size (), 2, "XXX"); + + NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].linkCode, 2, "XXX"); + NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].neighborInterfaceAddresses[0], + Ipv4Address ("1.2.3.4"), "XXX"); + NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[0].neighborInterfaceAddresses[1], + Ipv4Address ("1.2.3.5"), "XXX"); + + NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].linkCode, 3, "XXX"); + NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].neighborInterfaceAddresses[0], + Ipv4Address ("2.2.3.4"), "XXX"); + NS_TEST_ASSERT_MSG_EQ (helloOut.linkMessages[1].neighborInterfaceAddresses[1], + Ipv4Address ("2.2.3.5"), "XXX"); + + NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "All bytes in packet were not read"); + +} + +class OlsrTcTestCase : public TestCase { +public: + OlsrTcTestCase (); + virtual void DoRun (void); +}; + +OlsrTcTestCase::OlsrTcTestCase () + : TestCase ("Check Tc olsr messages") +{} +void +OlsrTcTestCase::DoRun (void) +{ + Packet packet; + olsr::MessageHeader msgIn; + olsr::MessageHeader::Tc &tcIn = msgIn.GetTc (); + + tcIn.ansn = 0x1234; + tcIn.neighborAddresses.push_back (Ipv4Address ("1.2.3.4")); + tcIn.neighborAddresses.push_back (Ipv4Address ("1.2.3.5")); + packet.AddHeader (msgIn); + + olsr::MessageHeader msgOut; + packet.RemoveHeader (msgOut); + olsr::MessageHeader::Tc &tcOut = msgOut.GetTc (); + + NS_TEST_ASSERT_MSG_EQ (tcOut.ansn, 0x1234, "XXX"); + NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses.size (), 2, "XXX"); + + NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses[0], + Ipv4Address ("1.2.3.4"), "XXX"); + NS_TEST_ASSERT_MSG_EQ (tcOut.neighborAddresses[1], + Ipv4Address ("1.2.3.5"), "XXX"); + + NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "XXX"); + +} + +class OlsrHnaTestCase : public TestCase { +public: + OlsrHnaTestCase (); + virtual void DoRun (void); +}; + +OlsrHnaTestCase::OlsrHnaTestCase () + : TestCase ("Check Hna olsr messages") +{} + +void +OlsrHnaTestCase::DoRun (void) +{ + Packet packet; + olsr::MessageHeader msgIn; + olsr::MessageHeader::Hna &hnaIn = msgIn.GetHna (); + + hnaIn.associations.push_back ((olsr::MessageHeader::Hna::Association) + { Ipv4Address ("1.2.3.4"), Ipv4Mask ("255.255.255.0")}); + hnaIn.associations.push_back ((olsr::MessageHeader::Hna::Association) + {Ipv4Address ("1.2.3.5"), Ipv4Mask ("255.255.0.0")}); + packet.AddHeader (msgIn); + + olsr::MessageHeader msgOut; + packet.RemoveHeader (msgOut); + olsr::MessageHeader::Hna &hnaOut = msgOut.GetHna (); + + NS_TEST_ASSERT_MSG_EQ (hnaOut.associations.size (), 2, "XXX"); + + NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[0].address, + Ipv4Address ("1.2.3.4"), "XXX"); + NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[0].mask, + Ipv4Mask ("255.255.255.0"), "XXX"); + + NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[1].address, + Ipv4Address ("1.2.3.5"), "XXX"); + NS_TEST_ASSERT_MSG_EQ (hnaOut.associations[1].mask, + Ipv4Mask ("255.255.0.0"), "XXX"); + + NS_TEST_ASSERT_MSG_EQ (packet.GetSize (), 0, "All bytes in packet were not read"); + +} + + +static class OlsrTestSuite : public TestSuite +{ +public: + OlsrTestSuite (); +} g_olsrTestSuite; + +OlsrTestSuite::OlsrTestSuite() + : TestSuite("routing-olsr-header", UNIT) +{ + AddTestCase(new OlsrHnaTestCase()); + AddTestCase(new OlsrTcTestCase()); + AddTestCase(new OlsrHelloTestCase()); + AddTestCase(new OlsrMidTestCase()); + AddTestCase(new OlsrEmfTestCase()); +} + +} // namespace ns3 + diff --git a/src/olsr/test/olsr-routing-protocol-test-suite.cc b/src/olsr/test/olsr-routing-protocol-test-suite.cc new file mode 100644 index 000000000..6880d9238 --- /dev/null +++ b/src/olsr/test/olsr-routing-protocol-test-suite.cc @@ -0,0 +1,173 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2004 Francisco J. Ros + * Copyright (c) 2007 INESC Porto + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Authors: Francisco J. Ros + * Gustavo J. A. M. Carneiro + */ + +#include "ns3/test.h" +#include "ns3/olsr-routing-protocol.h" +#include "ns3/ipv4-header.h" + +/********** Willingness **********/ + +/// Willingness for forwarding packets from other nodes: never. +#define OLSR_WILL_NEVER 0 +/// Willingness for forwarding packets from other nodes: low. +#define OLSR_WILL_LOW 1 +/// Willingness for forwarding packets from other nodes: medium. +#define OLSR_WILL_DEFAULT 3 +/// Willingness for forwarding packets from other nodes: high. +#define OLSR_WILL_HIGH 6 +/// Willingness for forwarding packets from other nodes: always. +#define OLSR_WILL_ALWAYS 7 + +namespace ns3 { +namespace olsr { + +OlsrMprTestCase::OlsrMprTestCase () + : TestCase ("Check OLSR MPR computing mechanism") +{ +} +OlsrMprTestCase::~OlsrMprTestCase () +{ +} +void +OlsrMprTestCase::DoRun () +{ + Ptr protocol = CreateObject (); + protocol->m_mainAddress = Ipv4Address ("10.0.0.1"); + OlsrState & state = protocol->m_state; + + /* + * 1 -- 2 + * | | + * 3 -- 4 + * + * Node 1 must select only one MPR (2 or 3, doesn't matter) + */ + NeighborTuple neigbor; + neigbor.status = NeighborTuple::STATUS_SYM; + neigbor.willingness = OLSR_WILL_DEFAULT; + neigbor.neighborMainAddr = Ipv4Address ("10.0.0.2"); + protocol->m_state.InsertNeighborTuple (neigbor); + neigbor.neighborMainAddr = Ipv4Address ("10.0.0.3"); + protocol->m_state.InsertNeighborTuple (neigbor); + TwoHopNeighborTuple tuple; + tuple.expirationTime = Seconds (3600); + tuple.neighborMainAddr = Ipv4Address ("10.0.0.2"); + tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.4"); + protocol->m_state.InsertTwoHopNeighborTuple (tuple); + tuple.neighborMainAddr = Ipv4Address ("10.0.0.3"); + tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.4"); + protocol->m_state.InsertTwoHopNeighborTuple (tuple); + + protocol->MprComputation (); + NS_TEST_EXPECT_MSG_EQ (state.GetMprSet ().size (), 1 , "An only address must be chosen."); + /* + * 1 -- 2 -- 5 + * | | + * 3 -- 4 + * + * Node 1 must select node 2 as MPR. + */ + tuple.neighborMainAddr = Ipv4Address ("10.0.0.2"); + tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.5"); + protocol->m_state.InsertTwoHopNeighborTuple (tuple); + + protocol->MprComputation (); + MprSet mpr = state.GetMprSet (); + NS_TEST_EXPECT_MSG_EQ (mpr.size (), 1 , "An only address must be chosen."); + NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.2") != mpr.end ()), true, "Node 1 must select node 2 as MPR"); + /* + * 1 -- 2 -- 5 + * | | + * 3 -- 4 + * | + * 6 + * + * Node 1 must select nodes 2 and 3 as MPRs. + */ + tuple.neighborMainAddr = Ipv4Address ("10.0.0.3"); + tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.6"); + protocol->m_state.InsertTwoHopNeighborTuple (tuple); + + protocol->MprComputation (); + mpr = state.GetMprSet (); + NS_TEST_EXPECT_MSG_EQ (mpr.size (), 2 , "An only address must be chosen."); + NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.2") != mpr.end ()), true, "Node 1 must select node 2 as MPR"); + NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.3") != mpr.end ()), true, "Node 1 must select node 3 as MPR"); + /* + * 7 (OLSR_WILL_ALWAYS) + * | + * 1 -- 2 -- 5 + * | | + * 3 -- 4 + * | + * 6 + * + * Node 1 must select nodes 2, 3 and 7 (since it is WILL_ALWAYS) as MPRs. + */ + neigbor.willingness = OLSR_WILL_ALWAYS; + neigbor.neighborMainAddr = Ipv4Address ("10.0.0.7"); + protocol->m_state.InsertNeighborTuple (neigbor); + + protocol->MprComputation (); + mpr = state.GetMprSet (); + NS_TEST_EXPECT_MSG_EQ (mpr.size (), 3 , "An only address must be chosen."); + NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.7") != mpr.end ()), true, "Node 1 must select node 7 as MPR"); + /* + * 7 <- WILL_ALWAYS + * | + * 9 -- 8 -- 1 -- 2 -- 5 + * | | + * ^ 3 -- 4 + * | | + * WILL_NEVER 6 + * + * Node 1 must select nodes 2, 3 and 7 (since it is WILL_ALWAYS) as MPRs. + * Node 1 must NOT select node 8 as MPR since it is WILL_NEVER + */ + neigbor.willingness = OLSR_WILL_NEVER; + neigbor.neighborMainAddr = Ipv4Address ("10.0.0.8"); + protocol->m_state.InsertNeighborTuple (neigbor); + tuple.neighborMainAddr = Ipv4Address ("10.0.0.8"); + tuple.twoHopNeighborAddr = Ipv4Address ("10.0.0.9"); + protocol->m_state.InsertTwoHopNeighborTuple (tuple); + + protocol->MprComputation (); + mpr = state.GetMprSet (); + NS_TEST_EXPECT_MSG_EQ (mpr.size (), 3 , "An only address must be chosen."); + NS_TEST_EXPECT_MSG_EQ ((mpr.find ("10.0.0.9") == mpr.end ()), true, "Node 1 must NOT select node 8 as MPR"); +} + +static class OlsrProtocolTestSuite : public TestSuite +{ +public: + OlsrProtocolTestSuite (); +} g_olsrProtocolTestSuite; + +OlsrProtocolTestSuite::OlsrProtocolTestSuite() + : TestSuite("routing-olsr", UNIT) +{ + AddTestCase (new OlsrMprTestCase ()); +} + +}} // namespace olsr, ns3 + + diff --git a/src/olsr/wscript b/src/olsr/wscript index 0fb51a142..bbe0427c2 100644 --- a/src/olsr/wscript +++ b/src/olsr/wscript @@ -12,10 +12,12 @@ def build(bld): module_test = bld.create_ns3_module_test_library('olsr') module_test.source = [ - 'test/regression-test-suite.cc', - 'test/hello-regression-test.cc', - 'test/tc-regression-test.cc', 'test/bug780-test.cc', + 'test/hello-regression-test.cc', + 'test/olsr-header-test-suite.cc', + 'test/regression-test-suite.cc', + 'test/olsr-routing-protocol-test-suite.cc', + 'test/tc-regression-test.cc', ] headers = bld.new_task_gen('ns3header') diff --git a/src/point-to-point/model/point-to-point-test.cc b/src/point-to-point/test/point-to-point-test.cc similarity index 95% rename from src/point-to-point/model/point-to-point-test.cc rename to src/point-to-point/test/point-to-point-test.cc index 3189edcf2..cd34d31b8 100644 --- a/src/point-to-point/model/point-to-point-test.cc +++ b/src/point-to-point/test/point-to-point-test.cc @@ -1,8 +1,8 @@ #include "ns3/test.h" #include "ns3/drop-tail-queue.h" #include "ns3/simulator.h" -#include "point-to-point-net-device.h" -#include "point-to-point-channel.h" +#include "ns3/point-to-point-net-device.h" +#include "ns3/point-to-point-channel.h" namespace ns3 { diff --git a/src/point-to-point/wscript b/src/point-to-point/wscript index dc019f3ae..2bc41aa29 100644 --- a/src/point-to-point/wscript +++ b/src/point-to-point/wscript @@ -7,10 +7,15 @@ def build(bld): 'model/point-to-point-net-device.cc', 'model/point-to-point-channel.cc', 'model/point-to-point-remote-channel.cc', - 'model/point-to-point-test.cc', 'model/ppp-header.cc', 'helper/point-to-point-helper.cc', ] + + module_test = bld.create_ns3_module_test_library('point-to-point') + module_test.source = [ + 'test/point-to-point-test.cc', + ] + headers = bld.new_task_gen('ns3header') headers.module = 'point-to-point' headers.source = [ diff --git a/src/tools/model/event-garbage-collector.cc b/src/tools/model/event-garbage-collector.cc index 24d827f26..7d023f525 100644 --- a/src/tools/model/event-garbage-collector.cc +++ b/src/tools/model/event-garbage-collector.cc @@ -87,69 +87,3 @@ EventGarbageCollector::~EventGarbageCollector () } // namespace ns3 -#include "ns3/test.h" - -namespace ns3 { - -class EventGarbageCollectorTestCase : public TestCase -{ - int m_counter; - EventGarbageCollector *m_events; - - void EventGarbageCollectorCallback (); - -public: - - EventGarbageCollectorTestCase (); - virtual ~EventGarbageCollectorTestCase (); - virtual void DoRun (void); -}; - -EventGarbageCollectorTestCase::EventGarbageCollectorTestCase () - : TestCase ("EventGarbageCollector"), m_counter (0), m_events (0) -{} - -EventGarbageCollectorTestCase::~EventGarbageCollectorTestCase () -{} - -void -EventGarbageCollectorTestCase::EventGarbageCollectorCallback () -{ - m_counter++; - if (m_counter == 50) - { - // this should cause the remaining (50) events to be cancelled - delete m_events; - m_events = 0; - } -} - -void EventGarbageCollectorTestCase::DoRun (void) -{ - m_events = new EventGarbageCollector (); - - for (int n = 0; n < 100; n++) - { - m_events->Track (Simulator::Schedule - (Simulator::Now (), - &EventGarbageCollectorTestCase::EventGarbageCollectorCallback, - this)); - } - Simulator::Run (); - NS_TEST_EXPECT_MSG_EQ (m_events, 0, ""); - NS_TEST_EXPECT_MSG_EQ (m_counter, 50, ""); - Simulator::Destroy (); -} - -static class EventGarbageCollectorTestSuite : public TestSuite -{ -public: - EventGarbageCollectorTestSuite () - : TestSuite ("event-garbage-collector", UNIT) - { - AddTestCase (new EventGarbageCollectorTestCase ()); - } -} g_eventGarbageCollectorTests; - -} - diff --git a/src/tools/test/event-garbage-collector-test-suite.cc b/src/tools/test/event-garbage-collector-test-suite.cc new file mode 100644 index 000000000..496315c5e --- /dev/null +++ b/src/tools/test/event-garbage-collector-test-suite.cc @@ -0,0 +1,87 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2007 INESC Porto + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Gustavo J. A. M. Carneiro + */ + +#include "ns3/test.h" +#include "ns3/event-garbage-collector.h" + +namespace ns3 { + +class EventGarbageCollectorTestCase : public TestCase +{ + int m_counter; + EventGarbageCollector *m_events; + + void EventGarbageCollectorCallback (); + +public: + + EventGarbageCollectorTestCase (); + virtual ~EventGarbageCollectorTestCase (); + virtual void DoRun (void); +}; + +EventGarbageCollectorTestCase::EventGarbageCollectorTestCase () + : TestCase ("EventGarbageCollector"), m_counter (0), m_events (0) +{} + +EventGarbageCollectorTestCase::~EventGarbageCollectorTestCase () +{} + +void +EventGarbageCollectorTestCase::EventGarbageCollectorCallback () +{ + m_counter++; + if (m_counter == 50) + { + // this should cause the remaining (50) events to be cancelled + delete m_events; + m_events = 0; + } +} + +void EventGarbageCollectorTestCase::DoRun (void) +{ + m_events = new EventGarbageCollector (); + + for (int n = 0; n < 100; n++) + { + m_events->Track (Simulator::Schedule + (Simulator::Now (), + &EventGarbageCollectorTestCase::EventGarbageCollectorCallback, + this)); + } + Simulator::Run (); + NS_TEST_EXPECT_MSG_EQ (m_events, 0, ""); + NS_TEST_EXPECT_MSG_EQ (m_counter, 50, ""); + Simulator::Destroy (); +} + +static class EventGarbageCollectorTestSuite : public TestSuite +{ +public: + EventGarbageCollectorTestSuite () + : TestSuite ("event-garbage-collector", UNIT) + { + AddTestCase (new EventGarbageCollectorTestCase ()); + } +} g_eventGarbageCollectorTests; + +} + diff --git a/src/tools/wscript b/src/tools/wscript index 8179c18ed..a31f6ab89 100644 --- a/src/tools/wscript +++ b/src/tools/wscript @@ -8,6 +8,11 @@ def build(bld): 'model/gnuplot.cc', 'model/delay-jitter-estimation.cc', ] + + module_test = bld.create_ns3_module_test_library('tools') + module_test.source = [ + 'test/event-garbage-collector-test-suite.cc', + ] headers = bld.new_task_gen('ns3header') headers.module = 'tools' diff --git a/src/topology-read/model/rocketfuel-topology-reader.cc b/src/topology-read/model/rocketfuel-topology-reader.cc index 4594f6dd8..6a4896dbf 100644 --- a/src/topology-read/model/rocketfuel-topology-reader.cc +++ b/src/topology-read/model/rocketfuel-topology-reader.cc @@ -410,73 +410,3 @@ RocketfuelTopologyReader::Read (void) } /* namespace ns3 */ -//----------------------------------------------------------------------------- -// Unit tests -//----------------------------------------------------------------------------- - -#include "ns3/log.h" -#include "ns3/abort.h" -#include "ns3/attribute.h" -#include "ns3/object-factory.h" -#include "ns3/object-factory.h" -#include "ns3/simulator.h" -#include "ns3/test.h" - -namespace ns3 { - -class RocketfuelTopologyReaderTest: public TestCase -{ -public: - RocketfuelTopologyReaderTest (); -private: - virtual void DoRun (void); -}; - -RocketfuelTopologyReaderTest::RocketfuelTopologyReaderTest () - : TestCase ("RocketfuelTopologyReaderTest") -{} - - -void -RocketfuelTopologyReaderTest::DoRun (void) -{ - Ptr inFile; - NodeContainer nodes; - - std::string input ("./src/topology-read/examples/RocketFuel_toposample_1239_weights.txt"); - - inFile = CreateObject (); - inFile->SetFileName(input); - - if (inFile != 0) - { - nodes = inFile->Read (); - } - - NS_TEST_ASSERT_MSG_NE (nodes.GetN (), 0, "Problems reading node information the topology file.."); - - NS_TEST_ASSERT_MSG_NE (inFile->LinksSize (), 0, "Problems reading the topology file."); - - NS_LOG_INFO ("Rocketfuel topology created with " << nodes.GetN () << " nodes and " << - inFile->LinksSize () << " links (from " << input << ")"); - - NS_TEST_EXPECT_MSG_EQ (nodes.GetN (),315, "noes"); - NS_TEST_EXPECT_MSG_EQ (inFile->LinksSize (),972, "links"); - Simulator::Destroy (); -} - -static class RocketfuelTopologyReaderTestSuite : public TestSuite -{ -public: - RocketfuelTopologyReaderTestSuite (); -private: -} g_rocketfueltopologyreaderTests; - -RocketfuelTopologyReaderTestSuite::RocketfuelTopologyReaderTestSuite () - : TestSuite ("rocketfuel-topology-reader", UNIT) -{ - AddTestCase (new RocketfuelTopologyReaderTest ()); -} - - -} diff --git a/src/topology-read/test/rocketfuel-topology-reader-test-suite.cc b/src/topology-read/test/rocketfuel-topology-reader-test-suite.cc new file mode 100644 index 000000000..9c96fb3d3 --- /dev/null +++ b/src/topology-read/test/rocketfuel-topology-reader-test-suite.cc @@ -0,0 +1,95 @@ +/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2010 Hajime Tazaki + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Hajime Tazaki (tazaki@sfc.wide.ad.jp) + */ + +//----------------------------------------------------------------------------- +// Unit tests +//----------------------------------------------------------------------------- + +#include "ns3/test.h" +#include "ns3/rocketfuel-topology-reader.h" +#include "ns3/log.h" +#include "ns3/abort.h" +#include "ns3/attribute.h" +#include "ns3/object-factory.h" +#include "ns3/object-factory.h" +#include "ns3/simulator.h" + +namespace ns3 { + +NS_LOG_COMPONENT_DEFINE ("RocketfuelTopologyReader"); + +NS_OBJECT_ENSURE_REGISTERED (RocketfuelTopologyReader); + +class RocketfuelTopologyReaderTest: public TestCase +{ +public: + RocketfuelTopologyReaderTest (); +private: + virtual void DoRun (void); +}; + +RocketfuelTopologyReaderTest::RocketfuelTopologyReaderTest () + : TestCase ("RocketfuelTopologyReaderTest") +{} + + +void +RocketfuelTopologyReaderTest::DoRun (void) +{ + Ptr inFile; + NodeContainer nodes; + + std::string input ("./src/topology-read/examples/RocketFuel_toposample_1239_weights.txt"); + + inFile = CreateObject (); + inFile->SetFileName(input); + + if (inFile != 0) + { + nodes = inFile->Read (); + } + + NS_TEST_ASSERT_MSG_NE (nodes.GetN (), 0, "Problems reading node information the topology file.."); + + NS_TEST_ASSERT_MSG_NE (inFile->LinksSize (), 0, "Problems reading the topology file."); + + NS_LOG_INFO ("Rocketfuel topology created with " << nodes.GetN () << " nodes and " << + inFile->LinksSize () << " links (from " << input << ")"); + + NS_TEST_EXPECT_MSG_EQ (nodes.GetN (),315, "noes"); + NS_TEST_EXPECT_MSG_EQ (inFile->LinksSize (),972, "links"); + Simulator::Destroy (); +} + +static class RocketfuelTopologyReaderTestSuite : public TestSuite +{ +public: + RocketfuelTopologyReaderTestSuite (); +private: +} g_rocketfueltopologyreaderTests; + +RocketfuelTopologyReaderTestSuite::RocketfuelTopologyReaderTestSuite () + : TestSuite ("rocketfuel-topology-reader", UNIT) +{ + AddTestCase (new RocketfuelTopologyReaderTest ()); +} + + +} diff --git a/src/topology-read/wscript b/src/topology-read/wscript index 0bc4df520..0285c806f 100644 --- a/src/topology-read/wscript +++ b/src/topology-read/wscript @@ -9,6 +9,12 @@ def build(bld): 'model/rocketfuel-topology-reader.cc', 'helper/topology-reader-helper.cc', ] + + module_test = bld.create_ns3_module_test_library('topology-read') + module_test.source = [ + 'test/rocketfuel-topology-reader-test-suite.cc', + ] + headers = bld.new_task_gen('ns3header') headers.module = 'topology-read' headers.source = [