Packets/80221Bundle: added messageId field to MIHPacket
[senf.git] / Packets / 80221Bundle / MIHPacket.test.cc
index 80a28c1..91c6dc5 100644 (file)
 //#include "MIHPacket.test.hh"
 //#include "MIHPacket.test.ih"
 
-#include "../../Utils/auto_unit_test.hh"
-#include <boost/test/test_tools.hpp>
-
+// Custom includes
 #include "MIHPacket.hh"
 
-using namespace senf;
+#include "../../Utils/auto_unit_test.hh"
+#include <boost/test/test_tools.hpp>
 
 #define prefix_
 ///////////////////////////////cc.p////////////////////////////////////////
+using namespace senf;
+
+BOOST_AUTO_UNIT_TEST(MIHPacket_msgId)
+{
+    MIHPacket mihPacket (MIHPacket::create());
+    mihPacket->sid() = 4;
+    mihPacket->opcode() = 3;
+    mihPacket->aid() = 42;
+    BOOST_CHECK_EQUAL( mihPacket->messageId(), 0x4c2a );        
+}
 
 BOOST_AUTO_UNIT_TEST(MIHPacket_create_string)
 {
@@ -45,13 +54,13 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_string)
     mihPacket->src_mihfId().setString( "senf@berlios.de");
     mihPacket->dst_mihfId().setString( "test");
     mihPacket.finalizeThis();
-    
-    unsigned char data[] = { 
+
+    unsigned char data[] = {
             // MIH header
             0x10, 0x54, 0x00, 0x00, 0x00, 0x15, 0x00, 0x17,
             // source MIHF_ID TLV:
             0x01, 0x0f, // type, length
-            0x73, 0x65, 0x6e, 0x66, 0x40, 0x62, 0x65, 0x72, 0x6c, 
+            0x73, 0x65, 0x6e, 0x66, 0x40, 0x62, 0x65, 0x72, 0x6c,
             0x69, 0x6f, 0x73, 0x2e, 0x64, 0x65,  // value
             // destination MIHF_ID TLV:
             0x02, 0x04, 0x74, 0x65, 0x73, 0x74
@@ -59,16 +68,22 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_string)
     BOOST_CHECK(equal( mihPacket.data().begin(), mihPacket.data().end(), data ));
     BOOST_CHECK_EQUAL( mihPacket->src_mihfId().asString(), "senf@berlios.de");
     BOOST_CHECK_EQUAL( mihPacket->dst_mihfId().asString(), "test");
-    
+
+    // the maximum length of a MIHF_ID is 253 octets
+    BOOST_CHECK_THROW( mihPacket->dst_mihfId().setString( std::string(254, 'x')), std::length_error);
+
     // now expand a MIHF_ID
     mihPacket->dst_mihfId().maxLengthValue(253);
     mihPacket->dst_mihfId().setString( std::string(200, 'x'));
     mihPacket.finalizeThis();
-    
+
     BOOST_CHECK_EQUAL( mihPacket.size(), unsigned(8 + 17 + 203));
     BOOST_CHECK_EQUAL( mihPacket->payloadLength(), 17 + 203);
     BOOST_CHECK_EQUAL( mihPacket->dst_mihfId().length(), 200u);
     BOOST_CHECK_EQUAL( senf::bytes(mihPacket->dst_mihfId()), 203u);
+
+    std::ostringstream oss (std::ostringstream::out);
+    SENF_CHECK_NO_THROW( mihPacket.dump( oss));
 }
 
 
@@ -81,8 +96,8 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_mac)
     mihPacket->src_mihfId().setMACAddress( MACAddress::from_string("01:02:03:04:05:06"));
     mihPacket->dst_mihfId().setMACAddress( MACAddress::from_string("07:08:09:0a:0b:0c"));
     mihPacket.finalizeThis();
