X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FScheduler.test.cc;h=0a135182e2abfe34b4d070d822365eab52d4c629;hb=92f8630b75f3ef50e73c48cde58645dcd1534e27;hp=b8c5b5021361c9e9b043417705ffc74a0daa2d88;hpb=b5d7667a0ee87f023a74df607b582b976241dcf7;p=senf.git diff --git a/Scheduler/Scheduler.test.cc b/Scheduler/Scheduler.test.cc index b8c5b50..0a13518 100644 --- a/Scheduler/Scheduler.test.cc +++ b/Scheduler/Scheduler.test.cc @@ -20,10 +20,11 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// Unit tests +/** \file + \brief Scheduler unit tests */ -//#include "scheduler.test.hh" -//#include "scheduler.test.ih" +//#include "Scheduler.test.hh" +//#include "Scheduler.test.ih" // Custom includes #include @@ -248,7 +249,7 @@ void schedulerTest() senf::scheduler::FdEvent fde1 ("testFdEvent", boost::bind(&callback, sock, _1), sock, senf::scheduler::FdEvent::EV_READ); event = senf::scheduler::FdEvent::EV_NONE; - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); BOOST_CHECK_EQUAL( event, senf::scheduler::FdEvent::EV_READ ); BOOST_REQUIRE_EQUAL( size, 4 ); buffer[size]=0; @@ -260,13 +261,13 @@ void schedulerTest() strcpy(buffer,"WRITE"); size=5; event = senf::scheduler::FdEvent::EV_NONE; - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); BOOST_CHECK_EQUAL( event, senf::scheduler::FdEvent::EV_WRITE ); SENF_CHECK_NO_THROW( fde2.disable() ); event = senf::scheduler::FdEvent::EV_NONE; sleep(1); - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); BOOST_CHECK_EQUAL( event, senf::scheduler::FdEvent::EV_READ|senf::scheduler::FdEvent::EV_HUP ); BOOST_REQUIRE_EQUAL( size, 2 ); buffer[size]=0; @@ -281,24 +282,24 @@ void schedulerTest() event = senf::scheduler::FdEvent::EV_NONE; senf::ClockService::clock_type t (senf::ClockService::now()); - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); BOOST_CHECK_PREDICATE( is_close, (senf::ClockService::now()-t) (senf::ClockService::milliseconds(200)) ); BOOST_CHECK( timeoutCalled ); BOOST_CHECK( ! timer1.enabled() ); BOOST_CHECK_EQUAL( event, senf::scheduler::FdEvent::EV_NONE ); BOOST_CHECK_PREDICATE( is_close, (senf::ClockService::now()) (senf::scheduler::eventTime()) ); timeoutCalled = false; - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); BOOST_CHECK_PREDICATE( is_close, (senf::ClockService::now()-t) (senf::ClockService::milliseconds(400)) ); BOOST_CHECK( timeoutCalled ); BOOST_CHECK_EQUAL( event, senf::scheduler::FdEvent::EV_NONE ); BOOST_CHECK( ! timer2.enabled() ); - BOOST_WARN_MESSAGE( false, "A 'Scheduler task hanging' error is expected to be signaled here." ); - BOOST_CHECK_NO_THROW( timer1.action(&blockingHandler) ); - BOOST_CHECK_NO_THROW( timer1.timeout(senf::ClockService::now()) ); - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); - BOOST_CHECK_EQUAL( senf::scheduler::hangCount(), 1u ); + BOOST_MESSAGE( "A 'Scheduler task hanging' error is expected to be signaled here." ); + SENF_CHECK_NO_THROW( timer1.action(&blockingHandler) ); + SENF_CHECK_NO_THROW( timer1.timeout(senf::ClockService::now()) ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); + BOOST_CHECK_EQUAL( senf::scheduler::watchdogEvents(), 1u ); } { @@ -309,10 +310,10 @@ void schedulerTest() senf::ClockService::clock_type t = senf::ClockService::now(); ::kill(::getpid(), SIGUSR1); delay(200); - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); BOOST_CHECK_PREDICATE( is_close, (senf::ClockService::now()) (t+senf::ClockService::milliseconds(200)) ); BOOST_CHECK_PREDICATE( is_close, (sigtime) (t+senf::ClockService::milliseconds(200)) ); - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); } BOOST_CHECK( eventCount >= 8u ); @@ -333,13 +334,28 @@ BOOST_AUTO_UNIT_TEST(testSchedulerPollTimers) BOOST_AUTO_UNIT_TEST(testSchedulerHiresTimers) { - senf::scheduler::hiresTimers(); + if (senf::scheduler::haveScalableHiresTimers()) + BOOST_MESSAGE( "Using timerfd() hires timers" ); + else + BOOST_MESSAGE( "Using POSIX hires timers"); + SENF_CHECK_NO_THROW( senf::scheduler::hiresTimers() ); BOOST_CHECK( senf::scheduler::usingHiresTimers() ); schedulerTest(); - senf::scheduler::loresTimers(); + SENF_CHECK_NO_THROW( senf::scheduler::loresTimers() ); BOOST_CHECK( ! senf::scheduler::usingHiresTimers() ); } +BOOST_AUTO_UNIT_TEST(testSchedulerPOSIXTimers) +{ + if (senf::scheduler::haveScalableHiresTimers()) { + SENF_CHECK_NO_THROW( senf::scheduler::detail::TimerDispatcher::instance().timerSource( + std::auto_ptr( + new senf::scheduler::detail::POSIXTimerSource())) ); + schedulerTest(); + senf::scheduler::loresTimers(); + } +} + namespace { void sigme() @@ -365,14 +381,14 @@ BOOST_AUTO_UNIT_TEST(blockSignals) senf::scheduler::SignalEvent sig (SIGUSR1, &sigusr); senf::ClockService::clock_type t = senf::ClockService::now(); - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); BOOST_CHECK_PREDICATE( is_close, (senf::ClockService::now()) (t+senf::ClockService::milliseconds(200)) ); BOOST_CHECK_PREDICATE( is_close, (sigtime) (t+senf::ClockService::milliseconds(200)) ); - BOOST_CHECK_NO_THROW( senf::scheduler::process() ); + SENF_CHECK_NO_THROW( senf::scheduler::process() ); } ///////////////////////////////cc.e////////////////////////////////////////