From 580ae528bee423a385ca51e7c83b43a7b2d0becf Mon Sep 17 00:00:00 2001 From: Alex Kavanagh Date: Tue, 23 May 2017 11:58:03 +0100 Subject: [PATCH] Add a test_mocks to mock charmhelpers centrally Every reactive charm that uses charms.openstack and implements unit testing needs to mock charmhelpers, as otherwise the tests blow up. This patch centralises the mocking of charmhelpers to charms.openstack so that a charm layer can just import test_mocks and charmhelpers will be mocked out along with setting up a default charmhelpers.c.o.u.OPENSTACK_RELEASES so that when an OpenStackCharm() derived charm class won't fail on definition. Closes-Bug: #1693017 Change-Id: I5ac40617ee30e5f421ec16fc7592177a5e6aa166 --- charms_openstack/test_mocks.py | 54 ++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 charms_openstack/test_mocks.py diff --git a/charms_openstack/test_mocks.py b/charms_openstack/test_mocks.py new file mode 100644 index 0000000..7d7b480 --- /dev/null +++ b/charms_openstack/test_mocks.py @@ -0,0 +1,54 @@ +import sys +import mock + +charmhelpers = None +apt_pkg = None + + +def mock_charmhelpers(): + # Mock out charmhelpers so that we can test without it. + # also stops sideeffects from occuring. + global charmhelpers + global apt_pkg + charmhelpers = mock.MagicMock() + apt_pkg = mock.MagicMock() + sys.modules['apt_pkg'] = apt_pkg + sys.modules['charmhelpers'] = charmhelpers + sys.modules['charmhelpers.core'] = charmhelpers.core + sys.modules['charmhelpers.core.hookenv'] = charmhelpers.core.hookenv + sys.modules['charmhelpers.core.host'] = charmhelpers.core.host + sys.modules['charmhelpers.core.unitdata'] = charmhelpers.core.unitdata + sys.modules['charmhelpers.core.templating'] = charmhelpers.core.templating + sys.modules['charmhelpers.contrib'] = charmhelpers.contrib + sys.modules['charmhelpers.contrib.openstack'] = ( + charmhelpers.contrib.openstack) + sys.modules['charmhelpers.contrib.openstack.utils'] = ( + charmhelpers.contrib.openstack.utils) + sys.modules['charmhelpers.contrib.openstack.templating'] = ( + charmhelpers.contrib.openstack.templating) + sys.modules['charmhelpers.contrib.network'] = charmhelpers.contrib.network + sys.modules['charmhelpers.contrib.network.ip'] = ( + charmhelpers.contrib.network.ip) + sys.modules['charmhelpers.fetch'] = charmhelpers.fetch + sys.modules['charmhelpers.cli'] = charmhelpers.cli + sys.modules['charmhelpers.contrib.hahelpers'] = ( + charmhelpers.contrib.hahelpers) + sys.modules['charmhelpers.contrib.hahelpers.cluster'] = ( + charmhelpers.contrib.hahelpers.cluster) + + # mock in the openstack releases so that the tests can run + charmhelpers.contrib.openstack.utils.OPENSTACK_RELEASES = ( + 'diablo', + 'essex', + 'folsom', + 'grizzly', + 'havana', + 'icehouse', + 'juno', + 'kilo', + 'liberty', + 'mitaka', + 'newton', + 'ocata', + 'pike', + )