Packets/GenericTLV: added some documentation
[senf.git] / senf / Packets / 80221Bundle / MIHPacket.test.cc
index e9a040e..64d2ff1 100644 (file)
@@ -28,8 +28,9 @@
 
 // Custom includes
 #include "MIHPacket.hh"
+#include <senf/Packets/DefaultBundle/EthernetPacket.hh>
 
-#include "../../Utils/auto_unit_test.hh"
+#include <senf/Utils/auto_unit_test.hh>
 #include <boost/test/test_tools.hpp>
 
 #define prefix_
@@ -56,6 +57,16 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_msgId)
     BOOST_CHECK_EQUAL( mihPacket->messageId(), 0x4c2a );        
 }
 
+BOOST_AUTO_UNIT_TEST(MIHPacket_create_eth)
+{
+    EthernetPacket eth (EthernetPacket::create());
+    MIHPacket mihPacket (MIHPacket::createAfter(eth));
+    eth.finalizeAll();
+    BOOST_CHECK_EQUAL( eth->type_length(), 0x8917);
+    std::ostringstream oss (std::ostringstream::out);
+    SENF_CHECK_NO_THROW( eth.dump( oss));
+}
+
 BOOST_AUTO_UNIT_TEST(MIHPacket_create_string)
 {
     MIHPacket mihPacket (MIHPacket::create());
@@ -118,7 +129,8 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_mac)
             0x02, 0x0c,  // type, length
             0x5c, 0x07, 0x5c, 0x08, 0x5c, 0x09, 0x5c, 0x0a, 0x5c, 0x0b, 0x5c, 0x0c  // value (nai-encoded)
     };
-    BOOST_CHECK(equal( mihPacket.data().begin(), mihPacket.data().end(), data ));
+    SENF_CHECK_EQUAL_COLLECTIONS( data, data+sizeof(data),
+            mihPacket.data().begin(), mihPacket.data().end() );
     BOOST_CHECK_EQUAL(
             mihPacket->src_mihfId().asMACAddress(),
             MACAddress::from_string("01:02:03:04:05:06"));
@@ -148,7 +160,8 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_inet4)
             0x02, 0x08, // type, length
             0x5c, 0x84, 0x5c, 0x85, 0x5c, 0x86, 0x5c, 0x87  // value (nai-encoded)
     };
-    BOOST_CHECK(equal( mihPacket.data().begin(), mihPacket.data().end(), data ));
+    SENF_CHECK_EQUAL_COLLECTIONS( data, data+sizeof(data),
+            mihPacket.data().begin(), mihPacket.data().end() );
     BOOST_CHECK_EQUAL(
             mihPacket->src_mihfId().asINet4Address(),
             INet4Address::from_string("128.129.130.131"));
@@ -186,7 +199,8 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_inet6)
             0x5c, 0x00, 0x5c, 0x00, 0x5c, 0xff, 0x5c, 0xff,
             0x5c, 0x05, 0x5c, 0x06, 0x5c, 0x07, 0x5c, 0x08
     };
-    BOOST_CHECK(equal( mihPacket.data().begin(), mihPacket.data().end(), data ));
+    SENF_CHECK_EQUAL_COLLECTIONS( data, data+sizeof(data),
+            mihPacket.data().begin(), mihPacket.data().end() );
     BOOST_CHECK_EQUAL(
             mihPacket->src_mihfId().asINet6Address(),
             INet6Address::from_string("::ffff:1.2.3.4"));
@@ -202,7 +216,7 @@ BOOST_AUTO_UNIT_TEST(MIHPayload_parse)
             // MIH header
             0x10, 0x54, 0x00, 0x00, 0x00, 0x15,
             // variable payload length:
-            0x00, 0x2a,
+            0x00, 0x29,
             // source MIHF_ID TLV:
             0x01, 0x0f, // type, length
             0x73, 0x65, 0x6e, 0x66, 0x40, 0x62, 0x65, 0x72, 0x6c,
@@ -215,29 +229,33 @@ BOOST_AUTO_UNIT_TEST(MIHPayload_parse)
             0x0a, // first bit not set, length=10
             0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, // value
             // second test tlv
-            0x43, // type
-            0x05, // first bit not set, length=5
-            0x1a, 0x2b, 0x3c, 0x4d, 0x5e // value
+            0x0c, // type
+            0x04, // first bit not set, length=4
+            0x1a, 0x2b, 0x3c, 0x4d // value
     };
 
     MIHPacket mihPacket (MIHPacket::create(data));
-    BOOST_CHECK_EQUAL( mihPacket->payloadLength(), 42u);
+    BOOST_CHECK_EQUAL( mihPacket->payloadLength(), 41u);
 
-    BOOST_REQUIRE( mihPacket.next().is<MIHPayloadPacket>() );
-    MIHPayloadPacket mihPayload (mihPacket.next().as<MIHPayloadPacket>());
+    BOOST_REQUIRE( mihPacket.next().is<MIHGenericPayloadPacket>() );
+    MIHGenericPayloadPacket mihPayload (mihPacket.next().as<MIHGenericPayloadPacket>());
 
