diff --git a/tooz/tests/__init__.py b/tooz/tests/__init__.py index e69de29b..76e27a52 100644 --- a/tooz/tests/__init__.py +++ b/tooz/tests/__init__.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2014 eNovance 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 functools + +import six +from testtools import testcase + + +def _skip_decorator(func): + @functools.wraps(func) + def skip_if_not_implemented(*args, **kwargs): + try: + return func(*args, **kwargs) + except NotImplementedError as e: + raise testcase.TestSkipped(str(e)) + return skip_if_not_implemented + + +class SkipNotImplementedMeta(type): + def __new__(cls, name, bases, local): + for attr in local: + value = local[attr] + if callable(value) and ( + attr.startswith('test_') or attr == 'setUp'): + local[attr] = _skip_decorator(value) + return type.__new__(cls, name, bases, local) + + +@six.add_metaclass(SkipNotImplementedMeta) +class TestCaseSkipNotImplemented(testcase.TestCase): + pass diff --git a/tooz/tests/test_coordination.py b/tooz/tests/test_coordination.py index 043e521b..d2adc793 100644 --- a/tooz/tests/test_coordination.py +++ b/tooz/tests/test_coordination.py @@ -22,6 +22,7 @@ import testscenarios from testtools import testcase import tooz.coordination +from tooz import tests from zake import fake_storage # Real ZooKeeper server scenario @@ -35,7 +36,8 @@ fake_zookeeper_tests = ('fake_zookeeper_tests', {'backend': 'zake', fake_storage}}) -class TestAPI(testscenarios.TestWithScenarios, testcase.TestCase): +class TestAPI(testscenarios.TestWithScenarios, + tests.TestCaseSkipNotImplemented): scenarios = [ zookeeper_tests,