summaryrefslogtreecommitdiffstats
path: root/openstack
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 /openstack
parentffbffc3dcaf20a82b91a0b5fa48b74d6edf07d8e (diff)
downloadoslo-874a3dad97b5d02e62d12946b976183f2ac0856d.tar.gz
oslo-874a3dad97b5d02e62d12946b976183f2ac0856d.tar.xz
oslo-874a3dad97b5d02e62d12946b976183f2ac0856d.zip
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
Diffstat (limited to 'openstack')
-rw-r--r--openstack/common/testutils.py68
1 files changed, 68 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