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
32using namespace ns3;
33
43{
44public:
47
48private:
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{
106public:
109
110private:
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
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
211{
212public:
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.
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