-    BOOST_CHECK_EQUAL( mihPayload->tlv_list().size(), 2u);
-    MIHPayloadPacketParser::tlv_list_t::container tlv_list_container (mihPayload->tlv_list());
+    BOOST_CHECK_EQUAL( mihPayload->tlvList().size(), 2u);
+    MIHGenericPayloadPacket::Parser::tlvList_t::container tlvListContainer (
+            mihPayload->tlvList());
 
-    GenericTLVPacket::Parser tlv1 = *tlv_list_container.begin();
+    MIHGenericTLVParser tlv1 = *tlvListContainer.begin();
     BOOST_CHECK_EQUAL( tlv1.type(), 0x42);
     BOOST_CHECK_EQUAL( tlv1.length(), 0x0au);
     BOOST_CHECK_EQUAL( tlv1.value().size(), 0x0a);
 
-    GenericTLVPacket::Parser tlv2 = *boost::next(tlv_list_container.begin());
-    BOOST_CHECK_EQUAL( tlv2.type(), 0x43);
-    BOOST_CHECK_EQUAL( tlv2.length(), 0x05u);
-    BOOST_CHECK_EQUAL( tlv2.value().size(), 0x05);
+    MIHGenericTLVParser tlv2 = *boost::next(tlvListContainer.begin());
+    BOOST_CHECK_EQUAL( tlv2.type(), 0x0c);
+    BOOST_CHECK_EQUAL( tlv2.length(), 0x04u);
+    BOOST_CHECK_EQUAL( tlv2.value().size(), 0x04);
+    
+    std::ostringstream oss (std::ostringstream::out);
+    SENF_CHECK_NO_THROW( mihPayload.dump( oss));
 }
 
 
@@ -249,23 +267,21 @@ BOOST_AUTO_UNIT_TEST(MIHPayload_create)
     mihPacket->src_mihfId().setString( "senf@berlios.de");
     mihPacket->dst_mihfId().setString( "test");
 
-    MIHPayloadPacket mihPayload (MIHPayloadPacket::createAfter(mihPacket));
-
+    MIHGenericPayloadPacket mihPayload (MIHGenericPayloadPacket::createAfter(mihPacket));
+    MIHGenericPayloadPacket::Parser::tlvList_t::container tlvListContainer (
+            mihPayload->tlvList() );
+    
     unsigned char tlv1_value[] = {
-            0x1a, 0x2b, 0x3c, 0x4d, 0x5e };
-    GenericTLVPacket tlv2 = (GenericTLVPacket::create());
-    tlv2->type() = 0x43;
-    tlv2->value( tlv1_value);
-    tlv2.finalizeThis();
-    mihPayload->tlv_list().push_front( tlv2);
+           0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 };
+    MIHGenericTLVParser tlv1 ( tlvListContainer.push_back_space());
+    tlv1.type() = 0x42;
+    tlv1.value( tlv1_value);
 
     unsigned char tlv2_value[] = {
-           0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 };
-    GenericTLVPacket tlv1 (GenericTLVPacket::create());
-    tlv1->type() = 0x42;
-    tlv1->value( tlv2_value);
-    tlv1.finalizeThis();
-    mihPayload->tlv_list().push_front( tlv1);
+            0x1a, 0x2b, 0x3c, 0x4d };
+    MIHGenericTLVParser tlv2 ( tlvListContainer.push_back_space());
+    tlv2.type() = 0x0c;
+    tlv2.value( tlv2_value);
 
     mihPacket.finalizeAll();
 
@@ -273,7 +289,7 @@ BOOST_AUTO_UNIT_TEST(MIHPayload_create)
             // MIH header
             0x10, 0x54, 0x00, 0x00, 0x00, 0x15,
             // variable payload length:
-            0x00, 0x2a,
+            0x00, 0x29,
             // source MIHF_ID TLV:
             0x01, 0x0f, // type, length
             0x73, 0x65, 0x6e, 0x66, 0x40, 0x62, 0x65, 0x72, 0x6c,
@@ -286,12 +302,12 @@ BOOST_AUTO_UNIT_TEST(MIHPayload_create)
             0x0a, // first bit not set, length=10
             0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, // value
             // second test tlv
-            0x43, // type
-            0x05, // first bit not set, length=5
-            0x1a, 0x2b, 0x3c, 0x4d, 0x5e // value
+            0x0c, // type
+            0x04, // first bit not set, length=4
+            0x1a, 0x2b, 0x3c, 0x4d // value
     };
-
-    BOOST_CHECK(equal( mihPacket.data().begin(), mihPacket.data().end(), data ));
+    SENF_CHECK_EQUAL_COLLECTIONS( data, data+sizeof(data),
+            mihPacket.data().begin(), mihPacket.data().end() );    
 }