A Discrete-Event Network Simulator
API
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 
43 {
44 public:
47 
48 private:
49  virtual void DoRun (void);
50 
51 };
52 
54  : TestCase ("Test that two brite topologies created with same seed value produce same graph (not an exact test)")
55 {
56 }
57 
59 {
60 }
61 
63 {
64 
65  std::string confFile = "src/brite/test/test.conf";
66 
67  SeedManager::SetRun (1);
68  SeedManager::SetSeed (1);
69  BriteTopologyHelper bthA (confFile);
70  bthA.AssignStreams (1);
71 
72  SeedManager::SetRun (1);
73  SeedManager::SetSeed (1);
74  BriteTopologyHelper bthB (confFile);
75  bthB.AssignStreams (1);
76 
78 
81 
82  int numAsA = bthA.GetNAs ();
83  int numAsB = bthB.GetNAs ();
84 
85  //numAs should be 2 for the conf file in /src/brite/test/test.conf
86  NS_TEST_ASSERT_MSG_EQ (numAsA, 2, "Number of AS for this topology must be 2");
87  NS_TEST_ASSERT_MSG_EQ (numAsA, numAsB, "Number of AS should be same for both test topologies");
88  NS_TEST_ASSERT_MSG_EQ (bthA.GetNNodesTopology (), bthB.GetNNodesTopology (), "Total number of nodes for each topology should be equal");
89  NS_TEST_ASSERT_MSG_EQ (bthA.GetNEdgesTopology (), bthB.GetNEdgesTopology (), "Total number of edges for each topology should be equal");
90 
91  for (unsigned int i = 0; i < bthA.GetNAs (); ++i)
92  {
93  NS_TEST_ASSERT_MSG_EQ (bthA.GetNLeafNodesForAs (i), bthB.GetNLeafNodesForAs (i), "Total number of leaf nodes different for AS " << i);
94  }
95 }
96 
105 {
106 public:
109 
110 private:
111  virtual void DoRun (void);
112 
113 };
114 
116  : TestCase ("Test that packets can be send across a BRITE topology using UDP")
117 {
118 }
119 
121 {
122 }
123 
125 {
126 
127  std::string confFile = "src/brite/test/test.conf";
128  BriteTopologyHelper bth (confFile);
129 
130  PointToPointHelper p2p;
133 
134  address.SetBase ("10.0.0.0", "255.255.255.0");
135 
138 
139  NodeContainer source;
141 
142  source.Create (1);
143  stack.Install (source);
144 
145  //install source node on last leaf node of AS 0
146  int numNodesInAsZero = bth.GetNNodesForAs (0);
147  source.Add (bth.GetNodeForAs (0, numNodesInAsZero - 1));
148 
149  sink.Create (1);
150  stack.Install (sink);
151 
152  //install sink node on last leaf node on AS 1
153  int numNodesInAsOne = bth.GetNNodesForAs (1);
154  sink.Add (bth.GetNodeForAs (1, numNodesInAsOne - 1));
155 
156  p2p.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
157  p2p.SetChannelAttribute ("Delay", StringValue ("2ms"));
158 
159  NetDeviceContainer p2pSourceDevices;
160  NetDeviceContainer p2pSinkDevices;
161 
162  p2pSourceDevices = p2p.Install (source);
163  p2pSinkDevices = p2p.Install (sink);
164 
165  address.SetBase ("10.1.0.0", "255.255.0.0");
166  Ipv4InterfaceContainer sourceInterfaces;
167  sourceInterfaces = address.Assign (p2pSourceDevices);
168 
169  address.SetBase ("10.2.0.0", "255.255.0.0");
170  Ipv4InterfaceContainer sinkInterfaces;
171  sinkInterfaces = address.Assign (p2pSinkDevices);
172 
173  uint16_t port = 9;
174 
175  OnOffHelper onOff ("ns3::UdpSocketFactory",
176  Address (InetSocketAddress (sinkInterfaces.GetAddress (0), port)));
177  onOff.SetAttribute ("OnTime", StringValue ("ns3::ConstantRandomVariable[Constant=1]"));
178  onOff.SetAttribute ("OffTime", StringValue ("ns3::ConstantRandomVariable[Constant=0]"));
179  onOff.SetAttribute ("DataRate", DataRateValue (DataRate (6000)));
180 
181  ApplicationContainer apps = onOff.Install (source.Get (0));
182 
183  apps.Start (Seconds (1.0));
184  apps.Stop (Seconds (10.0));
185 
186  PacketSinkHelper sinkHelper ("ns3::UdpSocketFactory",
187  Address (InetSocketAddress (Ipv4Address::GetAny (), port)));
188  apps = sinkHelper.Install (sink.Get (0));
189 
190  apps.Start (Seconds (1.0));
191  apps.Stop (Seconds (10.0));
192 
193  Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
194 
195  Simulator::Stop (Seconds (10.0));
196  Simulator::Run ();
197 
198  Ptr<PacketSink> sink1 = DynamicCast<PacketSink> (apps.Get (0));
199  //NS_TEST_ASSERT_MSG_EQ (sink1->GetTotalRx (), 6656, "Not all packets received from source");
200 
201  Simulator::Destroy ();
202 
203 }
204 
210 class BriteTestSuite : public TestSuite
211 {
212 public:
213  BriteTestSuite () : TestSuite ("brite-testing", UNIT)
214  {
215  AddTestCase (new BriteTopologyStructureTestCase, TestCase::QUICK);
216  AddTestCase (new BriteTopologyFunctionTestCase, TestCase::QUICK);
217  }
218 };
219 
static BriteTestSuite g_briteTestSuite
Static variable for test initialization.
BRITE TestSuite.
BRITE topology function Test.
virtual void DoRun(void)
Implementation to actually run this TestCase.
BRITE topology structure Test.
virtual void DoRun(void)
Implementation to actually run this TestCase.
a polymophic address class
Definition: address.h:91
holds a vector of ns3::Application pointers.
Ptr< Application > Get(uint32_t i) const
Get the Ptr<Application> stored in this container at a given index.
void Start(Time start)
Arrange for all of the Applications in this container to Start() at the Time given as a parameter.
void Stop(Time stop)
Arrange for all of the Applications in this container to Stop() at the Time given as a parameter.
Interface with BRITE, the Boston university Representative Internet Topology gEnerator.
uint32_t GetNAs(void) const
Returns the number of AS created in the topology.
void AssignStreams(int64_t streamNumber)
Assigns stream number to UniformRandomVariable used to generate brite seed file.
uint32_t GetNNodesTopology() const
Returns the number of nodes created within the topology.
void BuildBriteTopology(InternetStackHelper &stack)
Create NS3 topology using information generated from BRITE.
Ptr< Node > GetNodeForAs(uint32_t asNum, uint32_t nodeNum)
Returns a given router node for a given AS.
void AssignIpv4Addresses(Ipv4AddressHelper &address)
uint32_t GetNNodesForAs(uint32_t asNum)
Returns the total number of nodes for a given AS.
uint32_t GetNLeafNodesForAs(uint32_t asNum)
Returns the number of router leaf nodes for a given AS.
uint32_t GetNEdgesTopology() const
Returns the number of edges created within the topology.
Class for representing data rates.
Definition: data-rate.h:89
AttributeValue implementation for DataRate.
Definition: data-rate.h:298
an Inet address class
aggregate IP/TCP/UDP functionality to existing Nodes.
A helper class to make life easier while doing simple IPv4 address assignment in scripts.
holds a vector of std::pair of Ptr<Ipv4> and interface index.
Ipv4Address GetAddress(uint32_t i, uint32_t j=0) const
holds a vector of ns3::NetDevice pointers
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
void Add(NodeContainer other)
Append the contents of another NodeContainer to the end of this container.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
A helper to make it easier to instantiate an ns3::OnOffApplication on a set of nodes.
Definition: on-off-helper.h:43
ApplicationContainer Install(NodeContainer c) const
Install an ns3::OnOffApplication on each node of the input container configured with all the attribut...
void SetAttribute(std::string name, const AttributeValue &value)
Helper function used to set the underlying application attributes.
A helper to make it easier to instantiate an ns3::PacketSinkApplication on a set of nodes.
ApplicationContainer Install(NodeContainer c) const
Install an ns3::PacketSinkApplication on each node of the input container configured with all the att...
Build a set of PointToPointNetDevice objects.
void SetDeviceAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each NetDevice created by the helper.
void SetChannelAttribute(std::string name, const AttributeValue &value)
Set an attribute value to be propagated to each Channel created by the helper.
NetDeviceContainer Install(NodeContainer c)
Hold variables of type string.
Definition: string.h:41
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
uint16_t port
Definition: dsdv-manet.cc:45
#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
Time Seconds(double value)
Construct a Time in the indicated unit.
Definition: nstime.h:1244
address
Definition: first.py:44
stack
Definition: first.py:41
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Ptr< PacketSink > sink
Definition: wifi-tcp.cc:56