From 34171a348bac1b5427618dcfb203dd4c6c48b8d0 Mon Sep 17 00:00:00 2001 From: Chris AtLee Date: Sun, 21 Feb 2010 21:23:32 -0500 Subject: [PATCH 1/2] Improve coverage of debug module --- eventlet/debug.py | 4 +- eventlet/support/greenlets.py | 1 + tests/debug_test.py | 83 ++++++++++++++++++++++++++++++++++- 3 files changed, 86 insertions(+), 2 deletions(-) diff --git a/eventlet/debug.py b/eventlet/debug.py index 937e6af..5e44eeb 100644 --- a/eventlet/debug.py +++ b/eventlet/debug.py @@ -4,6 +4,8 @@ debugging Eventlet-powered applications.""" import os import sys import linecache +import string +import inspect __all__ = ['spew', 'unspew', 'format_hub_listeners', 'hub_listener_stacks', 'hub_exceptions', 'tpool_exceptions'] @@ -122,4 +124,4 @@ def tpool_exceptions(state): functions that are executed in it, in addition to raising them like it normally does.""" from eventlet import tpool - tpool.QUIET = not state \ No newline at end of file + tpool.QUIET = not state diff --git a/eventlet/support/greenlets.py b/eventlet/support/greenlets.py index 25bb60d..cb75667 100644 --- a/eventlet/support/greenlets.py +++ b/eventlet/support/greenlets.py @@ -4,6 +4,7 @@ try: GreenletExit = greenlet.GreenletExit greenlet = greenlet.greenlet except ImportError, e: + raise try: from py.magic import greenlet getcurrent = greenlet.getcurrent diff --git a/tests/debug_test.py b/tests/debug_test.py index 4afa349..db5e329 100644 --- a/tests/debug_test.py +++ b/tests/debug_test.py @@ -4,12 +4,90 @@ import eventlet from eventlet import debug from eventlet import api from tests import LimitedTestCase, main +from unittest import TestCase try: from cStringIO import StringIO except ImportError: from StringIO import StringIO +class TestSpew(TestCase): + def setUp(self): + self.orig_trace = sys.settrace + sys.settrace = self._settrace + self.tracer = None + + def tearDown(self): + sys.settrace = self.orig_trace + sys.stdout = sys.__stdout__ + + def _settrace(self, cb): + self.tracer = cb + + def test_spew(self): + debug.spew() + self.failUnless(isinstance(self.tracer, debug.Spew)) + + def test_unspew(self): + debug.spew() + debug.unspew() + self.failUnlessEqual(self.tracer, None) + + def test_line(self): + sys.stdout = StringIO() + s = debug.Spew() + f = sys._getframe() + s(f, "line", None) + lineno = f.f_lineno - 1 # -1 here since we called with frame f in the line above + output = sys.stdout.getvalue() + self.failUnless("debug_test:%i" % lineno in output, "Didn't find line %i in %s" % (lineno, output)) + self.failUnless("f= Date: Mon, 22 Feb 2010 14:02:28 -0500 Subject: [PATCH 2/2] Bug 37: Implement queue resizing --- eventlet/queue.py | 9 +++++++++ tests/queue_test.py | 27 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/eventlet/queue.py b/eventlet/queue.py index 3963381..1bf3aef 100644 --- a/eventlet/queue.py +++ b/eventlet/queue.py @@ -181,6 +181,15 @@ class LightQueue(object): def qsize(self): """Return the size of the queue.""" return len(self.queue) + + def resize(self, size): + """Resizes the queue's maximum size. + + If the size is increased, and there are putters waiting, they may be woken up.""" + if size > self.maxsize: + # Maybe wake some stuff up + self._schedule_unlock() + self.maxsize = size def putting(self): """Returns the number of greenthreads that are blocked waiting to put diff --git a/tests/queue_test.py b/tests/queue_test.py index 99a713b..496a8cc 100644 --- a/tests/queue_test.py +++ b/tests/queue_test.py @@ -68,6 +68,33 @@ class TestQueue(LimitedTestCase): self.assertEquals(evt.wait(),'done') gt.wait() + def test_resize_up(self): + q = eventlet.Queue(0) + def sender(evt, q): + q.put('hi') + evt.send('done') + + evt = event.Event() + gt = eventlet.spawn(sender, evt, q) + eventlet.sleep(0) + self.assert_(not evt.ready()) + q.resize(1) + eventlet.sleep(0) + self.assert_(evt.ready()) + gt.wait() + + def test_resize_down(self): + size = 5 + q = eventlet.Queue(5) + + for i in range(5): + q.put(i) + + self.assertEquals(list(q.queue), range(5)) + q.resize(1) + eventlet.sleep(0) + self.assertEquals(list(q.queue), range(5)) + def test_multiple_waiters(self): # tests that multiple waiters get their results back q = eventlet.Queue()