X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacket.test.cc;h=81e1b4ba3dec8a60667487978a16430c1029c5f1;hb=e57e1ec99a16261d1f436d1ea42f60dda6aae5cc;hp=e79f172932839ca0223a7e7bb5a207dcc4fc403a;hpb=03e6d8f7c983e22cdd021176a3190b7d34a2d8c5;p=senf.git diff --git a/Packets/Packet.test.cc b/Packets/Packet.test.cc index e79f172..81e1b4b 100644 --- a/Packets/Packet.test.cc +++ b/Packets/Packet.test.cc @@ -49,9 +49,15 @@ namespace { using senf::PacketTypeMixin::nextPacketRange; using senf::PacketTypeMixin::initSize; using senf::PacketTypeMixin::init; - typedef senf::PacketInterpreter interpreter; - static interpreter::size_type initSize() + static size_type initSize() { return 4u; } + + // We need to implement initHeadSize() to force the mixin to switch into 'fixed-size' + // mode. Otherwise, mixin::nextPacketRange() would query the parser for it's size to find + // the header size. Since the parser is VoidPacketParser, the header size would therefore be + // 0 + static size_type initHeadSize() + { return initSize(); } }; typedef senf::ConcretePacket FooPacket; @@ -63,6 +69,10 @@ namespace { SENF_PARSER_FIELD( length, senf::Int32Parser ); SENF_PARSER_FIELD( reserved, senf::UInt16Parser ); + SENF_PARSER_INIT() { + reserved() << 0xA0A0u; + } + SENF_PARSER_FINALIZE(BarPacketParser); }; @@ -77,11 +87,6 @@ namespace { using mixin::nextPacketType; using mixin::initSize; using mixin::init; - static size_type initSize() - { return 8u; } - static void init(packet p) { - p->reserved() = 0xA0A0u; - } static void dump(packet p, std::ostream & os) { os << "BarPacket:\n" << "type: " << p->type() << "\n" @@ -93,7 +98,7 @@ namespace { else p->type() = -1; } - static registry_key_t nextPacketKey(packet p) { + static key_t nextPacketKey(packet p) { return p->type(); } }; @@ -117,6 +122,10 @@ BOOST_AUTO_UNIT_TEST(packet) BOOST_CHECK( ! packet.prev(senf::nothrow) ); BOOST_CHECK( packet.next().prev() == packet ); BOOST_CHECK( packet.next() != packet ); + BOOST_CHECK_EQUAL( std::distance(packet.data().begin(), packet.next().data().begin()), 4 ); + BOOST_CHECK_EQUAL( std::distance(packet.data().begin(), packet.data().end()), 12 ); + BOOST_CHECK_EQUAL( std::distance(packet.next().data().begin(), packet.next().data().end()), 8 ); + BOOST_CHECK( packet.data().end() == packet.next().data().end() ); BOOST_CHECK_EQUAL( packet.size(), 12u ); BOOST_CHECK_EQUAL( packet.next().size(), 8u ); BOOST_CHECK( packet.is() ); @@ -186,10 +195,10 @@ BOOST_AUTO_UNIT_TEST(concretePacket) senf::PacketData::byte data[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; BOOST_CHECK_EQUAL( FooPacket::create().size(), 4u ); - BOOST_CHECK_EQUAL( FooPacket::create(FooPacket::noinit).size(), 0u ); + BOOST_CHECK_EQUAL( FooPacket::create(senf::noinit).size(), 0u ); BOOST_CHECK_THROW( FooPacket::create(2u), senf::TruncatedPacketException ); BOOST_CHECK_EQUAL( FooPacket::create(10u).size(), 10u ); - BOOST_CHECK_EQUAL( FooPacket::create(2u,FooPacket::noinit).size(), 2u ); + BOOST_CHECK_EQUAL( FooPacket::create(2u,senf::noinit).size(), 2u ); BOOST_CHECK_EQUAL( FooPacket::create(data).size(), 6u ); senf::Packet packet (FooPacket::create()); @@ -197,14 +206,14 @@ BOOST_AUTO_UNIT_TEST(concretePacket) BOOST_CHECK_EQUAL( FooPacket::createAfter(packet).size(), 4u ); BOOST_CHECK_EQUAL( packet.size(), 8u ); - BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,FooPacket::noinit).size(), 0u ); + BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,senf::noinit).size(), 0u ); BOOST_CHECK_EQUAL( packet.size(), 4u ); BOOST_CHECK_THROW( FooPacket::createAfter(packet,2u), senf::TruncatedPacketException ); BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,10u).size(), 10u ); BOOST_CHECK_EQUAL( packet.size(), 14u ); - BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,2u,FooPacket::noinit).size(), 2u ); + BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,2u,senf::noinit).size(), 2u ); BOOST_CHECK_EQUAL( packet.size(), 6u ); BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,data).size(), 6u ); @@ -213,7 +222,7 @@ BOOST_AUTO_UNIT_TEST(concretePacket) BOOST_CHECK_EQUAL( FooPacket::createBefore(packet).size(), 14u ); BOOST_CHECK_EQUAL( packet.size(), 10u ); - BOOST_CHECK_EQUAL( FooPacket::createBefore(packet,FooPacket::noinit).size(), 10u ); + BOOST_CHECK_EQUAL( FooPacket::createBefore(packet,senf::noinit).size(), 10u ); BOOST_CHECK_EQUAL( packet.size(), 10u ); BOOST_CHECK( packet.clone() != packet );