Move tests from some modules to their test libraries
This commit is contained in:
@@ -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<Ipv4Address> &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<Ipv4Address> &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
|
||||
|
||||
|
||||
@@ -3294,133 +3294,6 @@ RoutingProtocol::GetRoutingTableEntries () const
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
OlsrMprTestCase::OlsrMprTestCase ()
|
||||
: TestCase ("Check OLSR MPR computing mechanism")
|
||||
{
|
||||
}
|
||||
OlsrMprTestCase::~OlsrMprTestCase ()
|
||||
{
|
||||
}
|
||||
void
|
||||
OlsrMprTestCase::DoRun ()
|
||||
{
|
||||
Ptr<RoutingProtocol> protocol = CreateObject<RoutingProtocol> ();
|
||||
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
|
||||
|
||||
311
src/olsr/test/olsr-header-test-suite.cc
Normal file
311
src/olsr/test/olsr-header-test-suite.cc
Normal file
@@ -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 <gjc@inescporto.pt>
|
||||
*/
|
||||
|
||||
#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<Ipv4Address> &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<Ipv4Address> &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
|
||||
|
||||
173
src/olsr/test/olsr-routing-protocol-test-suite.cc
Normal file
173
src/olsr/test/olsr-routing-protocol-test-suite.cc
Normal file
@@ -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 <fjrm@dif.um.es>
|
||||
* Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
|
||||
*/
|
||||
|
||||
#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<RoutingProtocol> protocol = CreateObject<RoutingProtocol> ();
|
||||
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
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
||||
87
src/tools/test/event-garbage-collector-test-suite.cc
Normal file
87
src/tools/test/event-garbage-collector-test-suite.cc
Normal file
@@ -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 <gjc@inescporto.pt>
|
||||
*/
|
||||
|
||||
#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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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<RocketfuelTopologyReader> inFile;
|
||||
NodeContainer nodes;
|
||||
|
||||
std::string input ("./src/topology-read/examples/RocketFuel_toposample_1239_weights.txt");
|
||||
|
||||
inFile = CreateObject<RocketfuelTopologyReader> ();
|
||||
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 ());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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<RocketfuelTopologyReader> inFile;
|
||||
NodeContainer nodes;
|
||||
|
||||
std::string input ("./src/topology-read/examples/RocketFuel_toposample_1239_weights.txt");
|
||||
|
||||
inFile = CreateObject<RocketfuelTopologyReader> ();
|
||||
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 ());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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 = [
|
||||
|
||||
Reference in New Issue
Block a user