a couple more tests.
1.1 --- a/src/common/packet.cc Wed May 07 11:28:17 2008 -0700
1.2 +++ b/src/common/packet.cc Wed May 07 13:45:04 2008 -0700
1.3 @@ -567,6 +567,57 @@
1.4 : ATestTagBase () {}
1.5 };
1.6
1.7 +class ATestHeaderBase : public Header
1.8 +{
1.9 +public:
1.10 + ATestHeaderBase () : Header (), m_error (false) {}
1.11 + bool m_error;
1.12 +};
1.13 +
1.14 +template <int N>
1.15 +class ATestHeader : public ATestHeaderBase
1.16 +{
1.17 +public:
1.18 + static TypeId GetTypeId (void) {
1.19 + std::ostringstream oss;
1.20 + oss << "anon::ATestHeader<" << N << ">";
1.21 + static TypeId tid = TypeId (oss.str ().c_str ())
1.22 + .SetParent<Header> ()
1.23 + .AddConstructor<ATestHeader<N> > ()
1.24 + .HideFromDocumentation ()
1.25 + ;
1.26 + return tid;
1.27 + }
1.28 + virtual TypeId GetInstanceTypeId (void) const {
1.29 + return GetTypeId ();
1.30 + }
1.31 + virtual uint32_t GetSerializedSize (void) const {
1.32 + return N;
1.33 + }
1.34 + virtual void Serialize (Buffer::Iterator iter) const {
1.35 + for (uint32_t i = 0; i < N; ++i)
1.36 + {
1.37 + iter.WriteU8 (N);
1.38 + }
1.39 + }
1.40 + virtual uint32_t Deserialize (Buffer::Iterator iter) {
1.41 + for (uint32_t i = 0; i < N; ++i)
1.42 + {
1.43 + uint8_t v = iter.ReadU8 ();
1.44 + if (v != N)
1.45 + {
1.46 + m_error = true;
1.47 + }
1.48 + }
1.49 + return N;
1.50 + }
1.51 + virtual void Print (std::ostream &os) const {
1.52 + }
1.53 + ATestHeader ()
1.54 + : ATestHeaderBase () {}
1.55 +
1.56 +};
1.57 +
1.58 struct Expected
1.59 {
1.60 Expected (uint32_t n_, uint32_t start_, uint32_t end_)
1.61 @@ -702,6 +753,24 @@
1.62 E (1, 10, 100), E(2, 10, 100), E (4, 10, 100),
1.63 E (1, 100, 1000), E(2, 100, 1000), E (5, 100, 1000));
1.64
1.65 +
1.66 + // force caching a buffer of the right size.
1.67 + frag0 = Create<Packet> (1000);
1.68 + frag0->AddHeader (ATestHeader<10> ());
1.69 + frag0 = 0;
1.70 +
1.71 + p = Create<Packet> (1000);
1.72 + p->AddTag (ATestTag<20> ());
1.73 + CHECK (p, 1, E (20, 0, 1000));
1.74 + frag0 = p->CreateFragment (10, 90);
1.75 + CHECK (p, 1, E (20, 0, 1000));
1.76 + CHECK (frag0, 1, E (20, 0, 90));
1.77 + p = 0;
1.78 + frag0->AddHeader (ATestHeader<10> ());
1.79 + CHECK (frag0, 1, E (20, 10, 100));
1.80 +
1.81 +
1.82 +
1.83 return result;
1.84 }
1.85