pylint fixes for /nova/test.py
This commit is contained in:
74
nova/test.py
74
nova/test.py
@@ -1,4 +1,6 @@
|
|||||||
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
||||||
|
# pylint: disable-msg=C0103
|
||||||
|
# pylint: disable-msg=W0511
|
||||||
|
|
||||||
# Copyright 2010 United States Government as represented by the
|
# Copyright 2010 United States Government as represented by the
|
||||||
# Administrator of the National Aeronautics and Space Administration.
|
# Administrator of the National Aeronautics and Space Administration.
|
||||||
@@ -22,15 +24,14 @@ Allows overriding of flags for use of fakes,
|
|||||||
and some black magic for inline callbacks.
|
and some black magic for inline callbacks.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
|
||||||
import mox
|
import mox
|
||||||
import stubout
|
import stubout
|
||||||
|
import sys
|
||||||
import time
|
import time
|
||||||
import unittest
|
|
||||||
from tornado import ioloop
|
from tornado import ioloop
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
from twisted.python import failure
|
from twisted.trial import unittest
|
||||||
from twisted.trial import unittest as trial_unittest
|
|
||||||
|
|
||||||
from nova import fakerabbit
|
from nova import fakerabbit
|
||||||
from nova import flags
|
from nova import flags
|
||||||
@@ -41,20 +42,21 @@ flags.DEFINE_bool('fake_tests', True,
|
|||||||
'should we use everything for testing')
|
'should we use everything for testing')
|
||||||
|
|
||||||
|
|
||||||
def skip_if_fake(f):
|
def skip_if_fake(func):
|
||||||
|
"""Decorator that skips a test if running in fake mode"""
|
||||||
def _skipper(*args, **kw):
|
def _skipper(*args, **kw):
|
||||||
|
"""Wrapped skipper function"""
|
||||||
if FLAGS.fake_tests:
|
if FLAGS.fake_tests:
|
||||||
raise trial_unittest.SkipTest('Test cannot be run in fake mode')
|
raise unittest.SkipTest('Test cannot be run in fake mode')
|
||||||
else:
|
else:
|
||||||
return f(*args, **kw)
|
return func(*args, **kw)
|
||||||
|
|
||||||
_skipper.func_name = f.func_name
|
|
||||||
return _skipper
|
return _skipper
|
||||||
|
|
||||||
|
|
||||||
class TrialTestCase(trial_unittest.TestCase):
|
class TrialTestCase(unittest.TestCase):
|
||||||
|
"""Test case base class for all unit tests"""
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
"""Run before each test method to initialize test environment"""
|
||||||
super(TrialTestCase, self).setUp()
|
super(TrialTestCase, self).setUp()
|
||||||
|
|
||||||
# emulate some of the mox stuff, we can't use the metaclass
|
# emulate some of the mox stuff, we can't use the metaclass
|
||||||
@@ -64,6 +66,7 @@ class TrialTestCase(trial_unittest.TestCase):
|
|||||||
self.flag_overrides = {}
|
self.flag_overrides = {}
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
|
"""Runs after each test method to finalize/tear down test environment"""
|
||||||
super(TrialTestCase, self).tearDown()
|
super(TrialTestCase, self).tearDown()
|
||||||
self.reset_flags()
|
self.reset_flags()
|
||||||
self.mox.UnsetStubs()
|
self.mox.UnsetStubs()
|
||||||
@@ -75,6 +78,7 @@ class TrialTestCase(trial_unittest.TestCase):
|
|||||||
fakerabbit.reset_all()
|
fakerabbit.reset_all()
|
||||||
|
|
||||||
def flags(self, **kw):
|
def flags(self, **kw):
|
||||||
|
"""Override flag variables for a test"""
|
||||||
for k, v in kw.iteritems():
|
for k, v in kw.iteritems():
|
||||||
if k in self.flag_overrides:
|
if k in self.flag_overrides:
|
||||||
self.reset_flags()
|
self.reset_flags()
|
||||||
@@ -84,13 +88,17 @@ class TrialTestCase(trial_unittest.TestCase):
|
|||||||
setattr(FLAGS, k, v)
|
setattr(FLAGS, k, v)
|
||||||
|
|
||||||
def reset_flags(self):
|
def reset_flags(self):
|
||||||
|
"""Resets all flag variables for the test. Runs after each test"""
|
||||||
for k, v in self.flag_overrides.iteritems():
|
for k, v in self.flag_overrides.iteritems():
|
||||||
setattr(FLAGS, k, v)
|
setattr(FLAGS, k, v)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class BaseTestCase(TrialTestCase):
|
class BaseTestCase(TrialTestCase):
|
||||||
def setUp(self):
|
# TODO(jaypipes): Can this be moved into the TrialTestCase class?
|
||||||
|
"""Base test case class for all unit tests."""
|
||||||
|
def setUp(self): # pylint: disable-msg=W0511
|
||||||
|
"""Run before each test method to initialize test environment"""
|
||||||
super(BaseTestCase, self).setUp()
|
super(BaseTestCase, self).setUp()
|
||||||
# TODO(termie): we could possibly keep a more global registry of
|
# TODO(termie): we could possibly keep a more global registry of
|
||||||
# the injected listeners... this is fine for now though
|
# the injected listeners... this is fine for now though
|
||||||
@@ -98,33 +106,27 @@ class BaseTestCase(TrialTestCase):
|
|||||||
self.ioloop = ioloop.IOLoop.instance()
|
self.ioloop = ioloop.IOLoop.instance()
|
||||||
|
|
||||||
self._waiting = None
|
self._waiting = None
|
||||||
self._doneWaiting = False
|
self._done_waiting = False
|
||||||
self._timedOut = False
|
self._timed_out = False
|
||||||
self.set_up()
|
|
||||||
|
|
||||||
def set_up(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def tear_down(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
|
"""Runs after each test method to finalize/tear down test environment"""
|
||||||
super(BaseTestCase, self).tearDown()
|
super(BaseTestCase, self).tearDown()
|
||||||
for x in self.injected:
|
for x in self.injected:
|
||||||
x.stop()
|
x.stop()
|
||||||
if FLAGS.fake_rabbit:
|
if FLAGS.fake_rabbit:
|
||||||
fakerabbit.reset_all()
|
fakerabbit.reset_all()
|
||||||
self.tear_down()
|
|
||||||
|
|
||||||
def _waitForTest(self, timeout=60):
|
def _waitForTest(self, timeout=60):
|
||||||
""" Push the ioloop along to wait for our test to complete. """
|
""" Push the ioloop along to wait for our test to complete. """
|
||||||
self._waiting = self.ioloop.add_timeout(time.time() + timeout,
|
self._waiting = self.ioloop.add_timeout(time.time() + timeout,
|
||||||
self._timeout)
|
self._timeout)
|
||||||
def _wait():
|
def _wait():
|
||||||
if self._timedOut:
|
"""Wrapped wait function. Called on timeout."""
|
||||||
|
if self._timed_out:
|
||||||
self.fail('test timed out')
|
self.fail('test timed out')
|
||||||
self._done()
|
self._done()
|
||||||
if self._doneWaiting:
|
if self._done_waiting:
|
||||||
self.ioloop.stop()
|
self.ioloop.stop()
|
||||||
return
|
return
|
||||||
# we can use add_callback here but this uses less cpu when testing
|
# we can use add_callback here but this uses less cpu when testing
|
||||||
@@ -134,13 +136,16 @@ class BaseTestCase(TrialTestCase):
|
|||||||
self.ioloop.start()
|
self.ioloop.start()
|
||||||
|
|
||||||
def _done(self):
|
def _done(self):
|
||||||
|
"""Callback used for cleaning up deferred test methods."""
|
||||||
if self._waiting:
|
if self._waiting:
|
||||||
try:
|
try:
|
||||||
self.ioloop.remove_timeout(self._waiting)
|
self.ioloop.remove_timeout(self._waiting)
|
||||||
except Exception:
|
except Exception: # pylint: disable-msg=W0703
|
||||||
|
# TODO(jaypipes): This produces a pylint warning. Should
|
||||||
|
# we really be catching Exception and then passing here?
|
||||||
pass
|
pass
|
||||||
self._waiting = None
|
self._waiting = None
|
||||||
self._doneWaiting = True
|
self._done_waiting = True
|
||||||
|
|
||||||
def _maybeInlineCallbacks(self, f):
|
def _maybeInlineCallbacks(self, f):
|
||||||
""" If we're doing async calls in our tests, wait on them.
|
""" If we're doing async calls in our tests, wait on them.
|
||||||
@@ -189,6 +194,7 @@ class BaseTestCase(TrialTestCase):
|
|||||||
return d
|
return d
|
||||||
|
|
||||||
def _catchExceptions(self, result, failure):
|
def _catchExceptions(self, result, failure):
|
||||||
|
"""Catches all exceptions and handles keyboard interrupts."""
|
||||||
exc = (failure.type, failure.value, failure.getTracebackObject())
|
exc = (failure.type, failure.value, failure.getTracebackObject())
|
||||||
if isinstance(failure.value, self.failureException):
|
if isinstance(failure.value, self.failureException):
|
||||||
result.addFailure(self, exc)
|
result.addFailure(self, exc)
|
||||||
@@ -200,11 +206,12 @@ class BaseTestCase(TrialTestCase):
|
|||||||
self._done()
|
self._done()
|
||||||
|
|
||||||
def _timeout(self):
|
def _timeout(self):
|
||||||
|
"""Helper method which trips the timeouts"""
|
||||||
self._waiting = False
|
self._waiting = False
|
||||||
self._timedOut = True
|
self._timed_out = True
|
||||||
|
|
||||||
def run(self, result=None):
|
def run(self, result=None):
|
||||||
if result is None: result = self.defaultTestResult()
|
"""Runs the test case"""
|
||||||
|
|
||||||
result.startTest(self)
|
result.startTest(self)
|
||||||
testMethod = getattr(self, self._testMethodName)
|
testMethod = getattr(self, self._testMethodName)
|
||||||
@@ -214,7 +221,7 @@ class BaseTestCase(TrialTestCase):
|
|||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
result.addError(self, self._exc_info())
|
result.addError(self, sys.exc_info())
|
||||||
return
|
return
|
||||||
|
|
||||||
ok = False
|
ok = False
|
||||||
@@ -225,19 +232,20 @@ class BaseTestCase(TrialTestCase):
|
|||||||
self._waitForTest()
|
self._waitForTest()
|
||||||
ok = True
|
ok = True
|
||||||
except self.failureException:
|
except self.failureException:
|
||||||
result.addFailure(self, self._exc_info())
|
result.addFailure(self, sys.exc_info())
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
result.addError(self, self._exc_info())
|
result.addError(self, sys.exc_info())
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.tearDown()
|
self.tearDown()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
result.addError(self, self._exc_info())
|
result.addError(self, sys.exc_info())
|
||||||
ok = False
|
ok = False
|
||||||
if ok: result.addSuccess(self)
|
if ok:
|
||||||
|
result.addSuccess(self)
|
||||||
finally:
|
finally:
|
||||||
result.stopTest(self)
|
result.stopTest(self)
|
||||||
|
|||||||
Reference in New Issue
Block a user