Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Cloud:OpenStack:Icehouse
openstack-trove
0003-add-a-NoopPackagerMixin-class.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0003-add-a-NoopPackagerMixin-class.patch of Package openstack-trove
diff --git a/trove/guestagent/pkg.py b/trove/guestagent/pkg.py index 080a748..4225aac 100644 --- a/trove/guestagent/pkg.py +++ b/trove/guestagent/pkg.py @@ -21,6 +21,7 @@ import re from tempfile import NamedTemporaryFile import pexpect +import six from trove.common import exception from trove.common import utils @@ -73,7 +74,7 @@ class PkgBrokenError(exception.TroveError): pass -class BasePackagerMixin: +class BasePackagerMixin(object): def pexpect_kill_proc(self, child): child.delayafterclose = 1 @@ -394,17 +395,31 @@ class DebianPackagerMixin(BasePackagerMixin): % package_name) +class NoopPackagerMixin(BasePackagerMixin): + """A no-op packager which does no action, but logs all calls.""" + def __getattribute__(self, name): + def noop(*args, **kwargs): + LOG.warn(_("Tried to call the %(name)s method with " + "%(args)s %(kwargs)s on an unsupported operating " + "system. No action will be done.") % + dict(name=name, args=args or '', kwargs=kwargs or '')) + return True + return noop + + class BasePackage(type): def __new__(meta, name, bases, dct): - if operating_system.get_os() == operating_system.REDHAT: + os = operating_system.get_os() + if os == operating_system.REDHAT: bases += (RedhatPackagerMixin, ) - else: - # The default is debian + elif os == operating_system.DEBIAN: bases += (DebianPackagerMixin,) + else: + bases += (NoopPackagerMixin,) return super(BasePackage, meta).__new__(meta, name, bases, dct) -class Package(object): - - __metaclass__ = BasePackage +@six.add_metaclass(BasePackage) +class Package: + pass diff --git a/trove/tests/unittests/guestagent/test_pkg.py b/trove/tests/unittests/guestagent/test_pkg.py index 864b2f5..c6dc9e3 100644 --- a/trove/tests/unittests/guestagent/test_pkg.py +++ b/trove/tests/unittests/guestagent/test_pkg.py @@ -14,7 +14,7 @@ # under the License. import testtools -from mock import Mock, MagicMock +from mock import Mock, MagicMock, patch import pexpect from trove.common import utils from trove.guestagent import pkg @@ -451,3 +451,30 @@ class PkgRPMRemoveTestCase(testtools.TestCase): # test and verify self.assertRaises(pkg.PkgTimeout, self.pkg.pkg_remove, self.pkgName, 5000) + + +class PkgNoopInstallTestCase(testtools.TestCase): + def setUp(self): + super(PkgNoopInstallTestCase, self).setUp() + self.pkg = pkg.NoopPackagerMixin() + + def tearDown(self): + super(PkgNoopInstallTestCase, self).tearDown() + + def test_pkg_is_instaled_no_packages(self): + packages = [] + with patch.object(pkg.LOG, 'warn') as warn: + self.assertTrue(self.pkg.pkg_is_installed(packages)) + warn.assert_called_with( + "Tried to call the pkg_is_installed method with " + "([],) on an unsupported operating " + "system. No action will be done.") + + def test_pkg_is_instaled_yes(self): + packages = ["package1=1.0", "package2"] + with patch.object(pkg.LOG, 'warn') as warn: + self.assertTrue(self.pkg.pkg_is_installed(packages)) + warn.assert_called_with( + "Tried to call the pkg_is_installed method with " + "(['package1=1.0', 'package2'],) on an unsupported operating " + "system. No action will be done.")
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor