A Discrete-Event Network Simulator
API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
brite-test-topology.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * This program is free software; you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License version 2 as
5  * published by the Free Software Foundation;
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15  *
16  */
17 
18 #include <string>
19 #include "ns3/core-module.h"
20 #include "ns3/network-module.h"
21 #include "ns3/internet-module.h"
22 #include "ns3/point-to-point-module.h"
23 #include "ns3/packet-sink-helper.h"
24 #include "ns3/packet-sink.h"
25 #include "ns3/random-variable-stream.h"
26 #include "ns3/on-off-helper.h"
27 #include "ns3/brite-module.h"
28 #include "ns3/test.h"
29 #include <iostream>
30 #include <fstream>
31 
32 using namespace ns3;
33 
35 {
36 public:
39 
40 private:
41  virtual void DoRun (void);
42 
43 };
44 
46  : TestCase ("Test that two brite topologies created with same seed value produce same graph (not an exact test)")
47 {
48 }
49 
51 {
52 }
53 
55 {
56 
57  std::string confFile = "src/brite/test/test.conf";
58 
59  SeedManager::SetRun (1);
60  SeedManager::SetSeed (1);
61  BriteTopologyHelper bthA (confFile);
62  bthA.AssignStreams (1);
63 
64  SeedManager::SetRun (1);
65  SeedManager::SetSeed (1);
66  BriteTopologyHelper bthB (confFile);
67  bthB.AssignStreams (1);
68 
70 
71  bthA.BuildBriteTopology (stack);
72  bthB.BuildBriteTopology (stack);
73 
74  int numAsA = bthA.GetNAs ();
75  int numAsB = bthB.GetNAs ();
76 
77  //numAs should be 2 for the conf file in /src/brite/test/test.conf
78  NS_TEST_ASSERT_MSG_EQ (numAsA, 2, "Number of AS for this topology must be 2");
79  NS_TEST_ASSERT_MSG_EQ (numAsA, numAsB, "Number of AS should be same for both test topologies");
80  NS_TEST_ASSERT_MSG_EQ (bthA.GetNNodesTopology (), bthB.GetNNodesTopology (), "Total number of nodes for each topology should be equal");
81  NS_TEST_ASSERT_MSG_EQ (bthA.GetNEdgesTopology (), bthB.GetNEdgesTopology (), "Total number of edges for each topology should be equal");
82 
83  for (unsigned int i = 0; i < bthA.GetNAs (); ++i)
84  {
85  NS_TEST_ASSERT_MSG_EQ (bthA.GetNLeafNodesForAs (i), bthB.GetNLeafNodesForAs (i), "Total number of leaf nodes different for AS " << i);
86  }
87 }
88 
90 {
91 public:
94 
95 private:
96  virtual void DoRun (void);
97 
98 };
99 
101  : TestCase ("Test that packets can be send across a BRITE topology using UDP")
102 {
103 }
104 
106 {
107 }
108 
110 {
111 
112  std::string confFile = "src/brite/test/test.conf";
113  BriteTopologyHelper bth (confFile);
114 
115  PointToPointHelper p2p;
118 
119  address.SetBase ("10.0.0.0", "255.255.255.0");
120 
121  bth.BuildBriteTopology (stack);
122  bth.AssignIpv4Addresses (address);
123 
124  NodeContainer source;
125  NodeContainer sink;
126 
127  source.Create (1);
128  stack.Install (source);
129 
130  //install source node on last leaf node of AS 0
131  int numNodesInAsZero = bth.GetNNodesForAs (0);
132  source.Add (bth.GetNodeForAs (0, numNodesInAsZero - 1));
133 
134  sink.Create (1);
135  stack.Install (sink);
136 
137  //install sink node on last leaf node on AS 1
138  int numNodesInAsOne = bth.GetNNodesForAs (1);
139  sink.Add (bth.GetNodeForAs (1, numNodesInAsOne - 1));
140 
141  p2p.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
142  p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
143 
144  NetDeviceContainer p2pSourceDevices;
145  NetDeviceContainer p2pSinkDevices;
146 
147  p2pSourceDevices = p2p.Install (source);
148  p2pSinkDevices = p2p.Install (sink);
149 
150  address.SetBase ("10.1.0.0", "255.255.0.0");
151  Ipv4InterfaceContainer sourceInterfaces;
152  sourceInterfaces = address.Assign (p2pSourceDevices);
153 
154  address.SetBase ("10.2.0.0", "255.255.0.0");
155  Ipv4InterfaceContainer sinkInterfaces;
156  sinkInterfaces = address.Assign (p2pSinkDevices);
157 
158  uint16_t port = 9;
159 
160  OnOffHelper onOff ("ns3::UdpSocketFactory",
161  Address (InetSocketAddress (sinkInterfaces.GetAddress (0), port)));
162  onOff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
163  onOff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
164  onOff.SetAttribute ("DataRate", DataRateValue (DataRate (6000)));
165 
166  ApplicationContainer apps = onOff.Install (source.Get (0));
167 
168  apps.Start (Seconds (1.0));
169  apps.Stop (Seconds (10.0));
170 
171  PacketSinkHelper sinkHelper ("ns3::UdpSocketFactory",
172  Address (InetSocketAddress (Ipv4Address::GetAny (), port)));
173  apps = sinkHelper.Install (sink.Get (0));
174 
175  apps.Start (Seconds (1.0));
176  apps.Stop (Seconds (10.0));
177 
178  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
179 
180  Simulator::Stop (Seconds (10.0));
181  Simulator::Run ();
182 
183  Ptr<PacketSink> sink1 = DynamicCast<PacketSink> (apps.Get (0));
184  //NS_TEST_ASSERT_MSG_EQ (sink1->GetTotalRx (), 6656, "Not all packets received from source");
185 
186  Simulator::Destroy ();
187 
188 }
189 
190 class BriteTestSuite : public TestSuite
191 {
192 public:
193  BriteTestSuite () : TestSuite ("brite-testing", UNIT)
194  {
195  AddTestCase (new BriteTopologyStructureTestCase, TestCase::QUICK);
196  AddTestCase (new BriteTopologyFunctionTestCase, TestCase::QUICK);
197  }
uint32_t GetNNodesForAs(uint32_t asNum)
Returns the total number of nodes for a given AS.
holds a vector of ns3::Application pointers.
an Inet address class
uint32_t GetNLeafNodesForAs(uint32_t asNum)
Returns the number of router leaf nodes for a given AS.
holds a vector of std::pair of Ptr and interface index.
virtual void DoRun(void)
Implementation to actually run this TestCase.
hold variables of type string
Definition: string.h:18
NetDeviceContainer Install(NodeContainer c)
Ptr< Node > GetNodeForAs(uint32_t asNum, uint32_t nodeNum)
Returns a given router node for a given AS.
A suite of tests to run.
Definition: test.h:1105
uint32_t GetNAs(void) const
Returns the number of AS created in the topology.
aggregate IP/TCP/UDP functionality to existing Nodes.
Interface with BRITE, the Boston university Representative Internet Topology gEnerator.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes...
Build a set of PointToPointNetDevice objects.
encapsulates test code
Definition: test.h:929
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void AssignStreams(int64_t streamNumber)
Assigns stream number to UniformRandomVariable used to generate brite seed file.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:42
uint16_t port
Definition: dsdv-manet.cc:44
a polymophic address class
Definition: address.h:86
Class for representing data rates.
Definition: data-rate.h:71
uint32_t GetNEdgesTopology() const
Returns the number of edges created within the topology.
void AssignIpv4Addresses(Ipv4AddressHelper &address)
uint32_t GetNNodesTopology() const
Returns the number of nodes created within the topology.
#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:148
holds a vector of ns3::NetDevice pointers
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter...
keep track of a set of node pointers.
Ptr< Application > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
void Install(std::string nodeName) const
Aggregate implementations of the ns3::Ipv4, ns3::Ipv6, ns3::Udp, and ns3::Tcp classes onto the provid...
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual child TestCase case to this TestCase.
Definition: test.cc:184
tuple stack
Definition: first.py:34
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter...
Ipv4InterfaceContainer Assign(const NetDeviceContainer &c)
Assign IP addresses to the net devices specified in the container based on the current network prefix...
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
hold objects of type ns3::DataRate
Ptr< Node > Get(uint32_t i) const
Get the Ptr stored in this container at a given index.
virtual void DoRun(void)
Implementation to actually run this TestCase.
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
tuple address
Definition: first.py:37
This test suite implements a Unit Test.
Definition: test.h:1115
BriteTestSuite g_briteTestSuite
void BuildBriteTopology(InternetStackHelper &stack)
Create NS3 topology using information generated from BRITE.
void SetAttribute(std::string name, const AttributeValue &value)
Helper function used to set the underlying application attributes.
void SetBase(Ipv4Address network, Ipv4Mask mask, Ipv4Address base="0.0.0.1")
Set the base network number, network mask and base address.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const