summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions/docs/server2/future_test.py
diff options
context:
space:
mode:
authorkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-25 04:36:07 +0000
committerkalman@chromium.org <kalman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-25 04:36:07 +0000
commit4ab445887647350e1dfb89af64865265d382e1c6 (patch)
tree70b4cb50f30a0bf31ef4a4da7259b9bef3b0d482 /chrome/common/extensions/docs/server2/future_test.py
parent7271f64d2987cb7a3fb38cb0cf1334c9f871df8e (diff)
downloadchromium_src-4ab445887647350e1dfb89af64865265d382e1c6.zip
chromium_src-4ab445887647350e1dfb89af64865265d382e1c6.tar.gz
chromium_src-4ab445887647350e1dfb89af64865265d382e1c6.tar.bz2
Docserver: greatly improve the error logging by (a) preserving the stack traces in Futures,
(b) actually logging the stack trace, and (c) respecting DeadlineExceededErrors. BUG=167432 Review URL: https://codereview.chromium.org/14333015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@196309 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/extensions/docs/server2/future_test.py')
-rwxr-xr-xchrome/common/extensions/docs/server2/future_test.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/chrome/common/extensions/docs/server2/future_test.py b/chrome/common/extensions/docs/server2/future_test.py
new file mode 100755
index 0000000..3b31a0c
--- /dev/null
+++ b/chrome/common/extensions/docs/server2/future_test.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import traceback
+import unittest
+
+from future import Future
+
+class FutureTest(unittest.TestCase):
+ def testNoValueOrDelegate(self):
+ self.assertRaises(ValueError, Future)
+
+ def testValue(self):
+ future = Future(value=42)
+ self.assertEqual(42, future.Get())
+ self.assertEqual(42, future.Get())
+
+ def testDelegateValue(self):
+ assertFalse = self.assertFalse
+ class delegate(object):
+ def __init__(self):
+ self._get_called = False
+ def Get(self):
+ assertFalse(self._get_called)
+ self._get_called = True
+ return 42
+
+ future = Future(delegate=delegate())
+ self.assertEqual(42, future.Get())
+ self.assertEqual(42, future.Get())
+
+ def testErrorThrowingDelegate(self):
+ class FunkyException(Exception):
+ pass
+
+ # Set up a chain of functions to test the stack trace.
+ def qux():
+ raise FunkyException()
+ def baz():
+ return qux()
+ def bar():
+ return baz()
+ def foo():
+ return bar()
+ chain = [foo, bar, baz, qux]
+
+ assertFalse = self.assertFalse
+ class delegate(object):
+ def __init__(self):
+ self._get_called = False
+ def Get(self):
+ assertFalse(self._get_called)
+ self._get_called = True
+ return foo()
+
+ fail = self.fail
+ assertTrue = self.assertTrue
+ def assert_raises_full_stack(future, err):
+ try:
+ future.Get()
+ fail('Did not raise %s' % err)
+ except Exception as e:
+ assertTrue(isinstance(e, err))
+ stack = traceback.format_exc()
+ assertTrue(all(stack.find(fn.__name__) != -1 for fn in chain))
+
+ future = Future(delegate=delegate())
+ assert_raises_full_stack(future, FunkyException)
+ assert_raises_full_stack(future, FunkyException)
+
+if __name__ == '__main__':
+ unittest.main()