1 #include "ns3/buffer.h"
2 #include "ns3/random-variable-stream.h"
3 #include "ns3/double.h"
13 void EnsureWrittenBytes (
Buffer b, uint32_t n, uint8_t array[],
const char *file,
int line);
15 virtual void DoRun (
void);
20 BufferTest::BufferTest ()
25 BufferTest::EnsureWrittenBytes (
Buffer b, uint32_t n, uint8_t array[],
const char *file,
int line)
28 uint8_t *expected = array;
31 for (uint32_t j = 0; j < n; j++)
33 if (got[j] != expected[j])
40 std::ostringstream failure;
41 failure <<
"Buffer -- ";
42 failure <<
"expected: n=";
44 failure.setf (std::ios::hex, std::ios::basefield);
45 for (uint32_t j = 0; j < n; j++)
47 failure << (uint16_t)expected[j] <<
" ";
49 failure.setf (std::ios::dec, std::ios::basefield);
51 failure.setf (std::ios::hex, std::ios::basefield);
52 for (uint32_t j = 0; j < n; j++)
54 failure << (uint16_t)got[j] <<
" ";
57 NS_TEST_ASSERT_MSG_EQ_INTERNAL (
true,
false, failure.str (), file, line);
65 #define ENSURE_WRITTEN_BYTES(buffer, n, ...) \
67 uint8_t bytes[] = { __VA_ARGS__}; \
68 EnsureWrittenBytes (buffer, n, bytes, __FILE__, __LINE__); \
79 ENSURE_WRITTEN_BYTES (buffer, 1, 0x66);
82 ENSURE_WRITTEN_BYTES (buffer, 1, 0x67);
85 ENSURE_WRITTEN_BYTES (buffer, 3, 0x67, 0x65, 0x68);
87 ENSURE_WRITTEN_BYTES (buffer, 3, 0x63, 0x69, 0x68);
89 ENSURE_WRITTEN_BYTES (buffer, 6, 0x63, 0x69, 0xde, 0xad, 0xbe, 0xaf);
93 ENSURE_WRITTEN_BYTES (buffer, 8, 0, 0, 0x63, 0x69, 0xde, 0xad, 0xbe, 0xaf);
98 ENSURE_WRITTEN_BYTES (buffer, 10, 0, 0, 0x63, 0x69, 0xde, 0xad, 0xbe, 0xaf, 0, 0);
101 ENSURE_WRITTEN_BYTES (buffer, 7, 0x69, 0xde, 0xad, 0xbe, 0xaf, 0, 0);
104 ENSURE_WRITTEN_BYTES (buffer, 3, 0x69, 0xde, 0xad);
108 ENSURE_WRITTEN_BYTES (buffer, 4, 0xff, 0x69, 0xde, 0xad);
118 NS_TEST_ASSERT_MSG_EQ (i.
ReadNtohU16 (), 0xff00,
"Could not read expected value");
121 ENSURE_WRITTEN_BYTES (buffer, 5, 0xff, 0x69, 0xde, 0xad, 0xff);
123 ENSURE_WRITTEN_BYTES (o, 5, 0xff, 0x69, 0xde, 0xad, 0xff);
127 ENSURE_WRITTEN_BYTES (o, 6, 0xfe, 0xff, 0x69, 0xde, 0xad, 0xff);
132 ENSURE_WRITTEN_BYTES (o, 6, 0xfe, 0xff, 0x69, 0xde, 0xad, 0xff);
133 ENSURE_WRITTEN_BYTES (buffer, 7, 0xfd, 0xfd, 0xff, 0x69, 0xde, 0xad, 0xff);
140 ENSURE_WRITTEN_BYTES (buff64, 8, 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01);
142 NS_TEST_ASSERT_MSG_EQ (i.
ReadLsbtohU64 (), 0x0123456789abcdefllu,
"Could not read expected value");
145 ENSURE_WRITTEN_BYTES (buff64, 8, 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01);
147 NS_TEST_ASSERT_MSG_EQ (i.ReadLsbtohU64 (), 0x0123456789abcdefllu,
"Could not read expected value");
150 ENSURE_WRITTEN_BYTES (buff64, 8, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef);
152 NS_TEST_ASSERT_MSG_EQ (i.ReadNtohU64 (), 0x0123456789abcdefllu,
"could not read expected value");
162 ENSURE_WRITTEN_BYTES (buffer, 5, 0, 0, 0, 0, 0);
164 ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
167 ENSURE_WRITTEN_BYTES (buffer, 5, 0xff, 0, 0, 0, 0);
169 ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
172 ENSURE_WRITTEN_BYTES (buffer, 6, 0xde, 0xad, 0xbe, 0xaf, 0, 0);
174 ENSURE_WRITTEN_BYTES (buffer, 4, 0xbe, 0xaf, 0, 0);
178 i.WriteHtonU32 (0xdeadbeaf);
179 ENSURE_WRITTEN_BYTES (buffer, 8, 0xbe, 0xaf, 0, 0, 0xde, 0xad, 0xbe, 0xaf);
181 ENSURE_WRITTEN_BYTES (buffer, 3, 0xad, 0xbe, 0xaf);
184 ENSURE_WRITTEN_BYTES (buffer, 5, 0, 0, 0, 0, 0);
186 ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
192 ENSURE_WRITTEN_BYTES (buffer, 6, 0, 0, 0, 0, 0xab, 0xac);
194 ENSURE_WRITTEN_BYTES (buffer, 5, 0, 0, 0, 0, 0xab);
196 ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
206 ENSURE_WRITTEN_BYTES (buffer, 8, 0, 0, 0xac, 0xad, 0xae, 0xaf, 0xba, 0xbb);
212 ENSURE_WRITTEN_BYTES (buffer, 11, 0x30, 0x31, 0x32, 0, 0, 0xac, 0xad, 0xae, 0xaf, 0xba, 0xbb);
214 ENSURE_WRITTEN_BYTES (buffer, 2, 0x30, 0x31);
219 i.WriteHtonU16 (0xabcd);
222 ENSURE_WRITTEN_BYTES (buffer, 6, 0x21, 0, 0, 0, 0xab, 0xcd);
224 NS_TEST_ASSERT_MSG_EQ (buffer.
GetSize (), 0,
"Buffer size not zero");
227 buffer.AddAtStart (9);
234 buffer.AddAtStart (3);
235 buffer.RemoveAtEnd (8);
242 buffer.AddAtEnd (100);
249 const uint32_t actualSize = 72602;
250 const uint32_t chunkSize = 67624;
261 for (uint32_t i = 0; i < actualSize; i++)
267 iter.
Prev (chunkSize);
270 NS_TEST_EXPECT_MSG_EQ (memcmp (inputBuffer.
PeekData (), outputBuffer.
PeekData (), chunkSize), 0,
"memcp works");
279 ENSURE_WRITTEN_BYTES (buffer, 7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66);
281 ENSURE_WRITTEN_BYTES (frag0, 2, 0x00, 0x00);
283 ENSURE_WRITTEN_BYTES (frag1, 5, 0x00, 0x00, 0x00, 0x00, 0x66);
285 ENSURE_WRITTEN_BYTES (buffer, 7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66);
286 ENSURE_WRITTEN_BYTES (frag0, 7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66);
289 buffer.AddAtStart (2);
298 ENSURE_WRITTEN_BYTES (buffer, 9, 0x1, 0x2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3, 0x4);
302 i.
Write (buffer.Begin (), buffer.End ());
303 ENSURE_WRITTEN_BYTES (other, 9, 0x1, 0x2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3, 0x4);
306 std::string ct (
"This is the next content of the buffer.");
308 buffer.AddAtStart (ct.size ());
310 i.Write ((
const uint8_t*)ct.c_str (), ct.size ());
311 uint32_t sizeBuffer = buffer.GetSize ();
312 NS_TEST_ASSERT_MSG_EQ (sizeBuffer, ct.size(),
"Buffer bad size");
313 uint8_t
const* evilBuffer = buffer.PeekData ();
314 NS_TEST_ASSERT_MSG_NE( evilBuffer, 0,
"Buffer PeekData failed");
315 uint8_t *cBuf = (uint8_t*) malloc ( sizeBuffer );
316 uint32_t copyLen = buffer.CopyData (cBuf, sizeBuffer);
317 NS_TEST_ASSERT_MSG_EQ (copyLen, sizeBuffer,
"CopyData return bad size");
318 for (uint8_t i=0; i < sizeBuffer ; i++ )
320 NS_TEST_ASSERT_MSG_EQ ( cBuf [i], *(((
const uint8_t*)ct.c_str ()) + i),
"Bad buffer copied data");
321 NS_TEST_ASSERT_MSG_EQ ( evilBuffer [i], cBuf [i] ,
"Bad buffer peeked");
332 BufferTestSuite::BufferTestSuite ()
void WriteHtonU64(uint64_t data)
void RemoveAtEnd(uint32_t end)
void RemoveAtStart(uint32_t start)
automatically resized byte buffer
iterator in a Buffer instance
void WriteU16(uint16_t data)
void WriteHtonU16(uint16_t data)
Buffer::Iterator End(void) const
uint8_t const * PeekData(void) const
void WriteU64(uint64_t data)
Buffer::Iterator Begin(void) const
virtual void DoRun(void)
Implementation to actually run this test case.
void AddTestCase(TestCase *testCase) NS_DEPRECATED
Add an individual test case to this test suite.
void WriteHtonU32(uint32_t data)
uint32_t GetSize(void) const
Buffer CreateFragment(uint32_t start, uint32_t length) const
bool AddAtEnd(uint32_t end)
void WriteU8(uint8_t data)
void WriteHtolsbU64(uint64_t data)
void Write(uint8_t const *buffer, uint32_t size)
bool AddAtStart(uint32_t start)
uint64_t ReadLsbtohU64(void)
uint16_t ReadNtohU16(void)
Hold an floating point type.
void SetAttribute(std::string name, const AttributeValue &value)