X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Examples%2Fpsi2tsModule%2Fpsi2ts.test.cc;h=9b8fabedd59070cf0e70ded042b1d9549a38641c;hb=e3179a2123ad51d0d9eb63834a581145c4f77c92;hp=b57e39c262ae5c08cb7ba8ebb265a0dc2d47bc99;hpb=e995ef1b4ad86acdd5a104a21f375ef4360db743;p=senf.git diff --git a/Examples/psi2tsModule/psi2ts.test.cc b/Examples/psi2tsModule/psi2ts.test.cc index b57e39c..9b8fabe 100644 --- a/Examples/psi2tsModule/psi2ts.test.cc +++ b/Examples/psi2tsModule/psi2ts.test.cc @@ -24,19 +24,140 @@ \brief psi2ts unit tests */ // Custom includes +#include +#include +#include +#include #include "psi2ts.hh" -#include "../../Utils/auto_unit_test.hh" +#include #include +#include #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// -BOOST_AUTO_UNIT_TEST(one_section_to_one_transportpacket) +//-///////////////////////////////////////////////////////////////////////////////////////////////// + +void check_transportpacket_header(senf::TransportPacket tsPacket, bool pusi, unsigned pid, unsigned counter) +{ + BOOST_CHECK_EQUAL( tsPacket->sync_byte(), senf::TransportPacketType::SYNC_BYTE+0 ); + BOOST_CHECK_EQUAL( tsPacket->transport_error_indicator(), false ); + BOOST_CHECK_EQUAL( tsPacket->pusi(), pusi ); + BOOST_CHECK_EQUAL( tsPacket->transport_priority(), false ); + BOOST_CHECK_EQUAL( tsPacket->transport_scrmbl_ctrl(), 0x0u ); + BOOST_CHECK_EQUAL( tsPacket->adaptation_field_ctrl(), 0x1u ); + BOOST_CHECK_EQUAL( tsPacket->continuity_counter(), counter ); + if (pusi) + BOOST_CHECK_EQUAL( tsPacket->pointer_field(), 0x0u ); + +} + +template +bool equal_elements(InputIterator first, InputIterator last, const T& value) { - BOOST_CHECK_EQUAL(1, 1+0); + return std::find_if( first, last, boost::lambda::_1 != value) == last; +} + + +SENF_AUTO_UNIT_TEST(one_section_to_one_transportpacket) +{ + senf::ppi::module::debug::ActiveSource source; + senf::ppi::module::debug::PassiveSink sink; + unsigned PID = 42; + Psi2TsModule psi2ts (PID); + + senf::ppi::connect( source, psi2ts); + senf::ppi::connect( psi2ts, sink); + senf::ppi::init(); + + std::string sec_data ( "psi2ts_test: one_section_to_one_transportpacket"); + senf::Packet sec_packet (senf::DataPacket::create(sec_data)); + sec_packet.finalize(); + + source.submit(sec_packet); + BOOST_CHECK_EQUAL( sink.size(), 1u); + + senf::TransportPacket ts_packet = sink.pop_front().as(); + check_transportpacket_header( ts_packet, true, PID, 1); + senf::PacketData & ts_payload_data = ts_packet.next().data(); + BOOST_CHECK_EQUAL_COLLECTIONS( + ts_payload_data.begin(), + boost::next( ts_payload_data.begin(), sec_data.size()), + sec_data.begin(), + sec_data.end()); + BOOST_CHECK( equal_elements( + boost::next( ts_payload_data.begin(), ts_payload_data.size()), + ts_payload_data.end(), + 0xffu)); +} + +SENF_AUTO_UNIT_TEST(one_section_to_two_transportpackets) +{ + senf::ppi::module::debug::ActiveSource source; + senf::ppi::module::debug::PassiveSink sink; + unsigned PID = 42; + Psi2TsModule psi2ts (PID); + + senf::ppi::connect( source, psi2ts); + senf::ppi::connect( psi2ts, sink); + senf::ppi::init(); + + std::string sec_data ( 183, 0x42); + std::string sec_data2 ( "psi2ts_test: one_section_to_two_transportpackets"); + sec_data.append( sec_data2); + senf::Packet sec_packet (senf::DataPacket::create(sec_data)); + sec_packet.finalize(); + + source.submit( sec_packet); + BOOST_CHECK_EQUAL( sink.size(), 2u); + + senf::TransportPacket ts_packet = sink.pop_front().as(); + check_transportpacket_header( ts_packet, true, PID, 1); + senf::PacketData & ts_payload_data1 = ts_packet.next().data(); + + BOOST_CHECK( equal_elements( ts_payload_data1.begin(), ts_payload_data1.end(), 0x42)); + + ts_packet = sink.pop_front().as(); + check_transportpacket_header( ts_packet, false, PID, 2); + senf::PacketData & ts_payload_data2 = ts_packet.next().data(); + BOOST_CHECK_EQUAL_COLLECTIONS( + ts_payload_data2.begin(), + boost::next( ts_payload_data2.begin(), sec_data2.size()), + sec_data2.begin(), + sec_data2.end()); + BOOST_CHECK( equal_elements( + boost::next( ts_payload_data2.begin(), sec_data2.size()), + ts_payload_data2.end(), + 0xffu)); +} + +SENF_AUTO_UNIT_TEST(many_sections_to_many_transportpackets) +{ + senf::ppi::module::debug::ActiveSource source; + senf::ppi::module::debug::PassiveSink sink; + unsigned PID = 42; + Psi2TsModule psi2ts (PID); + + senf::ppi::connect( source, psi2ts); + senf::ppi::connect( psi2ts, sink); + senf::ppi::init(); + + std::string sec_data ( "many_sections_to_many_transportpackets"); + senf::Packet sec_packet (senf::DataPacket::create(sec_data)); + sec_packet.finalize(); + + unsigned NUMBER_OF_SECTIONS = 42u; + for (unsigned i=1; i<=NUMBER_OF_SECTIONS; i++) { + source.submit( sec_packet); + } + BOOST_CHECK_EQUAL( sink.size(), NUMBER_OF_SECTIONS); + + for (unsigned i=1; i<=NUMBER_OF_SECTIONS; i++) { + senf::TransportPacket ts_packet = sink.pop_front().as(); + check_transportpacket_header( ts_packet, true, PID, i%16); + } } -///////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_