A Discrete-Event Network Simulator
API
mesh-information-element-vector-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) 2009 IITP RAS
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: Pavel Boyko <boyko@iitp.ru>
19 */
20
21#include "ns3/test.h"
22#include "ns3/mesh-information-element-vector.h"
23// All information elements:
24#include "ns3/ie-dot11s-beacon-timing.h"
25#include "ns3/ie-dot11s-configuration.h"
26#include "ns3/ie-dot11s-id.h"
27#include "ns3/ie-dot11s-metric-report.h"
28#include "ns3/ie-dot11s-peer-management.h"
29#include "ns3/ie-dot11s-peering-protocol.h"
30#include "ns3/ie-dot11s-perr.h"
31#include "ns3/ie-dot11s-prep.h"
32#include "ns3/ie-dot11s-preq.h"
33#include "ns3/ie-dot11s-rann.h"
34
35using namespace ns3;
36
49{
51 TestCase ("Serialization test for all mesh information elements")
52 {
53 };
54 void DoRun ();
55};
56
57void
59{
61 {
62 //Mesh ID test
63 Ptr<dot11s::IeMeshId> meshId = Create<dot11s::IeMeshId> ("qwerty");
64 vector.AddInformationElement (meshId);
65 }
66 {
67 Ptr<dot11s::IeConfiguration> config = Create<dot11s::IeConfiguration> ();
68 vector.AddInformationElement (config);
69 }
70 {
71 Ptr<dot11s::IeLinkMetricReport> report = Create<dot11s::IeLinkMetricReport> (123456);
72 vector.AddInformationElement (report);
73 }
74 {
75 Ptr<dot11s::IePeerManagement> peerMan1 = Create<dot11s::IePeerManagement> ();
76 peerMan1->SetPeerOpen (1);
77 Ptr<dot11s::IePeerManagement> peerMan2 = Create<dot11s::IePeerManagement> ();
78 peerMan2->SetPeerConfirm (1, 2);
79 Ptr<dot11s::IePeerManagement> peerMan3 = Create<dot11s::IePeerManagement> ();
80 peerMan3->SetPeerClose (1, 2, dot11s::REASON11S_MESH_CAPABILITY_POLICY_VIOLATION);
81 vector.AddInformationElement (peerMan1);
82 vector.AddInformationElement (peerMan2);
83 vector.AddInformationElement (peerMan3);
84 }
85 {
86 Ptr<dot11s::IeBeaconTiming> beaconTiming = Create<dot11s::IeBeaconTiming> ();
87 beaconTiming->AddNeighboursTimingElementUnit (1, Seconds (1.0), Seconds (4.0));
88 beaconTiming->AddNeighboursTimingElementUnit (2, Seconds (2.0), Seconds (3.0));
89 beaconTiming->AddNeighboursTimingElementUnit (3, Seconds (3.0), Seconds (2.0));
90 beaconTiming->AddNeighboursTimingElementUnit (4, Seconds (4.0), Seconds (1.0));
91 vector.AddInformationElement (beaconTiming);
92 }
93 {
94 Ptr<dot11s::IeRann> rann = Create<dot11s::IeRann> ();
95 rann->SetFlags (1);
96 rann->SetHopcount (2);
97 rann->SetTTL (4);
98 rann->DecrementTtl ();
99 NS_TEST_ASSERT_MSG_EQ (rann->GetTtl (), 3, "SetTtl works");
100 rann->SetOriginatorAddress (Mac48Address ("11:22:33:44:55:66"));
101 rann->SetDestSeqNumber (5);
102 rann->SetMetric (6);
103 rann->IncrementMetric (2);
104 NS_TEST_ASSERT_MSG_EQ (rann->GetMetric (), 8, "SetMetric works");
105 vector.AddInformationElement (rann);
106 }
107 {
108 Ptr<dot11s::IePreq> preq = Create<dot11s::IePreq> ();
109 preq->SetHopcount (0);
110 preq->SetTTL (1);
111 preq->SetPreqID (2);
112 preq->SetOriginatorAddress (Mac48Address ("11:22:33:44:55:66"));
113 preq->SetOriginatorSeqNumber (3);
114 preq->SetLifetime (4);
115 preq->AddDestinationAddressElement (false, false, Mac48Address ("11:11:11:11:11:11"), 5);
116 preq->AddDestinationAddressElement (false, false, Mac48Address ("22:22:22:22:22:22"), 6);
117 vector.AddInformationElement (preq);
118 }
119 {
120 Ptr<dot11s::IePrep> prep = Create<dot11s::IePrep> ();
121 prep->SetFlags (12);
122 prep->SetHopcount (11);
123 prep->SetTtl (10);
124 prep->SetDestinationAddress (Mac48Address ("11:22:33:44:55:66"));
125 prep->SetDestinationSeqNumber (123);
126 prep->SetLifetime (5000);
127 prep->SetMetric (4321);
128 prep->SetOriginatorAddress (Mac48Address ("33:00:22:00:11:00"));
129 prep->SetOriginatorSeqNumber (666);
130 vector.AddInformationElement (prep);
131 }
132 {
133 Ptr<dot11s::IePerr> perr = Create<dot11s::IePerr> ();
135 dest.destination = Mac48Address ("11:22:33:44:55:66");
136 dest.seqnum = 1;
137 perr->AddAddressUnit (dest);
138 dest.destination = Mac48Address ("10:20:30:40:50:60");
139 dest.seqnum = 2;
140 perr->AddAddressUnit (dest);
141 dest.destination = Mac48Address ("01:02:03:04:05:06");
142 dest.seqnum = 3;
143 perr->AddAddressUnit (dest);
144 vector.AddInformationElement (perr);
145 }
146 Ptr<Packet> packet = Create<Packet> ();
147 packet->AddHeader (vector);
148 uint32_t size = vector.GetSerializedSize ();
149 MeshInformationElementVector resultVector;
150 packet->RemoveHeader (resultVector, size);
151 NS_TEST_ASSERT_MSG_EQ (vector, resultVector, "Roundtrip serialization of all known information elements works");
152}
153
161{
162public:
163 MeshTestSuite ();
164};
165
167 : TestSuite ("devices-mesh", UNIT)
168{
169 AddTestCase (new MeshInformationElementVectorBist, TestCase::QUICK);
170}
171
173
an EUI-48 address
Definition: mac48-address.h:44
Introspection did not find any typical Config paths.
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
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:74
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
bool AddInformationElement(Ptr< WifiInformationElement > element)
add an IE, if maxSize has exceeded, returns false
#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:1245
static MeshTestSuite g_meshTestSuite
the test suite
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Built-in self test for MeshInformationElementVector and all IE.
void DoRun()
Implementation to actually run this TestCase.
structure of unreachable destination - address and sequence number
Definition: hwmp-protocol.h:85
Mac48Address destination
destination address
Definition: hwmp-protocol.h:86