summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell Bryant <rbryant@redhat.com>2012-06-04 15:24:27 -0400
committerRussell Bryant <rbryant@redhat.com>2012-06-04 15:25:52 -0400
commit874a3dad97b5d02e62d12946b976183f2ac0856d (patch)
tree070f7c6f5f9a90dde6967dd3da3a34b94d2c0862
parentffbffc3dcaf20a82b91a0b5fa48b74d6edf07d8e (diff)
Create testutils with skip decorators.
This patch creates openstack.common.testutils which includes some decorators used to conditionally skip tests. This is needed for the rpc unit tests. Change-Id: Ic6bc8d58f7dfcd9eb3acd2749c475b9d760b9578
-rw-r--r--openstack/common/testutils.py68
-rw-r--r--tests/unit/test_testutils.py43
2 files changed, 111 insertions, 0 deletions
diff --git a/openstack/common/testutils.py b/openstack/common/testutils.py
new file mode 100644
index 0000000..5c438e3
--- /dev/null
+++ b/openstack/common/testutils.py
@@ -0,0 +1,68 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+"""Utilities for unit tests."""
+
+import functools
+import nose
+
+
+class skip_test(object):
+ """Decorator that skips a test."""
+ # TODO(tr3buchet): remember forever what comstud did here
+ def __init__(self, msg):
+ self.message = msg
+
+ def __call__(self, func):
+ @functools.wraps(func)
+ def _skipper(*args, **kw):
+ """Wrapped skipper function."""
+ raise nose.SkipTest(self.message)
+ return _skipper
+
+
+class skip_if(object):
+ """Decorator that skips a test if condition is true."""
+ def __init__(self, condition, msg):
+ self.condition = condition
+ self.message = msg
+
+ def __call__(self, func):
+ @functools.wraps(func)
+ def _skipper(*args, **kw):
+ """Wrapped skipper function."""
+ if self.condition:
+ raise nose.SkipTest(self.message)
+ func(*args, **kw)
+ return _skipper
+
+
+class skip_unless(object):
+ """Decorator that skips a test if condition is not true."""
+ def __init__(self, condition, msg):
+ self.condition = condition
+ self.message = msg
+
+ def __call__(self, func):
+ @functools.wraps(func)
+ def _skipper(*args, **kw):
+ """Wrapped skipper function."""
+ if not self.condition:
+ raise nose.SkipTest(self.message)
+ func(*args, **kw)
+ return _skipper
diff --git a/tests/unit/test_testutils.py b/tests/unit/test_testutils.py
new file mode 100644
index 0000000..b3088ee
--- /dev/null
+++ b/tests/unit/test_testutils.py
@@ -0,0 +1,43 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 Red Hat, Inc.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import unittest
+
+from openstack.common import testutils
+
+
+class TestUtilsTestCase(unittest.TestCase):
+
+ @testutils.skip_test('test should be skipped')
+ def test_skip_test(self):
+ raise Exception('should have been skipped')
+
+ @testutils.skip_if(True, 'test should be skipped')
+ def test_skip_if_true(self):
+ raise Exception('should have been skipped')
+
+ @testutils.skip_if(False, 'test should not be skipped')
+ def test_skip_if_false(self):
+ pass
+
+ @testutils.skip_unless(True, 'test should not be skipped')
+ def test_skip_unless_true(self):
+ pass
+
+ @testutils.skip_unless(False, 'test should be skipped')
+ def test_skip_unless_false(self):
+ raise Exception('should have been skipped')