-// $Id: TransportPacket.test.cc 389 2007-08-10 15:06:54Z tho $
+// $Id$
//
// Copyright (C) 2007
// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
// Custom includes
#include "TLVPacket.hh"
#include <senf/Packets.hh>
-#include <senf/Utils/hexdump.hh>
#include <boost/test/auto_unit_test.hpp>
#include <boost/test/test_tools.hpp>
using namespace senf;
+BOOST_AUTO_UNIT_TEST(tlvPacket_static)
+{
+ // check static values:
+ // number of bytes to allocate for a new TLVPacket should be 5
+ BOOST_CHECK_EQUAL( init_bytes<Parse_TLVPacket>::value, 5u );
+ BOOST_CHECK_EQUAL( TLVPacketType::initSize(), 5u );
+}
+
+BOOST_AUTO_UNIT_TEST(tlvPacket_parse_packet_with_simple_length)
+{
+ unsigned char data[] = {
+ 0x01, 0x23, 0x45, 0x67, // type
+ 0x0A, // first bit not set, length=10
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 // value (payload)
+ };
+
+ senf::TLVPacket tlvPacket (senf::TLVPacket::create(data));
+
+ BOOST_CHECK_EQUAL( tlvPacket->type(), 0x01234567u );
+ BOOST_CHECK_EQUAL( tlvPacket->length(), 0x0Au );
+
+ PacketData & tlvPacket_value (tlvPacket.next().data());
+ BOOST_CHECK_EQUAL( tlvPacket_value.size(), 0x0Au);
+ for (int i=0, j=tlvPacket_value.size(); i<j; i++)
+ BOOST_CHECK_EQUAL( tlvPacket_value[i], i );
+}
+
BOOST_AUTO_UNIT_TEST(tlvPacket_parse_packet_with_extended_length)
{
unsigned char data[] = {
0x01, 0x23, 0x45, 0x67, // type
0x81, // first and last bit set => one byte length following
0x0A, // length (10 bytes value)
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A // value (payload)
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 // value (payload)
};
- senf::TLVPacket p (senf::TLVPacket::create(data));
+ senf::TLVPacket tlvPacket (senf::TLVPacket::create(data));
-#include <iostream>
- p.dump(std::cout);
+ BOOST_CHECK_EQUAL( tlvPacket->type(), 0x01234567u );
+ BOOST_CHECK_EQUAL( tlvPacket->length(), 0x0Au );
- BOOST_CHECK_EQUAL( p->type(), 0x01234567u );
- BOOST_CHECK_EQUAL( p->length(), 0x0Au );
+ PacketData & tlvPacket_value (tlvPacket.next().data());
+ BOOST_CHECK_EQUAL( tlvPacket_value.size(), 0x0Au);
+ for (int i=0, j=tlvPacket_value.size(); i<j; i++)
+ BOOST_CHECK_EQUAL( tlvPacket_value[i], i );
+}
+
+BOOST_AUTO_UNIT_TEST(tlvPacket_create_packet_with_simple_length)
+{
+ std::string payload ("Hello, world!");
+ TLVPacket tlvPacket (TLVPacket::create());
+ tlvPacket->type() = 42u;
+ DataPacket::createAfter( tlvPacket, payload );
+ tlvPacket.finalize();
- senf::PacketData & p_value (p.next().data());
- senf::hexdump( p_value.begin(), p_value.end(), std::cout );
+ BOOST_CHECK_EQUAL( tlvPacket->type(), 42u);
+ BOOST_CHECK_EQUAL( tlvPacket->length(), 13u);
-// BOOST_CHECK_EQUAL( p_value.size(), 0x0Au);
+ PacketData & tlvPacket_value (tlvPacket.next().data());
+ BOOST_CHECK( equal( tlvPacket_value.begin(), tlvPacket_value.end(), payload.begin() ));
}
+
+BOOST_AUTO_UNIT_TEST(tlvPacket_create_packet_with_extended_length)
+{
+ std::string payload (
+ "This is a very long string with more than 127 characters to check if the TLV-Packet "
+ "works correctly with an extended length. That's all." );
+ TLVPacket tlvPacket (TLVPacket::create());
+ tlvPacket->type() = 42u;
+ DataPacket::createAfter( tlvPacket, payload );
+ tlvPacket.finalize();
+
+ BOOST_CHECK_EQUAL( tlvPacket->type(), 42u );
+ BOOST_CHECK_EQUAL( tlvPacket->length(), payload.size() );
+
+ PacketData & tlvPacket_value (tlvPacket.next().data());
+ BOOST_CHECK( equal( tlvPacket_value.begin(), tlvPacket_value.end(), payload.begin() ));
+
+ payload = std::string("This is a short string with less than 127 characters. That's all.");
+ DataPacket::createAfter( tlvPacket, payload );
+ tlvPacket.finalize();
+
+ BOOST_CHECK_EQUAL( tlvPacket->type(), 42u );
+ BOOST_CHECK_EQUAL( tlvPacket->length(), payload.size() );
+
+ PacketData & tlvPacket_value2 (tlvPacket.next().data());
+ BOOST_CHECK( equal( tlvPacket_value2.begin(), tlvPacket_value2.end(), payload.begin() ));
+}
+
+
///////////////////////////////cc.e////////////////////////////////////////
#undef prefix_