summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrendan McCollam <brendan@mccoll.am>2014-07-15 09:26:56 +0300
committerAlex Grönholm <alex.gronholm@nextday.fi>2014-07-15 09:27:20 +0300
commitdea45080a8dbe06a998fe825731cbb425311bee0 (patch)
treea6449297840fa0540616b3cc0ed0d70f6f44f9e0
parent79854975aca5c9473a71f6677725d9556eaf66db (diff)
downloadapscheduler-dea45080a8dbe06a998fe825731cbb425311bee0.tar.gz
Fixed BlockingScheduler, BackgroundScheduler and GeventScheduler incorrectly waiting MAX_WAIT_TIME when wait_seconds is 0
-rw-r--r--apscheduler/schedulers/blocking.py2
-rw-r--r--tests/test_schedulers.py20
2 files changed, 21 insertions, 1 deletions
diff --git a/apscheduler/schedulers/blocking.py b/apscheduler/schedulers/blocking.py
index 306860f..2720822 100644
--- a/apscheduler/schedulers/blocking.py
+++ b/apscheduler/schedulers/blocking.py
@@ -25,7 +25,7 @@ class BlockingScheduler(BaseScheduler):
def _main_loop(self):
while self.running:
wait_seconds = self._process_jobs()
- self._event.wait(wait_seconds or self.MAX_WAIT_TIME)
+ self._event.wait(wait_seconds if wait_seconds is not None else self.MAX_WAIT_TIME)
self._event.clear()
def wakeup(self):
diff --git a/tests/test_schedulers.py b/tests/test_schedulers.py
index 8f4b40e..ee75ad6 100644
--- a/tests/test_schedulers.py
+++ b/tests/test_schedulers.py
@@ -902,6 +902,12 @@ class TestBlockingScheduler(SchedulerImplementationTestBase):
return BlockingScheduler()
@pytest.fixture
+ def mock_event_scheduler(self, scheduler):
+ scheduler._event = MagicMock()
+ scheduler._event.clear.side_effect = StopIteration()
+ return scheduler
+
+ @pytest.fixture
def start_scheduler(self, request, scheduler):
def cleanup():
if scheduler.running:
@@ -912,6 +918,20 @@ class TestBlockingScheduler(SchedulerImplementationTestBase):
thread = Thread(target=scheduler.start)
return thread.start
+ @pytest.mark.parametrize('wait_seconds,expected_wait', [[0, 0], [None, 4294967], [728, 728]],
+ ids=['zero', 'none', 'positive'])
+ def test_main_loop_wait_seconds_zero(self, mock_event_scheduler, wait_seconds, expected_wait):
+ """Tests that _main_loop() correctly handles the condition where `wait_seconds` is 0."""
+
+ mock_event_scheduler._process_jobs = MagicMock(return_value=wait_seconds)
+ mock_event_scheduler._stopped = False
+ try: # We need this to break out of the infinite while loop
+ mock_event_scheduler._main_loop()
+ except StopIteration:
+ pass
+
+ mock_event_scheduler._event.wait.assert_called_with(expected_wait)
+
class TestBackgroundScheduler(SchedulerImplementationTestBase):
@pytest.fixture