-    
-    unsigned char data[] = { 
+
+    unsigned char data[] = {
             // MIH header
             0x10, 0x54, 0x00, 0x00, 0x00, 0x15, 0x00, 0x1c,
             // source MIHF_ID TLV:
@@ -93,11 +108,11 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_mac)
             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 ));
-    BOOST_CHECK_EQUAL( 
-            mihPacket->src_mihfId().asMACAddress(), 
+    BOOST_CHECK_EQUAL(
+            mihPacket->src_mihfId().asMACAddress(),
             MACAddress::from_string("01:02:03:04:05:06"));
-    BOOST_CHECK_EQUAL( 
-            mihPacket->dst_mihfId().asMACAddress(), 
+    BOOST_CHECK_EQUAL(
+            mihPacket->dst_mihfId().asMACAddress(),
             MACAddress::from_string("07:08:09:0a:0b:0c"));
 }
 
@@ -111,8 +126,8 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_inet4)
     mihPacket->src_mihfId().setINet4Address( INet4Address::from_string("128.129.130.131"));
     mihPacket->dst_mihfId().setINet4Address( INet4Address::from_string("132.133.134.135"));
     mihPacket.finalizeThis();
-    
-    unsigned char data[] = { 
+
+    unsigned char data[] = {
             // MIH header
             0x10, 0x54, 0x00, 0x00, 0x00, 0x15, 0x00, 0x14,
             // source MIHF_ID TLV:
@@ -123,11 +138,11 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_inet4)
             0x5c, 0x84, 0x5c, 0x85, 0x5c, 0x86, 0x5c, 0x87  // value (nai-encoded)
     };
     BOOST_CHECK(equal( mihPacket.data().begin(), mihPacket.data().end(), data ));
-    BOOST_CHECK_EQUAL( 
-            mihPacket->src_mihfId().asINet4Address(), 
+    BOOST_CHECK_EQUAL(
+            mihPacket->src_mihfId().asINet4Address(),
             INet4Address::from_string("128.129.130.131"));
-    BOOST_CHECK_EQUAL( 
-            mihPacket->dst_mihfId().asINet4Address(), 
+    BOOST_CHECK_EQUAL(
+            mihPacket->dst_mihfId().asINet4Address(),
             INet4Address::from_string("132.133.134.135"));
 }
 
@@ -141,8 +156,8 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_inet6)
     mihPacket->src_mihfId().setINet6Address( INet6Address::from_string("::ffff:1.2.3.4"));
     mihPacket->dst_mihfId().setINet6Address( INet6Address::from_string("::ffff:5.6.7.8"));
     mihPacket.finalizeThis();
