Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use abc for BaseCacheModule #10729

Merged
merged 1 commit into from
Apr 15, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
30 changes: 21 additions & 9 deletions v2/ansible/plugins/cache/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,42 @@
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.

from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import exceptions
from abc import ABCMeta, abstractmethod

from six import add_metaclass


class BaseCacheModule(object):
@add_metaclass(ABCMeta)
class BaseCacheModule:

@abstractmethod
def get(self, key):
raise exceptions.NotImplementedError
pass

@abstractmethod
def set(self, key, value):
raise exceptions.NotImplementedError
pass

@abstractmethod
def keys(self):
raise exceptions.NotImplementedError
pass

@abstractmethod
def contains(self, key):
raise exceptions.NotImplementedError
pass

@abstractmethod
def delete(self, key):
raise exceptions.NotImplementedError
pass

@abstractmethod
def flush(self):
raise exceptions.NotImplementedError
pass

@abstractmethod
def copy(self):
raise exceptions.NotImplementedError
pass
2 changes: 2 additions & 0 deletions v2/test-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ jinja2
httplib2
passlib
six
python-memcached
redis

# Test requirements
unittest2
Expand Down
82 changes: 82 additions & 0 deletions v2/test/plugins/test_cache.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# (c) 2012-2015, Michael DeHaan <michael.dehaan@gmail.com>
#
# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.

# Make coding more python3-ish
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

from ansible.compat.tests import unittest
from ansible.plugins.cache.base import BaseCacheModule
from ansible.plugins.cache.memcached import CacheModule as MemcachedCache
from ansible.plugins.cache.memory import CacheModule as MemoryCache
from ansible.plugins.cache.redis import CacheModule as RedisCache


class TestAbstractClass(unittest.TestCase):

def setUp(self):
pass

def tearDown(self):
pass

def test_subclass_error(self):
class CacheModule1(BaseCacheModule):
pass
with self.assertRaises(TypeError):
CacheModule1()

class CacheModule2(BaseCacheModule):
def get(self, key):
super(CacheModule2, self).get(key)

with self.assertRaises(TypeError):
CacheModule2()

def test_subclass_success(self):
class CacheModule3(BaseCacheModule):
def get(self, key):
super(CacheModule3, self).get(key)

def set(self, key, value):
super(CacheModule3, self).set(key, value)

def keys(self):
super(CacheModule3, self).keys()

def contains(self, key):
super(CacheModule3, self).contains(key)

def delete(self, key):
super(CacheModule3, self).delete(key)

def flush(self):
super(CacheModule3, self).flush()

def copy(self):
super(CacheModule3, self).copy()

self.assertIsInstance(CacheModule3(), CacheModule3)

def test_memcached_cachemodule(self):
self.assertIsInstance(MemcachedCache(), MemcachedCache)

def test_memory_cachemodule(self):
self.assertIsInstance(MemoryCache(), MemoryCache)

def test_redis_cachemodule(self):
self.assertIsInstance(RedisCache(), RedisCache)