X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacket.test.cc;h=937901c977e6d7ca475dc3acb355789cb10d3b7c;hb=46ce25973f087d30ca10eebdad6e3bfa7586ecc9;hp=7331b992235f1b68cd663c590e8684cfed062676;hpb=47368f306a577d1e46df69a7f729bd3893cbe5e7;p=senf.git diff --git a/Packets/Packet.test.cc b/Packets/Packet.test.cc index 7331b99..937901c 100644 --- a/Packets/Packet.test.cc +++ b/Packets/Packet.test.cc @@ -1,6 +1,8 @@ -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// $Id$ +// +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -26,14 +28,9 @@ // Custom includes #include -#include "PacketType.hh" -#include "PacketRegistry.hh" -#include "Packet.hh" -#include "ParseInt.hh" -#include "PacketParser.hh" -#include "DataPacket.hh" - -#include +#include "Packets.hh" + +#include "../Utils/auto_unit_test.hh" #include #define prefix_ @@ -52,23 +49,31 @@ 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; struct BarPacketParser : public senf::PacketParserBase { - SENF_PACKET_PARSER_INIT(BarPacketParser); +# include SENF_FIXED_PARSER() - typedef senf::Parse_UInt16 Parse_Type; - typedef senf::Parse_Int32 Parse_Length; - typedef senf::Parse_UInt16 Parse_Reserved; + SENF_PARSER_FIELD( type, senf::UInt16Parser ); + SENF_PARSER_FIELD( length, senf::Int32Parser ); + SENF_PARSER_FIELD( reserved, senf::UInt16Parser ); - Parse_Type type() const { return parse (i()); } - Parse_Length length() const { return parse (i()+2); } - Parse_Reserved reserved() const { return parse (i()+6); } + SENF_PARSER_INIT() { + reserved() << 0xA0A0u; + } + + SENF_PARSER_FINALIZE(BarPacketParser); }; struct BarPacketType @@ -82,31 +87,26 @@ 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" << "length: " << p->length() << "\n"; } static void finalize(packet p) { - if (p.next()) + if (p.next(senf::nothrow)) p->type() = senf::PacketRegistry::key(p.next()); else p->type() = -1; } - static registry_key_t nextPacketKey(packet p) { + static key_t nextPacketKey(packet p) { return p->type(); } }; typedef BarPacketType::packet BarPacket; namespace reg { - senf::PacketRegistry::RegistrationProxy registerFoo(1u); - senf::PacketRegistry::RegistrationProxy registerBar(2u); + senf::PacketRegistry::RegistrationProxy registerFoo(1u); + senf::PacketRegistry::RegistrationProxy registerBar(2u); } } @@ -118,10 +118,14 @@ BOOST_AUTO_UNIT_TEST(packet) BOOST_REQUIRE( packet ); BOOST_CHECK( packet.next() ); - BOOST_CHECK( ! packet.next().next() ); - BOOST_CHECK( ! packet.prev() ); + BOOST_CHECK( ! packet.next().next(senf::nothrow) ); + 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() ); @@ -157,50 +161,45 @@ BOOST_AUTO_UNIT_TEST(packet) packet.finalize(); BOOST_CHECK_EQUAL( packet.last().as()->type(), - BarPacket::type::parser::Parse_Type::value_type(-1) ); + BarPacket::type::parser::type_t::value_type(-1) ); packet.last().append(FooPacket::create()); packet.finalize(); - BOOST_CHECK_EQUAL( packet.next()->type(), 1u ); + BOOST_CHECK_EQUAL( packet.find()->type(), 1u ); BOOST_CHECK( packet.factory() == FooPacket::factory() ); - senf::Packet::byte data[] = { 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x81, 0x82, 0x83 }; + senf::PacketData::byte data[] = { 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x81, 0x82, 0x83 }; BarPacket::createAfter(packet,data); BOOST_REQUIRE( packet.next() ); BOOST_REQUIRE( packet.next().is() ); BOOST_CHECK( packet.last().is() ); - BOOST_CHECK_EQUAL( packet.last()->type(), 1u ); + BOOST_CHECK_EQUAL( packet.last().rfind()->type(), 1u ); BOOST_CHECK_EQUAL( packet.next().size(), 11u ); BOOST_REQUIRE( packet.next().next() ); BOOST_CHECK( packet.next().next().is() ); - BOOST_CHECK( ! packet.next().next().next() ); + BOOST_CHECK( ! packet.next().next().next(senf::nothrow) ); BOOST_CHECK_EQUAL( packet.next().next().data()[0], 0x81u ); - BOOST_CHECK( packet.first() == packet ); - BOOST_CHECK( packet.first(senf::nothrow) == packet ); - BOOST_CHECK( packet.last() == packet.last().prev() ); - BOOST_CHECK( packet.last(senf::nothrow) == packet.last().prev() ); - BOOST_CHECK( packet.findNext() == packet ); - BOOST_CHECK( packet.findNext(senf::nothrow) == packet ); - BOOST_CHECK( packet.last().findPrev() == packet.last() ); - BOOST_CHECK( packet.last().findPrev(senf::nothrow) == packet.last() ); + BOOST_CHECK( packet.first().find() == packet ); + BOOST_CHECK( packet.last().rfind() == packet.last().prev() ); + BOOST_CHECK( packet.find() == packet ); + BOOST_CHECK( packet.last().rfind() == packet.last() ); BOOST_CHECK( packet.next() == packet.next() ); - BOOST_CHECK( packet.next(senf::nothrow) == packet.next() ); - BOOST_CHECK( packet.last().prev() == packet ); - BOOST_CHECK( packet.last().prev(senf::nothrow) == packet ); + BOOST_CHECK( packet.last().prev().prev() == packet ); } BOOST_AUTO_UNIT_TEST(concretePacket) { - FooPacket::byte data[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + 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 ); + // No 'u' suffix here to check, that the disable_if works ... + BOOST_CHECK_EQUAL( FooPacket::create(10).size(), 10u ); + BOOST_CHECK_EQUAL( FooPacket::create(2u,senf::noinit).size(), 2u ); BOOST_CHECK_EQUAL( FooPacket::create(data).size(), 6u ); senf::Packet packet (FooPacket::create()); @@ -208,14 +207,15 @@ 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 ); + // No 'u' suffix here to check, that the disable_if works ... + BOOST_CHECK_EQUAL( FooPacket::createAfter(packet,10).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 ); @@ -224,7 +224,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 ); @@ -242,4 +242,5 @@ BOOST_AUTO_UNIT_TEST(concretePacket) // indent-tabs-mode: nil // ispell-local-dictionary: "american" // compile-command: "scons -u test" +// comment-column: 40 // End: