Skip to content
This repository has been archived by the owner on Mar 22, 2018. It is now read-only.

Commit

Permalink
added test cases for errors on init and install. addresses issue #32.
Browse files Browse the repository at this point in the history
  • Loading branch information
Mario Frasca committed Jan 5, 2015
1 parent 9118156 commit 598fd26
Showing 1 changed file with 88 additions and 5 deletions.
93 changes: 88 additions & 5 deletions bauble/test/test_pluginmgr.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
from bauble.test import BaubleTestCase, uri
import bauble.pluginmgr as pluginmgr
from bauble.pluginmgr import PluginRegistry
from bauble.error import BaubleError
import bauble.utils as utils


class A(pluginmgr.Plugin):
Expand Down Expand Up @@ -54,6 +56,54 @@ def install(cls, *args, **kwargs):
cls.installed = True


class FailingInitPlugin(pluginmgr.Plugin):
initialized = False
installed = False
@classmethod
def init(cls):
cls.initialized = True
raise BaubleError("can't init")
@classmethod
def install(cls, *args, **kwargs):
cls.installed = True


class DependsOnFailingInitPlugin(pluginmgr.Plugin):
depends = ['FailingInitPlugin']
initialized = False
installed = False
@classmethod
def init(cls):
cls.initialized = True
@classmethod
def install(cls, *args, **kwargs):
cls.installed = True


class FailingInstallPlugin(pluginmgr.Plugin):
initialized = False
installed = False
@classmethod
def init(cls):
cls.initialized = True
@classmethod
def install(cls, *args, **kwargs):
cls.installed = True
raise BaubleError("can't install")


class DependsOnFailingInstallPlugin(pluginmgr.Plugin):
depends = ['FailingInstallPlugin']
initialized = False
installed = False
@classmethod
def init(cls):
cls.initialized = True
@classmethod
def install(cls, *args, **kwargs):
cls.installed = True


class PluginMgrTests(BaubleTestCase):

def test_install(self):
Expand Down Expand Up @@ -95,6 +145,7 @@ def setUp(self):
A.initialized = A.installed = False
B.initialized = B.installed = False
C.initialized = C.installed = False
bauble.pluginmgr.plugins = {}

def tearDown(self):
for z in [A, B, C]:
Expand All @@ -107,17 +158,49 @@ def test_command_handler(self):
"""
pass

def test_init(self):
"""
Test bauble.pluginmgr.init()
"""
def test_successfulinit(self):
"bauble.pluginmgr.init() should be successful"

db.open(uri, verify=False)
db.create(False)
bauble.pluginmgr.plugins[C.__name__] = C()
bauble.pluginmgr.plugins[B.__name__] = B()
bauble.pluginmgr.plugins[A.__name__] = A()
bauble.pluginmgr.init(force=True)
self.assert_(A.initialized and B.initialized and C.initialized)
self.assertTrue(A.initialized)
self.assertTrue(B.initialized)
self.assertTrue(C.initialized)

def test_init_with_problem(self):
"bauble.pluginmgr.init() using plugin which can't initialize"

old_dialog = utils.message_details_dialog
self.invoked = False

def fake_dialog(a,b,c):
"trap dialog box invocation"
self.invoked = True

utils.message_details_dialog = fake_dialog

db.open(uri, verify=False)
db.create(False)
bauble.pluginmgr.plugins[FailingInitPlugin.__name__] = FailingInitPlugin()
bauble.pluginmgr.plugins[DependsOnFailingInitPlugin.__name__] = DependsOnFailingInitPlugin()
bauble.pluginmgr.init(force=True)
self.assertTrue(self.invoked)
# self.assertFalse(FailingInitPlugin.initialized) # irrelevant
self.assertFalse(DependsOnFailingInitPlugin.initialized)
utils.message_details_dialog = old_dialog

def test_install_with_problem(self):
"bauble.pluginmgr.init() using plugin which can't install"

db.open(uri, verify=False)
db.create(False)
bauble.pluginmgr.plugins[FailingInstallPlugin.__name__] = FailingInstallPlugin()
bauble.pluginmgr.plugins[DependsOnFailingInstallPlugin.__name__] = DependsOnFailingInstallPlugin()
self.assertRaises(BaubleError, bauble.pluginmgr.init, force=True)

def test_install(self):
"""
Expand Down

0 comments on commit 598fd26

Please sign in to comment.