-    
-    unsigned char data[] = { 
+
+    unsigned char data[] = {
             // MIH header
             0x10, 0x54, 0x00, 0x00, 0x00, 0x15, 0x00, 0x44,
             // source MIHF_ID TLV:
@@ -161,25 +176,25 @@ BOOST_AUTO_UNIT_TEST(MIHPacket_create_inet6)
             0x5c, 0x05, 0x5c, 0x06, 0x5c, 0x07, 0x5c, 0x08
     };
     BOOST_CHECK(equal( mihPacket.data().begin(), mihPacket.data().end(), data ));
-    BOOST_CHECK_EQUAL( 
-            mihPacket->src_mihfId().asINet6Address(), 
+    BOOST_CHECK_EQUAL(
+            mihPacket->src_mihfId().asINet6Address(),
             INet6Address::from_string("::ffff:1.2.3.4"));
-    BOOST_CHECK_EQUAL( 
-            mihPacket->dst_mihfId().asINet6Address(), 
+    BOOST_CHECK_EQUAL(
+            mihPacket->dst_mihfId().asINet6Address(),
             INet6Address::from_string("::ffff:5.6.7.8") );
 }
 
 
 BOOST_AUTO_UNIT_TEST(MIHPayload_parse)
 {
-    unsigned char data[] = { 
+    unsigned char data[] = {
             // MIH header
-            0x10, 0x54, 0x00, 0x00, 0x00, 0x15, 
+            0x10, 0x54, 0x00, 0x00, 0x00, 0x15,
             // variable payload length:
             0x00, 0x2a,
             // source MIHF_ID TLV:
             0x01, 0x0f, // type, length
-            0x73, 0x65, 0x6e, 0x66, 0x40, 0x62, 0x65, 0x72, 0x6c, 
+            0x73, 0x65, 0x6e, 0x66, 0x40, 0x62, 0x65, 0x72, 0x6c,
             0x69, 0x6f, 0x73, 0x2e, 0x64, 0x65,  // value ("senf@berlios.de")
             // destination MIHF_ID TLV:
             0x02, 0x04, 0x74, 0x65, 0x73, 0x74,  // type, length, value ("test")
@@ -193,25 +208,25 @@ BOOST_AUTO_UNIT_TEST(MIHPayload_parse)
             0x05, // first bit not set, length=5
             0x1a, 0x2b, 0x3c, 0x4d, 0x5e // value
     };
-    
+
     MIHPacket mihPacket (MIHPacket::create(data));
     BOOST_CHECK_EQUAL( mihPacket->payloadLength(), 42u);
-    
+
     BOOST_REQUIRE( mihPacket.next().is<MIHPayloadPacket>() );
     MIHPayloadPacket mihPayload (mihPacket.next().as<MIHPayloadPacket>());
 
     BOOST_CHECK_EQUAL( mihPayload->tlv_list().size(), 2u);
     MIHPayloadPacketParser::tlv_list_t::container tlv_list_container (mihPayload->tlv_list());
-    
+
     GenericTLVPacket::Parser tlv1 = *tlv_list_container.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);            
+    BOOST_CHECK_EQUAL( tlv2.value().size(), 0x05);
 }
 
 
@@ -222,35 +237,35 @@ BOOST_AUTO_UNIT_TEST(MIHPayload_create)
     mihPacket->transactionId() = 21;
     mihPacket->src_mihfId().setString( "senf@berlios.de");
     mihPacket->dst_mihfId().setString( "test");
-    
+
     MIHPayloadPacket mihPayload (MIHPayloadPacket::createAfter(mihPacket));
-    
-    unsigned char tlv1_value[] = { 
+
+    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.parser());
+    tlv2.finalizeThis();
+    mihPayload->tlv_list().push_front( tlv2);
 
-    unsigned char tlv2_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.parser());
-    
+    mihPayload->tlv_list().push_front( tlv1);
+
     mihPacket.finalizeAll();
-    
-    unsigned char data[] = { 
+
+    unsigned char data[] = {
             // MIH header
-            0x10, 0x54, 0x00, 0x00, 0x00, 0x15, 
+            0x10, 0x54, 0x00, 0x00, 0x00, 0x15,
             // variable payload length:
             0x00, 0x2a,
             // source MIHF_ID TLV:
             0x01, 0x0f, // type, length
-            0x73, 0x65, 0x6e, 0x66, 0x40, 0x62, 0x65, 0x72, 0x6c, 
+            0x73, 0x65, 0x6e, 0x66, 0x40, 0x62, 0x65, 0x72, 0x6c,
             0x69, 0x6f, 0x73, 0x2e, 0x64, 0x65,  // value ("senf@berlios.de")
             // destination MIHF_ID TLV:
             0x02, 0x04, 0x74, 0x65, 0x73, 0x74,  // type, length, value ("test")
@@ -264,7 +279,7 @@ BOOST_AUTO_UNIT_TEST(MIHPayload_create)
             0x05, // first bit not set, length=5
             0x1a, 0x2b, 0x3c, 0x4d, 0x5e // value
     };
-    
+
     BOOST_CHECK(equal( mihPacket.data().begin(), mihPacket.data().end(), data ));
 }