ppi::DebugEvent event;
ppi::ForwardingRoute * rt;
-
+
RouteTester() : events(0), throttles(0) {
route( activeIn, activeOut ); // non-forwarding
rt = & route( activeIn, passiveOut ); // forward throttling
void throttleRequest() {
++ throttles;
}
-
+
void unthrottleRequest() {
-- throttles;
}
passiveSink.input.unthrottle();
BOOST_CHECK( activeSource );
BOOST_CHECK( tester.event.enabled() );
-
+
// Now throttle the passive source by exhausting the queue
-
+
BOOST_CHECK( p1 == activeSink.request() );
BOOST_CHECK( passiveSource.output.throttled() );
BOOST_CHECK( ! tester.activeIn );
BOOST_CHECK( tester.passiveOut.throttled() );
BOOST_CHECK( ! activeSink );
BOOST_CHECK( ! tester.event.enabled() );
-
+
passiveSource.submit(p1);
BOOST_CHECK( activeSink );
BOOST_CHECK( tester.event.enabled() );
void timeout() {
senf::scheduler::terminate();
}
-
+
// just a helper class for the test
struct ModuleConnector {
module::PriorityJoin & join_;
}
boost::scoped_ptr<module::PassiveQueue> queue;
};
-
+
class TestSink : public module::Module
{
SENF_PPI_MODULE(TestSink);
}
private:
void request() {
- SENF_ASSERT(input());
+ SENF_ASSERT(input(), "TestSink called without packet");
}
};
}
module::ActiveFeeder feeder;
module::PriorityJoin join;
module::CloneSource source1 (senf::DataPacket::create());
-
+
ppi::connect( source1, join);
ppi::connect( join, feeder);
ppi::connect( feeder, sink);
-
+
ModuleConnector moduleConnector ( join);
- senf::scheduler::TimerEvent timer (
+ senf::scheduler::TimerEvent timer (
"connect_runtime timer",
senf::membind(&ModuleConnector::connect, &moduleConnector),
senf::ClockService::now() + senf::ClockService::milliseconds(250));
-
+
senf::scheduler::TimerEvent timeoutTimer (
"connect_runtime test timeoutTimer", &timeout,
senf::ClockService::now() + senf::ClockService::milliseconds(500));
-
+
senf::ppi::run();
-
+
BOOST_CHECK( true );
}