X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FConnectors.test.cc;h=20b7e3e405b21d715d3b8197b35e06fc44c188f9;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=6b95fc2700035283aeeb73b5bfbc1f4f30dce578;hpb=17d44437f7fb8ee68a96ed55fc327c746c161142;p=senf.git diff --git a/PPI/Connectors.test.cc b/PPI/Connectors.test.cc index 6b95fc2..20b7e3e 100644 --- a/PPI/Connectors.test.cc +++ b/PPI/Connectors.test.cc @@ -21,7 +21,7 @@ // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. /** \file - \brief Connectors.test unit tests */ + \brief Connectors unit tests */ //#include "Connectors.test.hh" //#include "Connectors.test.ih" @@ -402,22 +402,139 @@ BOOST_AUTO_UNIT_TEST(connectorTest) { TypedPassiveInput<> input; TypedActiveOutput<> output; - BOOST_CHECK_NO_THROW( ppi::connect(output, input) ); + SENF_CHECK_NO_THROW( ppi::connect(output, input) ); } { TypedPassiveInput<> input; debug::ActiveSource output; - BOOST_CHECK_NO_THROW( ppi::connect(output, input) ); + SENF_CHECK_NO_THROW( ppi::connect(output, input) ); } { debug::ActiveSink input; TypedPassiveOutput<> output; - BOOST_CHECK_NO_THROW( ppi::connect(output, input) ); + SENF_CHECK_NO_THROW( ppi::connect(output, input) ); } { debug::ActiveSink input; debug::PassiveSource output; - BOOST_CHECK_NO_THROW( ppi::connect(output, input) ); + SENF_CHECK_NO_THROW( ppi::connect(output, input) ); + } +} + +BOOST_AUTO_UNIT_TEST(delayedConnect) +{ + { + debug::PassiveSource source; + debug::ActiveSink target; + + ppi::init(); + + BOOST_CHECK( ! target.input ); + BOOST_CHECK( ! target.request() ); + + ppi::connect(source, target); + ppi::init(); + + BOOST_CHECK( ! target.input ); + + senf::Packet p (senf::DataPacket::create()); + source.submit(p); + BOOST_CHECK( target.request() == p ); + } + + { + debug::PassiveSource source; + debug::ActiveSink target; + + ppi::init(); + + senf::Packet p (senf::DataPacket::create()); + source.submit(p); + + BOOST_CHECK( ! target.input ); + BOOST_CHECK( ! target.request() ); + + ppi::connect(source, target); + ppi::init(); + + BOOST_CHECK( target.input ); + BOOST_CHECK( target.request() == p ); + } + + { + debug::ActiveSource source; + debug::PassiveSink target; + + ppi::init(); + + BOOST_CHECK( ! source.output ); + SENF_CHECK_NO_THROW( source.output(senf::DataPacket::create()) ); + + ppi::connect(source, target); + ppi::init(); + + BOOST_CHECK( source.output ); + + senf::Packet p (senf::DataPacket::create()); + source.submit(p); + + BOOST_CHECK( target.front() == p ); + BOOST_CHECK_EQUAL( target.size(), 1u ); + } + + { + debug::ActiveSource source; + debug::PassiveSink target; + + ppi::init(); + + BOOST_CHECK( ! source.output ); + SENF_CHECK_NO_THROW( source.output(senf::DataPacket::create()) ); + target.throttle(); + + ppi::connect(source, target); + ppi::init(); + + BOOST_CHECK( ! source.output ); + target.unthrottle(); + BOOST_CHECK( source.output ); + } +} + +BOOST_AUTO_UNIT_TEST(disconnect) +{ + { + debug::PassiveSource source; + debug::ActiveSink target; + + ppi::connect(source, target); + ppi::init(); + + BOOST_CHECK( ! target.input ); + + senf::Packet p (senf::DataPacket::create()); + source.submit(p); + + BOOST_CHECK( target.input ); + + target.input.disconnect(); + ppi::init(); + + BOOST_CHECK( ! target.input ); + } + { + debug::ActiveSource source; + debug::PassiveSink target; + + ppi::connect(source, target); + ppi::init(); + + BOOST_CHECK( source.output ); + + source.output.disconnect(); + ppi::init(); + + BOOST_CHECK( ! source.output ); } }