PPI: Fix senf::ppi::init() event hook scheduling
[senf.git] / Packets / MPEGDVBBundle / TransportPacket.test.cc
index 0fee6b2..50b2377 100644 (file)
@@ -20,7 +20,8 @@
 // Free Software Foundation, Inc.,
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
-// Unit tests
+/** \file
+    \brief TransportPacket unit tests */
 
 //#include "TransportPacket.test.hh"
 //#include "TransportPacket.test.ih"
 
 using namespace senf;
 
-BOOST_AUTO_UNIT_TEST(transportPacket_packet)
+BOOST_AUTO_UNIT_TEST(transportPacket_parse)
 {
     // TransportStream-Packet containing a ULE encoded IPv6 ping packet,
     // captured with dvbsnoop
-    unsigned char data[] = { 
-            0x47, 0x41, 0x0f, 0x1e, 0x00, 0x80, 0x4c, 0x86,
-            0xdd, 0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x11, 
-            0x40, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
-            0x00, 0x48, 0x7c, 0x7e, 0xff, 0xfe, 0x23, 0x68,
-            0xaf, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
-            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
-            0x04 ,0x02, 0x8c, 0x02, 0x8c, 0x00, 0x20, 0x58,
-            0xe1, 0x11, 0x05, 0x12, 0x67, 0x06, 0x2f, 0x01,
-            0x00, 0x20, 0x01, 0x06, 0x38, 0x04, 0x09, 0x10,
-            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11,
-            0x00, 0x1d, 0xc4, 0xe8, 0xc1, 0xff, 0xff, 0xff,
+    unsigned char data[] = {
+            // Transport Packet Header
+            0x47, 0x41, 0x0f, 0x1e,
+            // Payload Pointer
+            0x00,
+            // SNDU Header
+            0x80, 0x4c, 0x86, 0xdd,
+            // IPv6 Packet
+            0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x11, 0x40,
+            0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+            0x48, 0x7c, 0x7e, 0xff, 0xfe, 0x23, 0x68, 0xaf,
+            0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+            0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04,
+            0x02, 0x8c, 0x02, 0x8c, 0x00, 0x20, 0x58, 0xe1,
+            0x11, 0x05, 0x12, 0x67, 0x06, 0x2f, 0x01, 0x00,
+            0x20, 0x01, 0x06, 0x38, 0x04, 0x09, 0x10, 0x00,
+            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+            // SNDU footer (crc-32)
+            0x1d, 0xc4, 0xe8, 0xc1,
+            // Transport Packet stuffing
             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
@@ -64,10 +73,10 @@ BOOST_AUTO_UNIT_TEST(transportPacket_packet)
             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-            0xff, 0xff, 0xff, 0xff
+            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
     };
-            
-    senf::TransportPacket p (senf::TransportPacket::create(data));
+
+    TransportPacket p (TransportPacket::create(data));
 
     BOOST_CHECK_EQUAL(   p->sync_byte(),                TransportPacketType::SYNC_BYTE+0 );
     BOOST_CHECK(       ! p->transport_error_indicator()                                  );
@@ -77,12 +86,45 @@ BOOST_AUTO_UNIT_TEST(transportPacket_packet)
     BOOST_CHECK_EQUAL(   p->transport_scrmbl_ctrl(),    0x0u                             );
     BOOST_CHECK_EQUAL(   p->adaptation_field_ctrl(),    0x1u                             );
     BOOST_CHECK_EQUAL(   p->continuity_counter(),       0x0eu                            );
+    BOOST_CHECK_EQUAL(   p->pointer_field(),            0x0u                             );
+
+    std::ostringstream oss (std::ostringstream::out);
+    SENF_CHECK_NO_THROW( p.dump( oss));
+}
+
+
+BOOST_AUTO_UNIT_TEST(transportPacket_create_with_pusi)
+{
+    TransportPacket ts_packet (TransportPacket::create());
+    ts_packet->setPUSI(true);
+    ts_packet->pid() = 0x010fu;
+    ts_packet->continuity_counter() = 0x0eu;
+
+    unsigned char payload_data[] = {  // see test above
+            // SNDU Header
+            0x80, 0x4c, 0x86, 0xdd,
+            // IPv6 Packet
+            0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x11, 0x40,
+            0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+            0x48, 0x7c, 0x7e, 0xff, 0xfe, 0x23, 0x68, 0xaf,
+            0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+            0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04,
+            0x02, 0x8c, 0x02, 0x8c, 0x00, 0x20, 0x58, 0xe1,
+            0x11, 0x05, 0x12, 0x67, 0x06, 0x2f, 0x01, 0x00,
+            0x20, 0x01, 0x06, 0x38, 0x04, 0x09, 0x10, 0x00,
+            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00,
+            // SNDU footer (crc-32)
+            0x1d, 0xc4, 0xe8, 0xc1
+    };
+    senf::DataPacket payload (senf::DataPacket::createAfter( ts_packet, payload_data));
+
+    // TODO: add method for stuffing
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////
 #undef prefix_
 
-\f
+
 // Local Variables:
 // mode: c++
 // fill-column: 100