summaryrefslogtreecommitdiffstats
path: root/ipalib
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-08-12 23:40:36 +0000
committerJason Gerard DeRose <jderose@redhat.com>2008-08-12 23:40:36 +0000
commit7db3aae1b26588b3650dae442b07dca0f33ab0c8 (patch)
tree4ab00720041d20b09f87ff74abc965a3f307746d /ipalib
parent64054a673c23b543450741fa11333bc627efeca3 (diff)
downloadfreeipa-7db3aae1b26588b3650dae442b07dca0f33ab0c8.tar.gz
freeipa-7db3aae1b26588b3650dae442b07dca0f33ab0c8.tar.xz
freeipa-7db3aae1b26588b3650dae442b07dca0f33ab0c8.zip
123: API.finalize() now raises AssetionError if called more than once; added corresponding unit tests
Diffstat (limited to 'ipalib')
-rw-r--r--ipalib/plugable.py4
-rw-r--r--ipalib/tests/test_plugable.py3
2 files changed, 7 insertions, 0 deletions
diff --git a/ipalib/plugable.py b/ipalib/plugable.py
index 8241d8eaa..71f03357c 100644
--- a/ipalib/plugable.py
+++ b/ipalib/plugable.py
@@ -480,6 +480,8 @@ class Registrar(ReadOnly):
class API(ReadOnly):
+ __finalized = False
+
def __init__(self, *allowed):
self.__keys = tuple(b.__name__ for b in allowed)
self.register = Registrar(*allowed)
@@ -489,6 +491,7 @@ class API(ReadOnly):
"""
Finalize the registration, instantiate the plugins.
"""
+ assert not self.__finalized, 'finalize() can only be called once'
d = {}
def plugin_iter(base, classes):
for cls in classes:
@@ -506,6 +509,7 @@ class API(ReadOnly):
plugin.__lock__()
assert plugin.__islocked__() is True
assert plugin.api is self
+ object.__setattr__(self, '_API__finalized', True)
def __iter__(self):
for key in self.__keys:
diff --git a/ipalib/tests/test_plugable.py b/ipalib/tests/test_plugable.py
index 3b082082f..89bb948e4 100644
--- a/ipalib/tests/test_plugable.py
+++ b/ipalib/tests/test_plugable.py
@@ -622,3 +622,6 @@ def test_API():
assert proxy.name == plugin_name
assert read_only(ns, plugin_name) is proxy
assert read_only(proxy, 'method')(7) == 7 + b
+
+ # Test that calling finilize again raises AssertionError:
+ raises(AssertionError, api.finalize)