A Discrete-Event Network Simulator
API
ipv4-address-generator-test-suite.cc
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2008 University of Washington
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 
19 #include "ns3/test.h"
20 #include "ns3/ipv4-address-generator.h"
21 #include "ns3/simulation-singleton.h"
22 
23 using namespace ns3;
24 
32 {
33 public:
35  virtual void DoRun (void);
36  virtual void DoTeardown (void);
37 };
38 
40  : TestCase ("Make sure the network number allocator is working on some of network prefixes.")
41 {
42 }
43 void
45 {
47 }
48 void
50 {
51  Ipv4Address network;
52  Ipv4AddressGenerator::Init (Ipv4Address ("1.0.0.0"), Ipv4Mask ("255.0.0.0"),
53  Ipv4Address ("0.0.0.0"));
54  network = Ipv4AddressGenerator::GetNetwork (Ipv4Mask ("255.0.0.0"));
55  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("1.0.0.0"), "001");
56  network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.0.0.0"));
57  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("2.0.0.0"), "001");
58 
59  Ipv4AddressGenerator::Init (Ipv4Address ("0.1.0.0"),
60  Ipv4Mask ("255.255.0.0"), Ipv4Address ("0.0.0.0"));
61  network = Ipv4AddressGenerator::GetNetwork (Ipv4Mask ("255.255.0.0"));
62  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.1.0.0"), "003");
63  network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.0.0"));
64  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.2.0.0"), "004");
65 
66  Ipv4AddressGenerator::Init (Ipv4Address ("0.0.1.0"),
67  Ipv4Mask ("255.255.255.0"), Ipv4Address ("0.0.0.0"));
68  network = Ipv4AddressGenerator::GetNetwork (Ipv4Mask ("255.255.255.0"));
69  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.1.0"), "005");
70  network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.255.0"));
71  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.2.0"), "006");
72 
73  network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.0.0.0"));
74  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("3.0.0.0"), "007");
75  network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.0.0"));
76  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.3.0.0"), "008");
77  network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.255.0"));
78  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.3.0"), "009");
79 }
80 
88 {
89 public:
91 private:
92  virtual void DoRun (void);
93  virtual void DoTeardown (void);
94 };
95 
97  : TestCase ("Sanity check on allocation of addresses")
98 {
99 }
100 
101 void
103 {
105 
106  Ipv4AddressGenerator::Init (Ipv4Address ("1.0.0.0"), Ipv4Mask ("255.0.0.0"),
107  Ipv4Address ("0.0.0.3"));
108  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
109  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.3"), "100");
110  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
111  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("1.0.0.4"), "101");
112 
113  Ipv4AddressGenerator::Init (Ipv4Address ("0.1.0.0"),
114  Ipv4Mask ("255.255.0.0"), Ipv4Address ("0.0.0.3"));
115  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
116  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.3"), "102");
117  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
118  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.1.0.4"), "103");
119 
120  Ipv4AddressGenerator::Init (Ipv4Address ("0.0.1.0"),
121  Ipv4Mask ("255.255.255.0"), Ipv4Address ("0.0.0.3"));
122  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
123  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.3"), "104");
124  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
125  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.1.4"), "105");
126 }
127 
128 void
130 {
132  Simulator::Destroy ();
133 }
134 
135 
143 {
144 public:
146  virtual void DoRun (void);
147  virtual void DoTeardown (void);
148 };
149 
151  : TestCase ("Make sure Network and address allocation play together.")
152 {
153 }
154 
155 void
157 {
159  Simulator::Destroy ();
160 }
161 
162 void
164 {
166  Ipv4Address network;
167 
168  Ipv4AddressGenerator::Init (Ipv4Address ("3.0.0.0"), Ipv4Mask ("255.0.0.0"),
169  Ipv4Address ("0.0.0.3"));
170  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
171  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("3.0.0.3"), "200");
172  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
173  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("3.0.0.4"), "201");
174 
175  network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.0.0.0"));
176  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("4.0.0.0"), "202");
177  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.0.0.0"));
178  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("4.0.0.5"), "203");
179 
180  Ipv4AddressGenerator::Init (Ipv4Address ("0.3.0.0"),
181  Ipv4Mask ("255.255.0.0"), Ipv4Address ("0.0.0.3"));
182  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
183  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.3.0.3"), "204");
184  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
185  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.3.0.4"), "205");
186 
187  network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.0.0"));
188  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.4.0.0"), "206");
189  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.0.0"));
190  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.4.0.5"), "207");
191 
192  Ipv4AddressGenerator::Init (Ipv4Address ("0.0.3.0"),
193  Ipv4Mask ("255.255.255.0"), Ipv4Address ("0.0.0.3"));
194  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
195  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.3.3"), "208");
196  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
197  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.3.4"), "209");
198 
199  network = Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.255.0"));
200  NS_TEST_EXPECT_MSG_EQ (network, Ipv4Address ("0.0.4.0"), "210");
201  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
202  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("0.0.4.5"), "211");
203 }
204 
212 {
213 public:
215 private:
216  virtual void DoRun (void);
217  virtual void DoTeardown (void);
218 };
219 
221  : TestCase ("A quick kindof-semi-almost-real example")
222 {
223 }
224 
225 void
227 {
229 }
230 
231 void
233 {
235  //
236  // First, initialize our /24 network to 192.168.0.0 and begin
237  // allocating with ip address 0.0.0.3 out of that prefix.
238  //
239  Ipv4AddressGenerator::Init (Ipv4Address ("192.168.0.0"),
240  Ipv4Mask ("255.255.255.0"), Ipv4Address ("0.0.0.3"));
241  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
242  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.0.3"), "300");
243  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
244  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.0.4"), "301");
245  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
246  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.0.5"), "302");
247  //
248  // Allocate the next network out of our /24 network (this should be
249  // 192.168.1.0) and begin allocating with IP address 0.0.0.3 out of that
250  // prefix.
251  //
252  Ipv4AddressGenerator::NextNetwork (Ipv4Mask ("255.255.255.0"));
253  Ipv4AddressGenerator::InitAddress (Ipv4Address ("0.0.0.3"),
254  Ipv4Mask ("255.255.255.0"));
255  //
256  // The first address we should get is the previous numbers ORed together, which
257  // is 192.168.1.3, of course.
258  //
259  address = Ipv4AddressGenerator::NextAddress (Ipv4Mask ("255.255.255.0"));
260  NS_TEST_EXPECT_MSG_EQ (address, Ipv4Address ("192.168.1.3"), "304");
261 }
262 
270 {
271 public:
273 private:
274  void DoRun (void);
275  void DoTeardown (void);
276 };
277 
279  : TestCase ("Make sure that the address collision logic works.")
280 {
281 }
282 
283 void
285 {
287  Simulator::Destroy ();
288 }
289 void
291 {
292  Ipv4AddressGenerator::AddAllocated ("0.0.0.5");
293  Ipv4AddressGenerator::AddAllocated ("0.0.0.10");
294  Ipv4AddressGenerator::AddAllocated ("0.0.0.15");
295  Ipv4AddressGenerator::AddAllocated ("0.0.0.20");
296 
297  Ipv4AddressGenerator::AddAllocated ("0.0.0.4");
298  Ipv4AddressGenerator::AddAllocated ("0.0.0.3");
299  Ipv4AddressGenerator::AddAllocated ("0.0.0.2");
300  Ipv4AddressGenerator::AddAllocated ("0.0.0.1");
301 
302  Ipv4AddressGenerator::AddAllocated ("0.0.0.6");
303  Ipv4AddressGenerator::AddAllocated ("0.0.0.7");
304  Ipv4AddressGenerator::AddAllocated ("0.0.0.8");
305  Ipv4AddressGenerator::AddAllocated ("0.0.0.9");
306 
307  Ipv4AddressGenerator::AddAllocated ("0.0.0.11");
308  Ipv4AddressGenerator::AddAllocated ("0.0.0.12");
309  Ipv4AddressGenerator::AddAllocated ("0.0.0.13");
310  Ipv4AddressGenerator::AddAllocated ("0.0.0.14");
311 
312  Ipv4AddressGenerator::AddAllocated ("0.0.0.19");
313  Ipv4AddressGenerator::AddAllocated ("0.0.0.18");
314  Ipv4AddressGenerator::AddAllocated ("0.0.0.17");
315  Ipv4AddressGenerator::AddAllocated ("0.0.0.16");
316 
317  Ipv4AddressGenerator::TestMode ();
318  bool added = Ipv4AddressGenerator::AddAllocated ("0.0.0.21");
319  NS_TEST_EXPECT_MSG_EQ (added, true, "400");
320 
321  added = Ipv4AddressGenerator::AddAllocated ("0.0.0.4");
322  NS_TEST_EXPECT_MSG_EQ (added, false, "401");
323 
324  added = Ipv4AddressGenerator::AddAllocated ("0.0.0.9");
325  NS_TEST_EXPECT_MSG_EQ (added, false, "402");
326 
327  added = Ipv4AddressGenerator::AddAllocated ("0.0.0.16");
328  NS_TEST_EXPECT_MSG_EQ (added, false, "403");
329 
330  added = Ipv4AddressGenerator::AddAllocated ("0.0.0.21");
331  NS_TEST_EXPECT_MSG_EQ (added, false, "404");
332 }
333 
334 
342 {
343 public:
345 private:
346 };
347 
349  : TestSuite ("ipv4-address-generator", UNIT)
350 {
351  AddTestCase (new NetworkNumberAllocatorTestCase (), TestCase::QUICK);
352  AddTestCase (new AddressAllocatorTestCase (), TestCase::QUICK);
353  AddTestCase (new NetworkAndAddressTestCase (), TestCase::QUICK);
354  AddTestCase (new ExampleAddressGeneratorTestCase (), TestCase::QUICK);
355  AddTestCase (new AddressCollisionTestCase (), TestCase::QUICK);
356 }
357 
359 
ns3::TestCase::AddTestCase
void AddTestCase(TestCase *testCase, TestDuration duration=QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:299
AddressCollisionTestCase
IPv4 address collision Test.
Definition: ipv4-address-generator-test-suite.cc:270
AddressAllocatorTestCase
IPv4 address allocator Test.
Definition: ipv4-address-generator-test-suite.cc:88
AddressAllocatorTestCase::AddressAllocatorTestCase
AddressAllocatorTestCase()
Definition: ipv4-address-generator-test-suite.cc:96
ns3
Every class exported by the ns3 library is enclosed in the ns3 namespace.
NetworkAndAddressTestCase::NetworkAndAddressTestCase
NetworkAndAddressTestCase()
Definition: ipv4-address-generator-test-suite.cc:150
ExampleAddressGeneratorTestCase::DoTeardown
virtual void DoTeardown(void)
Implementation to do any local setup required for this TestCase.
Definition: ipv4-address-generator-test-suite.cc:226
AddressAllocatorTestCase::DoRun
virtual void DoRun(void)
Implementation to actually run this TestCase.
Definition: ipv4-address-generator-test-suite.cc:102
g_ipv4AddressGeneratorTestSuite
static Ipv4AddressGeneratorTestSuite g_ipv4AddressGeneratorTestSuite
Static variable for test initialization.
Definition: ipv4-address-generator-test-suite.cc:358
ns3::Ipv4Address
Ipv4 addresses are stored in host order in this class.
Definition: ipv4-address.h:41
ns3::Config::Reset
void Reset(void)
Reset the initial value of every attribute as well as the value of every global to what they were bef...
Definition: config.cc:820
ns3::TestCase
encapsulates test code
Definition: test.h:1154
AddressCollisionTestCase::DoRun
void DoRun(void)
Implementation to actually run this TestCase.
Definition: ipv4-address-generator-test-suite.cc:290
AddressCollisionTestCase::AddressCollisionTestCase
AddressCollisionTestCase()
Definition: ipv4-address-generator-test-suite.cc:278
AddressCollisionTestCase::DoTeardown
void DoTeardown(void)
Implementation to do any local setup required for this TestCase.
Definition: ipv4-address-generator-test-suite.cc:284
NetworkNumberAllocatorTestCase::DoRun
virtual void DoRun(void)
Implementation to actually run this TestCase.
Definition: ipv4-address-generator-test-suite.cc:49
first.address
address
Definition: first.py:44
NS_TEST_EXPECT_MSG_EQ
#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:283
Ipv4AddressGeneratorTestSuite
IPv4 Address Generator TestSuite.
Definition: ipv4-address-generator-test-suite.cc:342
ns3::TestSuite
A suite of tests to run.
Definition: test.h:1344
AddressAllocatorTestCase::DoTeardown
virtual void DoTeardown(void)
Implementation to do any local setup required for this TestCase.
Definition: ipv4-address-generator-test-suite.cc:129
ExampleAddressGeneratorTestCase::ExampleAddressGeneratorTestCase
ExampleAddressGeneratorTestCase()
Definition: ipv4-address-generator-test-suite.cc:220
ExampleAddressGeneratorTestCase::DoRun
virtual void DoRun(void)
Implementation to actually run this TestCase.
Definition: ipv4-address-generator-test-suite.cc:232
Ipv4AddressGeneratorTestSuite::Ipv4AddressGeneratorTestSuite
Ipv4AddressGeneratorTestSuite()
Definition: ipv4-address-generator-test-suite.cc:348
NetworkNumberAllocatorTestCase::NetworkNumberAllocatorTestCase
NetworkNumberAllocatorTestCase()
Definition: ipv4-address-generator-test-suite.cc:39
ExampleAddressGeneratorTestCase
IPv4 AddressGenerator example (sort of) Test.
Definition: ipv4-address-generator-test-suite.cc:212
NetworkNumberAllocatorTestCase::DoTeardown
virtual void DoTeardown(void)
Implementation to do any local setup required for this TestCase.
Definition: ipv4-address-generator-test-suite.cc:44
ns3::Ipv4Mask
a class to represent an Ipv4 address mask
Definition: ipv4-address.h:256
NetworkAndAddressTestCase::DoRun
virtual void DoRun(void)
Implementation to actually run this TestCase.
Definition: ipv4-address-generator-test-suite.cc:163
NetworkAndAddressTestCase::DoTeardown
virtual void DoTeardown(void)
Implementation to do any local setup required for this TestCase.
Definition: ipv4-address-generator-test-suite.cc:156
NetworkAndAddressTestCase
IPv4 network and address allocator Test.
Definition: ipv4-address-generator-test-suite.cc:143
NetworkNumberAllocatorTestCase
IPv4 network number Test.
Definition: ipv4-address-generator-test-suite.cc:32