summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-08-05 03:21:52 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-08-05 03:21:52 +0000
commitc3bf5ad8579e6f09aba558a68de947b2be398619 (patch)
treefe2ea34541ff5a20d6ca3ef9bba82ea083157d2c /ipalib
parent74f5719078adfcfdf8b98bf97f0828dd150c840d (diff)
downloadfreeipa.git-c3bf5ad8579e6f09aba558a68de947b2be398619.tar.gz
freeipa.git-c3bf5ad8579e6f09aba558a68de947b2be398619.tar.xz
freeipa.git-c3bf5ad8579e6f09aba558a68de947b2be398619.zip
43: Fleshed out new plugable.API class; added corresponding unit tests
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/plugable.py11
-rw-r--r--ipalib/tests/test_plugable.py67
2 files changed, 77 insertions, 1 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index f298e97e..32cbe033 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -281,4 +281,13 @@ class Registrar(object):
class API(ReadOnly):
def __init__(self, registrar):
for (base, plugins) in registrar:
- pass
+ ns = NameSpace(self.__plugin_iter(base, plugins))
+ assert not hasattr(self, base.__name__)
+ object.__setattr__(self, base.__name__, ns)
+
+ def __plugin_iter(self, base, plugins):
+ assert issubclass(base.proxy, Proxy)
+ for cls in plugins:
+ plugin = cls(self)
+ assert plugin.api is self
+ yield base.proxy(plugin)
diff --git a/ipalib/tests/test_plugable.py b/ipalib/tests/test_plugable.py
index a6f1e7cd..f5d469af 100644
--- a/ipalib/tests/test_plugable.py
+++ b/ipalib/tests/test_plugable.py
@@ -309,3 +309,70 @@ def test_NameSpace():
def test_API():
assert issubclass(plugable.API, plugable.ReadOnly)
+
+ # Setup the test plugins, create the Registrar:
+ class ExampleProxy(plugable.Proxy):
+ __slots__ = ['method']
+
+ class base0(plugable.Plugin):
+ proxy = ExampleProxy
+
+ def method(self, n):
+ return n
+
+ class base1(plugable.Plugin):
+ proxy = ExampleProxy
+
+ def method(self, n):
+ return n + 1
+
+ r = plugable.Registrar(base0, base1)
+
+ class base0_plugin0(base0):
+ pass
+ r(base0_plugin0)
+
+ class base0_plugin1(base0):
+ pass
+ r(base0_plugin1)
+
+ class base0_plugin2(base0):
+ pass
+ r(base0_plugin2)
+
+ class base1_plugin0(base1):
+ pass
+ r(base1_plugin0)
+
+ class base1_plugin1(base1):
+ pass
+ r(base1_plugin1)
+
+ class base1_plugin2(base1):
+ pass
+ r(base1_plugin2)
+
+ registrants = tuple(r)
+
+ # Test API instance:
+ api = plugable.API(r)
+
+ def get_base(b):
+ return 'base%d' % b
+
+ def get_plugin(b, p):
+ return 'base%d_plugin%d' % (b, p)
+
+ for b in xrange(2):
+ base_name = get_base(b)
+ ns = getattr(api, base_name)
+ assert isinstance(ns, plugable.NameSpace)
+ assert read_only(api, base_name) is ns
+ assert len(ns) == 3
+ for p in xrange(3):
+ plugin_name = get_plugin(b, p)
+ proxy = ns[plugin_name]
+ assert isinstance(proxy, ExampleProxy)
+ assert proxy.name == plugin_name
+ assert read_only(ns, plugin_name) is proxy
+ assert read_only(proxy, 'method')(7) == 7 + b