From f492b56c8200eebb77b8023ab386c9ef412cc06b Mon Sep 17 00:00:00 2001 From: David Cramer Date: Wed, 30 Mar 2011 16:33:34 -0700 Subject: Some initial tests and fix for execution model --- debug_toolbar/tests/tests.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 debug_toolbar/tests/tests.py (limited to 'debug_toolbar/tests/tests.py') diff --git a/debug_toolbar/tests/tests.py b/debug_toolbar/tests/tests.py new file mode 100644 index 0000000..cdc1947 --- /dev/null +++ b/debug_toolbar/tests/tests.py @@ -0,0 +1,39 @@ +from debug_toolbar.middleware import DebugToolbarMiddleware +from debug_toolbar.panels.sql import SQLDebugPanel +from debug_toolbar.toolbar.loader import DebugToolbar + +from django.contrib.auth.models import User +from django.test import TestCase + +from dingus import Dingus +import thread + +class BaseTestCase(TestCase): + def setUp(self): + request = Dingus('request') + toolbar = DebugToolbar(request) + DebugToolbarMiddleware.debug_toolbars[thread.get_ident()] = toolbar + self.toolbar = toolbar + +class DebugToolbarTestCase(BaseTestCase): + urls = 'debug_toolbar.tests.urls' + + def test_middleware(self): + resp = self.client.get('/execute_sql/') + self.assertEquals(resp.status_code, 200) + +class SQLPanelTestCase(BaseTestCase): + def test_recording(self): + panel = self.toolbar.get_panel(SQLDebugPanel) + self.assertEquals(len(panel._queries), 0) + + list(User.objects.all()) + + # ensure query was logged + self.assertEquals(len(panel._queries), 1) + query = panel._queries[0] + self.assertEquals(query[0], 'default') + self.assertTrue('sql' in query[1]) + self.assertTrue('duration' in query[1]) + self.assertTrue('stacktrace' in query[1]) + \ No newline at end of file -- cgit v1.2.3 From 3f578cf684b7e3b9a20d9c777950c28c44db074a Mon Sep 17 00:00:00 2001 From: David Cramer Date: Thu, 31 Mar 2011 11:42:23 -0700 Subject: Add utilities to inject and monitor functions. Change DB tracking to use new injection method on BaseDatabaseWrapper.cursor --- debug_toolbar/tests/tests.py | 137 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 136 insertions(+), 1 deletion(-) (limited to 'debug_toolbar/tests/tests.py') diff --git a/debug_toolbar/tests/tests.py b/debug_toolbar/tests/tests.py index cdc1947..476802c 100644 --- a/debug_toolbar/tests/tests.py +++ b/debug_toolbar/tests/tests.py @@ -1,6 +1,7 @@ from debug_toolbar.middleware import DebugToolbarMiddleware from debug_toolbar.panels.sql import SQLDebugPanel from debug_toolbar.toolbar.loader import DebugToolbar +from debug_toolbar.utils.tracking import pre_dispatch, post_dispatch, callbacks from django.contrib.auth.models import User from django.test import TestCase @@ -36,4 +37,138 @@ class SQLPanelTestCase(BaseTestCase): self.assertTrue('sql' in query[1]) self.assertTrue('duration' in query[1]) self.assertTrue('stacktrace' in query[1]) - \ No newline at end of file + +def module_func(*args, **kwargs): + """Used by dispatch tests""" + return 'blah' + +class TrackingTestCase(BaseTestCase): + @classmethod + def class_method(cls, *args, **kwargs): + return 'blah' + + def class_func(self, *args, **kwargs): + """Used by dispatch tests""" + return 'blah' + + def test_pre_hook(self): + foo = {} + + @pre_dispatch(module_func) + def test(**kwargs): + foo.update(kwargs) + + self.assertTrue(hasattr(module_func, '__wrapped__')) + self.assertEquals(len(callbacks['before']), 1) + + module_func('hi', foo='bar') + + self.assertTrue('sender' in foo, foo) + # best we can do + self.assertEquals(foo['sender'].__name__, 'module_func') + self.assertTrue('start' in foo, foo) + self.assertGreater(foo['start'], 0) + self.assertTrue('stop' not in foo, foo) + self.assertTrue('args' in foo, foo) + self.assertTrue(len(foo['args']), 1) + self.assertEquals(foo['args'][0], 'hi') + self.assertTrue('kwargs' in foo, foo) + self.assertTrue(len(foo['kwargs']), 1) + self.assertTrue('foo' in foo['kwargs']) + self.assertEquals(foo['kwargs']['foo'], 'bar') + + callbacks['before'] = {} + + @pre_dispatch(TrackingTestCase.class_func) + def test(**kwargs): + foo.update(kwargs) + + self.assertTrue(hasattr(TrackingTestCase.class_func, '__wrapped__')) + self.assertEquals(len(callbacks['before']), 1) + + self.class_func('hello', foo='bar') + + self.assertTrue('sender' in foo, foo) + # best we can do + self.assertEquals(foo['sender'].__name__, 'class_func') + self.assertTrue('start' in foo, foo) + self.assertGreater(foo['start'], 0) + self.assertTrue('stop' not in foo, foo) + self.assertTrue('args' in foo, foo) + self.assertTrue(len(foo['args']), 2) + self.assertEquals(foo['args'][1], 'hello') + self.assertTrue('kwargs' in foo, foo) + self.assertTrue(len(foo['kwargs']), 1) + self.assertTrue('foo' in foo['kwargs']) + self.assertEquals(foo['kwargs']['foo'], 'bar') + + # callbacks['before'] = {} + # + # @pre_dispatch(TrackingTestCase.class_method) + # def test(**kwargs): + # foo.update(kwargs) + # + # self.assertTrue(hasattr(TrackingTestCase.class_method, '__wrapped__')) + # self.assertEquals(len(callbacks['before']), 1) + # + # TrackingTestCase.class_method() + # + # self.assertTrue('sender' in foo, foo) + # # best we can do + # self.assertEquals(foo['sender'].__name__, 'class_method') + # self.assertTrue('start' in foo, foo) + # self.assertTrue('stop' not in foo, foo) + # self.assertTrue('args' in foo, foo) + + def test_post_hook(self): + foo = {} + + @post_dispatch(module_func) + def test(**kwargs): + foo.update(kwargs) + + self.assertTrue(hasattr(module_func, '__wrapped__')) + self.assertEquals(len(callbacks['after']), 1) + + module_func('hi', foo='bar') + + self.assertTrue('sender' in foo, foo) + # best we can do + self.assertEquals(foo['sender'].__name__, 'module_func') + self.assertTrue('start' in foo, foo) + self.assertGreater(foo['start'], 0) + self.assertTrue('stop' in foo, foo) + self.assertGreater(foo['stop'], foo['start']) + self.assertTrue('args' in foo, foo) + self.assertTrue(len(foo['args']), 1) + self.assertEquals(foo['args'][0], 'hi') + self.assertTrue('kwargs' in foo, foo) + self.assertTrue(len(foo['kwargs']), 1) + self.assertTrue('foo' in foo['kwargs']) + self.assertEquals(foo['kwargs']['foo'], 'bar') + + callbacks['after'] = {} + + @post_dispatch(TrackingTestCase.class_func) + def test(**kwargs): + foo.update(kwargs) + + self.assertTrue(hasattr(TrackingTestCase.class_func, '__wrapped__')) + self.assertEquals(len(callbacks['after']), 1) + + self.class_func('hello', foo='bar') + + self.assertTrue('sender' in foo, foo) + # best we can do + self.assertEquals(foo['sender'].__name__, 'class_func') + self.assertTrue('start' in foo, foo) + self.assertGreater(foo['start'], 0) + self.assertTrue('stop' in foo, foo) + self.assertGreater(foo['stop'], foo['start']) + self.assertTrue('args' in foo, foo) + self.assertTrue(len(foo['args']), 2) + self.assertEquals(foo['args'][1], 'hello') + self.assertTrue('kwargs' in foo, foo) + self.assertTrue(len(foo['kwargs']), 1) + self.assertTrue('foo' in foo['kwargs']) + self.assertEquals(foo['kwargs']['foo'], 'bar') \ No newline at end of file -- cgit v1.2.3 From 23709c7c12dff5608881791c447f72aba130f705 Mon Sep 17 00:00:00 2001 From: David Cramer Date: Sat, 16 Apr 2011 13:01:33 -0700 Subject: Ensure tests are compatible with unittest (Django <1.3) --- debug_toolbar/tests/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'debug_toolbar/tests/tests.py') diff --git a/debug_toolbar/tests/tests.py b/debug_toolbar/tests/tests.py index 476802c..1cff37f 100644 --- a/debug_toolbar/tests/tests.py +++ b/debug_toolbar/tests/tests.py @@ -67,7 +67,7 @@ class TrackingTestCase(BaseTestCase): # best we can do self.assertEquals(foo['sender'].__name__, 'module_func') self.assertTrue('start' in foo, foo) - self.assertGreater(foo['start'], 0) + self.assertTrue(foo['start'] > 0) self.assertTrue('stop' not in foo, foo) self.assertTrue('args' in foo, foo) self.assertTrue(len(foo['args']), 1) -- cgit v1.2.3 From cdb4a70765fb61d64e881e29c9e94ecdf120c50c Mon Sep 17 00:00:00 2001 From: David Cramer Date: Sat, 16 Apr 2011 13:43:20 -0700 Subject: Ensure tests are compatible with unittest (Django <1.3) --- debug_toolbar/tests/tests.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'debug_toolbar/tests/tests.py') diff --git a/debug_toolbar/tests/tests.py b/debug_toolbar/tests/tests.py index 1cff37f..fe1904a 100644 --- a/debug_toolbar/tests/tests.py +++ b/debug_toolbar/tests/tests.py @@ -92,7 +92,7 @@ class TrackingTestCase(BaseTestCase): # best we can do self.assertEquals(foo['sender'].__name__, 'class_func') self.assertTrue('start' in foo, foo) - self.assertGreater(foo['start'], 0) + self.assertTrue(foo['start'] > 0) self.assertTrue('stop' not in foo, foo) self.assertTrue('args' in foo, foo) self.assertTrue(len(foo['args']), 2) @@ -136,9 +136,9 @@ class TrackingTestCase(BaseTestCase): # best we can do self.assertEquals(foo['sender'].__name__, 'module_func') self.assertTrue('start' in foo, foo) - self.assertGreater(foo['start'], 0) + self.assertTrue(foo['start'] > 0) self.assertTrue('stop' in foo, foo) - self.assertGreater(foo['stop'], foo['start']) + self.assertTrue(foo['stop'] > foo['start']) self.assertTrue('args' in foo, foo) self.assertTrue(len(foo['args']), 1) self.assertEquals(foo['args'][0], 'hi') @@ -162,9 +162,9 @@ class TrackingTestCase(BaseTestCase): # best we can do self.assertEquals(foo['sender'].__name__, 'class_func') self.assertTrue('start' in foo, foo) - self.assertGreater(foo['start'], 0) + self.assertTrue(foo['start'] > 0) self.assertTrue('stop' in foo, foo) - self.assertGreater(foo['stop'], foo['start']) + self.assertTrue(foo['stop'] > foo['start']) self.assertTrue('args' in foo, foo) self.assertTrue(len(foo['args']), 2) self.assertEquals(foo['args'][1], 'hello') -- cgit v1.2.3