20 #include "ns3/packet.h"
43 static TypeId GetTypeId (
void) {
44 std::ostringstream oss;
45 oss <<
"anon::ATestTag<" << N <<
">";
49 .HideFromDocumentation ()
60 for (uint32_t i = 0; i < N; ++i)
66 for (uint32_t i = 0; i < N; ++i)
75 virtual void Print (std::ostream &os)
const {
93 static TypeId GetTypeId (
void) {
94 std::ostringstream oss;
95 oss <<
"anon::ATestHeader<" << N <<
">";
99 .HideFromDocumentation ()
110 for (uint32_t i = 0; i < N; ++i)
116 for (uint32_t i = 0; i < N; ++i)
118 uint8_t v = iter.
ReadU8 ();
126 virtual void Print (std::ostream &os)
const {
144 static TypeId GetTypeId (
void) {
145 std::ostringstream oss;
146 oss <<
"anon::ATestTrailer<" << N <<
">";
148 .SetParent<Header> ()
150 .HideFromDocumentation ()
162 for (uint32_t i = 0; i < N; ++i)
169 for (uint32_t i = 0; i < N; ++i)
171 uint8_t v = iter.
ReadU8 ();
179 virtual void Print (std::ostream &os)
const {
189 Expected (uint32_t n_, uint32_t start_, uint32_t end_)
190 : n (n_), start (start_), end (end_) {}
200 #define E(a,b,c) a,b,c
202 #define CHECK(p, n, ...) \
203 DoCheck (p, __FILE__, __LINE__, n, __VA_ARGS__)
209 virtual void DoRun (
void);
215 PacketTest::PacketTest ()
220 PacketTest::DoCheck (
Ptr<const Packet> p,
const char *file,
int line, uint32_t n, ...)
222 std::vector<struct Expected> expected;
225 for (uint32_t k = 0; k < n; ++k)
227 uint32_t N = va_arg (ap, uint32_t);
228 uint32_t start = va_arg (ap, uint32_t);
229 uint32_t end = va_arg (ap, uint32_t);
230 expected.push_back (Expected (N, start, end));
236 while (i.
HasNext () && j < expected.size ())
239 struct Expected e = expected[j];
240 std::ostringstream oss;
241 oss <<
"anon::ATestTag<" << e.n <<
">";
242 NS_TEST_EXPECT_MSG_EQ_INTERNAL (item.
GetTypeId ().
GetName (), oss.str (),
"trivial", file, line);
243 NS_TEST_EXPECT_MSG_EQ_INTERNAL (item.
GetStart (), e.start,
"trivial", file, line);
244 NS_TEST_EXPECT_MSG_EQ_INTERNAL (item.
GetEnd (), e.end,
"trivial", file, line);
246 NS_TEST_EXPECT_MSG_NE (tag, 0,
"trivial");
248 NS_TEST_EXPECT_MSG_EQ (tag->m_error,
false,
"trivial");
252 NS_TEST_EXPECT_MSG_EQ (i.
HasNext (),
false,
"Nothing left");
253 NS_TEST_EXPECT_MSG_EQ (j, expected.size (),
"Size match");
259 Ptr<Packet> pkt1 = Create<Packet> (
reinterpret_cast<const uint8_t*
> (
"hello"), 5);
260 Ptr<Packet> pkt2 = Create<Packet> (
reinterpret_cast<const uint8_t*
> (
" world"), 6);
265 NS_TEST_EXPECT_MSG_EQ (packet->
GetSize (), 11,
"trivial");
267 uint8_t *buf =
new uint8_t[packet->
GetSize ()];
270 std::string msg = std::string (reinterpret_cast<const char *>(buf),
274 NS_TEST_EXPECT_MSG_EQ (msg,
"hello world",
"trivial");
280 CHECK (p, 1, E (1, 0, 1000));
282 CHECK (copy, 1, E (1, 0, 1000));
285 CHECK (p, 2, E (1, 0, 1000), E (2, 0, 1000));
286 CHECK (copy, 1, E (1, 0, 1000));
292 CHECK (&c0, 1, E (1, 0, 1000));
293 CHECK (&c1, 1, E (1, 0, 1000));
294 CHECK (copy, 1, E (1, 0, 1000));
296 CHECK (&c0, 2, E (1, 0, 1000), E (10, 0, 1000));
297 CHECK (&c1, 1, E (1, 0, 1000));
298 CHECK (copy, 1, E (1, 0, 1000));
305 CHECK (frag0, 3, E (1, 0, 10), E (2, 0, 10), E (3, 0, 10));
307 CHECK (frag1, 3, E (1, 0, 90), E (2, 0, 90), E (4, 0, 90));
309 CHECK (frag2, 3, E (1, 0, 900), E (2, 0, 900), E (5, 0, 900));
312 CHECK (frag1, 6, E (1, 0, 90), E (2, 0, 90), E (4, 0, 90), E (1, 90, 990), E (2, 90, 990), E (5, 90, 990));
314 CHECK (frag0, 3, E (1, 0, 10), E (2, 0, 10), E (3, 0, 10));
317 E (1, 0, 10), E (2, 0, 10), E (3, 0, 10),
318 E (1, 10, 100), E (2, 10, 100), E (4, 10, 100),
319 E (1, 100, 1000), E (2, 100, 1000), E (5, 100, 1000));
323 frag0 = Create<Packet> (1000);
327 p = Create<Packet> (1000);
329 CHECK (p, 1, E (20, 0, 1000));
331 CHECK (p, 1, E (20, 0, 1000));
332 CHECK (frag0, 1, E (20, 0, 90));
335 CHECK (frag0, 1, E (20, 10, 100));
340 CHECK (tmp, 1, E (20, 0, 100));
342 CHECK (tmp, 1, E (20, 10, 110));
345 CHECK (tmp, 1, E (20, 0, 100));
347 CHECK (tmp, 1, E (20, 10, 110));
349 tmp = Create<Packet> (100);
351 CHECK (tmp, 1, E (20, 0, 100));
353 CHECK (tmp, 1, E (20, 0, 100));
356 CHECK (tmp, 1, E (20, 0, 100));
358 CHECK (tmp, 1, E (20, 0, 100));
366 CHECK (tmp, 1, E (20, 0, 156));
368 CHECK (tmp, 1, E (20, 0, 36));
371 CHECK (a, 1, E (20, 0, 36));
377 CHECK (tmp, 0, E (20, 0, 0));
382 CHECK (tmp, 1, E (20, 0, 1000));
384 CHECK (tmp, 0, E (0,0,0));
387 CHECK (a, 1, E (10, 0, 10));
389 CHECK (tmp, 1, E (10, 0, 10));
396 NS_TEST_EXPECT_MSG_EQ (p.
PeekPacketTag (a),
true,
"trivial");
399 NS_TEST_EXPECT_MSG_EQ (p.
PeekPacketTag (b),
true,
"trivial");
400 NS_TEST_EXPECT_MSG_EQ (p.
PeekPacketTag (a),
true,
"trivial");
402 NS_TEST_EXPECT_MSG_EQ (copy.PeekPacketTag (b),
true,
"trivial");
403 NS_TEST_EXPECT_MSG_EQ (copy.PeekPacketTag (a),
true,
"trivial");
405 NS_TEST_EXPECT_MSG_EQ (copy.PeekPacketTag (c),
false,
"trivial");
406 copy.AddPacketTag (c);
407 NS_TEST_EXPECT_MSG_EQ (copy.PeekPacketTag (c),
true,
"trivial");
408 NS_TEST_EXPECT_MSG_EQ (copy.PeekPacketTag (b),
true,
"trivial");
409 NS_TEST_EXPECT_MSG_EQ (copy.PeekPacketTag (a),
true,
"trivial");
410 NS_TEST_EXPECT_MSG_EQ (p.
PeekPacketTag (c),
false,
"trivial");
411 copy.RemovePacketTag (b);
412 NS_TEST_EXPECT_MSG_EQ (copy.PeekPacketTag (b),
false,
"trivial");
413 NS_TEST_EXPECT_MSG_EQ (p.
PeekPacketTag (b),
true,
"trivial");
415 NS_TEST_EXPECT_MSG_EQ (p.
PeekPacketTag (a),
false,
"trivial");
416 NS_TEST_EXPECT_MSG_EQ (copy.PeekPacketTag (a),
true,
"trivial");
417 NS_TEST_EXPECT_MSG_EQ (p.
PeekPacketTag (c),
false,
"trivial");
418 NS_TEST_EXPECT_MSG_EQ (copy.PeekPacketTag (c),
true,
"trivial");
420 NS_TEST_EXPECT_MSG_EQ (p.
PeekPacketTag (b),
false,
"trivial");
427 CHECK (tmp, 1, E (20, 0, 1000));
429 CHECK (tmp, 1, E (20, 2, 1002));
431 CHECK (tmp, 1, E (20, 1, 1001));
434 CHECK (tmp, 1, E (20, 1, 1001));
445 PacketTestSuite::PacketTestSuite ()
uint32_t RemoveHeader(Header &header)
virtual void DoRun(void)
Implementation to actually run this test case.
TypeId AddConstructor(void)
void AddPacketTag(const Tag &tag) const
uint32_t GetSize(void) const
virtual void Print(std::ostream &os) const
TAG_BUFFER_INLINE uint8_t ReadU8(void)
virtual uint32_t GetSerializedSize(void) const
iterator in a Buffer instance
Callback< ObjectBase * > GetConstructor(void) const
virtual void Serialize(TagBuffer buf) const
Ptr< Packet > CreateFragment(uint32_t start, uint32_t length) const
void AddAtEnd(Ptr< const Packet > packet)
uint8_t const * PeekData(void) const NS_DEPRECATED
bool PeekPacketTag(Tag &tag) const
void RemoveAllPacketTags(void)
void RemoveAtStart(uint32_t size)
virtual void Print(std::ostream &os) const
virtual uint32_t GetSerializedSize(void) const
ByteTagIterator GetByteTagIterator(void) const
uint32_t GetEnd(void) const
virtual TypeId GetInstanceTypeId(void) const
virtual void Deserialize(TagBuffer buf)
Ptr< Packet > Copy(void) const
Protocol trailer serialization and deserialization.
tag a set of bytes in a packet
void AddTrailer(const Trailer &trailer)
Iterator over the set of tags in a packet.
uint32_t RemoveTrailer(Trailer &trailer)
std::string GetName(void) const
TAG_BUFFER_INLINE void WriteU8(uint8_t v)
TypeId GetTypeId(void) const
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual test case to this test suite.
void GetTag(Tag &tag) const
uint32_t GetStart(void) const
void WriteU8(uint8_t data)
bool RemovePacketTag(Tag &tag)
virtual uint32_t Deserialize(Buffer::Iterator iter)
uint32_t CopyData(uint8_t *buffer, uint32_t size) const
virtual TypeId GetInstanceTypeId(void) const
virtual void Serialize(Buffer::Iterator iter) const
a unique identifier for an interface.
void AddHeader(const Header &header)
void AddByteTag(const Tag &tag) const