A Discrete-Event Network Simulator
API
dsdv-testcase.cc
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2010 Hemanth Narra
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation;
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 *
18 * Author: Hemanth Narra <hemanth@ittc.ku.com>
19 *
20 * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
21 * ResiliNets Research Group http://wiki.ittc.ku.edu/resilinets
22 * Information and Telecommunication Technology Center (ITTC)
23 * and Department of Electrical Engineering and Computer Science
24 * The University of Kansas Lawrence, KS USA.
25 *
26 * Work supported in part by NSF FIND (Future Internet Design) Program
27 * under grant CNS-0626918 (Postmodern Internet Architecture),
28 * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
29 * US Department of Defense (DoD), and ITTC at The University of Kansas.
30 */
31#include "ns3/test.h"
32#include "ns3/mesh-helper.h"
33#include "ns3/simulator.h"
34#include "ns3/mobility-helper.h"
35#include "ns3/dsdv-helper.h"
36#include "ns3/double.h"
37#include "ns3/uinteger.h"
38#include "ns3/v4ping-helper.h"
39#include "ns3/string.h"
40#include "ns3/boolean.h"
41#include "ns3/pcap-file.h"
42#include "ns3/internet-stack-helper.h"
43#include "ns3/ipv4-address-helper.h"
44#include "ns3/dsdv-packet.h"
45#include "ns3/dsdv-rtable.h"
46
47using namespace ns3;
48
63{
64public:
67 virtual void
68 DoRun (void);
69};
71 : TestCase ("Verifying the DSDV header")
72{
73}
75{
76}
77void
79{
80 Ptr<Packet> packet = Create<Packet> ();
81
82 {
84 hdr1.SetDst (Ipv4Address ("10.1.1.2"));
85 hdr1.SetDstSeqno (2);
86 hdr1.SetHopCount (2);
87 packet->AddHeader (hdr1);
89 hdr2.SetDst (Ipv4Address ("10.1.1.3"));
90 hdr2.SetDstSeqno (4);
91 hdr2.SetHopCount (1);
92 packet->AddHeader (hdr2);
93 NS_TEST_ASSERT_MSG_EQ (packet->GetSize (), 24, "001");
94 }
95
96 {
98 packet->RemoveHeader (hdr2);
100 NS_TEST_ASSERT_MSG_EQ (hdr2.GetDst (),Ipv4Address ("10.1.1.3"),"003");
101 NS_TEST_ASSERT_MSG_EQ (hdr2.GetDstSeqno (),4,"004");
102 NS_TEST_ASSERT_MSG_EQ (hdr2.GetHopCount (),1,"005");
103 dsdv::DsdvHeader hdr1;
104 packet->RemoveHeader (hdr1);
105 NS_TEST_ASSERT_MSG_EQ (hdr1.GetSerializedSize (),12,"006");
106 NS_TEST_ASSERT_MSG_EQ (hdr1.GetDst (),Ipv4Address ("10.1.1.2"),"008");
107 NS_TEST_ASSERT_MSG_EQ (hdr1.GetDstSeqno (),2,"009");
108 NS_TEST_ASSERT_MSG_EQ (hdr1.GetHopCount (),2,"010");
109 }
110}
111
119{
120public:
123 virtual void
124 DoRun (void);
125};
126
128 : TestCase ("Dsdv Routing Table test case")
129{
130}
132{
133}
134void
136{
137 dsdv::RoutingTable rtable;
138 Ptr<NetDevice> dev;
139 {
141 /*device=*/ dev, /*dst=*/
142 Ipv4Address ("10.1.1.4"), /*seqno=*/ 2,
143 /*iface=*/ Ipv4InterfaceAddress (Ipv4Address ("10.1.1.1"), Ipv4Mask ("255.255.255.0")),
144 /*hops=*/ 2, /*next hop=*/
145 Ipv4Address ("10.1.1.2"),
146 /*lifetime=*/ Seconds (10));
147 NS_TEST_EXPECT_MSG_EQ (rtable.AddRoute (rEntry1),true,"add route");
149 /*device=*/ dev, /*dst=*/
150 Ipv4Address ("10.1.1.2"), /*seqno=*/ 4,
151 /*iface=*/ Ipv4InterfaceAddress (Ipv4Address ("10.1.1.1"), Ipv4Mask ("255.255.255.0")),
152 /*hops=*/ 1, /*next hop=*/
153 Ipv4Address ("10.1.1.2"),
154 /*lifetime=*/ Seconds (10));
155 NS_TEST_EXPECT_MSG_EQ (rtable.AddRoute (rEntry2),true,"add route");
157 /*device=*/ dev, /*dst=*/
158 Ipv4Address ("10.1.1.3"), /*seqno=*/ 4,
159 /*iface=*/ Ipv4InterfaceAddress (Ipv4Address ("10.1.1.1"), Ipv4Mask ("255.255.255.0")),
160 /*hops=*/ 1, /*next hop=*/
161 Ipv4Address ("10.1.1.3"),
162 /*lifetime=*/ Seconds (10));
163 NS_TEST_EXPECT_MSG_EQ (rtable.AddRoute (rEntry3),true,"add route");
165 /*device=*/ dev, /*dst=*/
166 Ipv4Address ("10.1.1.255"), /*seqno=*/ 0,
167 /*iface=*/ Ipv4InterfaceAddress (Ipv4Address ("10.1.1.1"), Ipv4Mask ("255.255.255.0")),
168 /*hops=*/ 0, /*next hop=*/
169 Ipv4Address ("10.1.1.255"),
170 /*lifetime=*/ Seconds (10));
171 NS_TEST_EXPECT_MSG_EQ (rtable.AddRoute (rEntry4),true,"add route");
172 }
173 {
175 if (rtable.LookupRoute (Ipv4Address ("10.1.1.4"), rEntry))
176 {
177 NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.4"),"100");
178 NS_TEST_ASSERT_MSG_EQ (rEntry.GetSeqNo (),2,"101");
179 NS_TEST_ASSERT_MSG_EQ (rEntry.GetHop (),2,"102");
180 }
181 if (rtable.LookupRoute (Ipv4Address ("10.1.1.2"), rEntry))
182 {
183 NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.2"),"103");
184 NS_TEST_ASSERT_MSG_EQ (rEntry.GetSeqNo (),4,"104");
185 NS_TEST_ASSERT_MSG_EQ (rEntry.GetHop (),1,"105");
186 }
187 if (rtable.LookupRoute (Ipv4Address ("10.1.1.3"), rEntry))
188 {
189 NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.3"),"106");
190 NS_TEST_ASSERT_MSG_EQ (rEntry.GetSeqNo (),4,"107");
191 NS_TEST_ASSERT_MSG_EQ (rEntry.GetHop (),1,"108");
192 }
193 if (rtable.LookupRoute (Ipv4Address ("10.1.1.255"), rEntry))
194 {
195 NS_TEST_ASSERT_MSG_EQ (rEntry.GetDestination (),Ipv4Address ("10.1.1.255"),"109");
196 }
197 NS_TEST_ASSERT_MSG_EQ (rEntry.GetInterface ().GetLocal (),Ipv4Address ("10.1.1.1"),"110");
198 NS_TEST_ASSERT_MSG_EQ (rEntry.GetInterface ().GetBroadcast (),Ipv4Address ("10.1.1.255"),"111");
199 NS_TEST_ASSERT_MSG_EQ (rtable.RoutingTableSize (),4,"Rtable size incorrect");
200 }
201 Simulator::Destroy ();
202}
203
211{
212public:
213 DsdvTestSuite () : TestSuite ("routing-dsdv", UNIT)
214 {
215 AddTestCase (new DsdvHeaderTestCase (), TestCase::QUICK);
216 AddTestCase (new DsdvTableTestCase (), TestCase::QUICK);
217 }
DSDV test case to verify the DSDV header.
virtual void DoRun(void)
Implementation to actually run this TestCase.
DSDV routing table tests (adding and looking up routes)
virtual void DoRun(void)
Implementation to actually run this TestCase.
DSDV test suite.
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
a class to store IPv4 address information on an interface
Ipv4Address GetBroadcast(void) const
Get the broadcast address.
Ipv4Address GetLocal(void) const
Get the local address.
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:256
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer.
Definition: packet.cc:280
void AddHeader(const Header &header)
Add header to this packet.
Definition: packet.cc:256
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Definition: packet.h:856
encapsulates test code
Definition: test.h:994
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:299
A suite of tests to run.
Definition: test.h:1188
@ UNIT
This test suite implements a Unit Test.
Definition: test.h:1197
DSDV Update Packet Format.
Definition: dsdv-packet.h:59
virtual uint32_t GetSerializedSize() const
Definition: dsdv-packet.cc:68
Ipv4Address GetDst() const
Get destination address.
Definition: dsdv-packet.h:95
void SetDstSeqno(uint32_t sequenceNumber)
Set destination sequence number.
Definition: dsdv-packet.h:122
uint32_t GetHopCount() const
Get hop count.
Definition: dsdv-packet.h:113
uint32_t GetDstSeqno() const
Get destination sequence number.
Definition: dsdv-packet.h:131
void SetDst(Ipv4Address destination)
Set destination address.
Definition: dsdv-packet.h:86
void SetHopCount(uint32_t hopCount)
Set hop count.
Definition: dsdv-packet.h:104
Routing table entry.
Definition: dsdv-rtable.h:57
Ipv4Address GetDestination() const
Get destination IP address.
Definition: dsdv-rtable.h:82
Ipv4InterfaceAddress GetInterface() const
Get interface address.
Definition: dsdv-rtable.h:145
uint32_t GetSeqNo() const
Get sequence number.
Definition: dsdv-rtable.h:172
uint32_t GetHop() const
Get hop.
Definition: dsdv-rtable.h:190
The Routing table used by DSDV protocol.
Definition: dsdv-rtable.h:321
bool LookupRoute(Ipv4Address dst, RoutingTableEntry &rt)
Lookup routing table entry with destination address dst.
Definition: dsdv-rtable.cc:72
bool AddRoute(RoutingTableEntry &r)
Add routing table entry if it doesn't yet exist in routing table.
Definition: dsdv-rtable.cc:128
uint32_t RoutingTableSize()
Provides the number of routes present in that nodes routing table.
Definition: dsdv-rtable.cc:122
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Definition: test.h:141
#define NS_TEST_EXPECT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report if not.
Definition: test.h:240
DsdvTestSuite g_dsdvTestSuite
the test suite
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1244
Every class exported by the ns3 library is enclosed in the ns3 namespace.