diff --git a/rel-eng/packages/subscription-manager b/rel-eng/packages/subscription-manager index 5c960bd..ba49163 100644 --- a/rel-eng/packages/subscription-manager +++ b/rel-eng/packages/subscription-manager @@ -1 +1 @@ -1.10.14-5 ./ +1.10.14-6 ./ diff --git a/src/rct/printing.py b/src/rct/printing.py index 877d244..bcb965b 100644 --- a/src/rct/printing.py +++ b/src/rct/printing.py @@ -50,6 +50,13 @@ class ProductPrinter(object): if hasattr(product, 'brand_type'): brand_type = product.brand_type s.append("\t%s: %s" % (_("Brand Type"), xstr(brand_type))) + + brand_name = "" + if hasattr(product, 'brand_name'): + brand_name = product.brand_name + + s.append("\t%s: %s" % (_("Brand Name"), xstr(brand_name))) + return "%s\n" % '\n'.join(s) diff --git a/src/subscription_manager/entbranding.py b/src/subscription_manager/entbranding.py index ce1b358..e0d77ce 100644 --- a/src/subscription_manager/entbranding.py +++ b/src/subscription_manager/entbranding.py @@ -126,7 +126,7 @@ class ProductBrand(Brand): @classmethod def from_product(cls, product): - return cls(product.name) + return cls(product.brand_name) @staticmethod def format_brand(brand): diff --git a/src/subscription_manager/rhelentbranding.py b/src/subscription_manager/rhelentbranding.py index e175d7c..429d199 100644 --- a/src/subscription_manager/rhelentbranding.py +++ b/src/subscription_manager/rhelentbranding.py @@ -81,7 +81,7 @@ class RHELBrandPicker(entbranding.BrandPicker): branded_name_set = set([]) for cert, product in branded_certs: # uniq on product id and product name - branded_name_set.add(product.name) + branded_name_set.add(product.brand_name) if len(branded_name_set) == 1: # all the ent certs provide the same branding info, @@ -94,7 +94,7 @@ class RHELBrandPicker(entbranding.BrandPicker): for branded_cert in branded_certs: log.debug("Entitlement cert %s (%s) provided branded name information for (%s, %s)" % (branded_cert[0].serial, branded_cert[0].order.name, - branded_cert[1].id, branded_cert[1].name)) + branded_cert[1].id, branded_cert[1].brand_name)) return None def _get_branded_cert_products(self): @@ -155,7 +155,10 @@ class RHELBrandPicker(entbranding.BrandPicker): elif product.brand_type != 'OS': return False - if not product.name: + if not hasattr(product, 'brand_name'): + return False + + if not product.brand_name: return False return True diff --git a/subscription-manager.spec b/subscription-manager.spec index 492af14..cf2b05c 100644 --- a/subscription-manager.spec +++ b/subscription-manager.spec @@ -14,7 +14,7 @@ Name: subscription-manager Version: 1.10.14 -Release: 5%{?dist} +Release: 6%{?dist} Summary: Tools and libraries for subscription and repository management Group: System Environment/Base License: GPLv2 @@ -419,6 +419,9 @@ fi %endif %changelog +* Fri Mar 21 2014 ckozak 1.10.14-6 +- Use the new Product.brand_name for brand_name (alikins@redhat.com) + * Wed Mar 19 2014 ckozak 1.10.14-5 - 1070908: Don't count cpus without topo for lpar (alikins@redhat.com) - 865702: Dont render exc messages with bogus markup (alikins@redhat.com) diff --git a/test/certdata.py b/test/certdata.py index 04dbebb..7c5c455 100644 --- a/test/certdata.py +++ b/test/certdata.py @@ -242,6 +242,7 @@ Product: Arch: ALL Tags: Brand Type: + Brand Name: Product: ID: 37065 @@ -250,6 +251,7 @@ Product: Arch: ALL Tags: Brand Type: + Brand Name: Product: ID: 37067 @@ -258,6 +260,7 @@ Product: Arch: ALL Tags: Brand Type: + Brand Name: Product: ID: 37068 @@ -266,6 +269,7 @@ Product: Arch: ALL Tags: Brand Type: + Brand Name: Product: ID: 37069 @@ -274,6 +278,7 @@ Product: Arch: ALL Tags: Brand Type: + Brand Name: Product: ID: 37070 @@ -282,6 +287,7 @@ Product: Arch: ALL Tags: Brand Type: + Brand Name: Order: Name: Awesome OS Server Bundled @@ -402,6 +408,7 @@ Product: Arch: x86_64 Tags: Brand Type: + Brand Name: Order: Name: Awesome OS for x86_64 @@ -497,6 +504,7 @@ Product: Arch: x86_64 Tags: Brand Type: + Brand Name: """ @@ -527,7 +535,7 @@ Product: Arch: ALL Tags: Brand Type: - + Brand Name: """ IDENTITY_CERT_OUTPUT = """ diff --git a/test/stubs.py b/test/stubs.py index c7c4621..a93e770 100644 --- a/test/stubs.py +++ b/test/stubs.py @@ -119,7 +119,7 @@ class StubProduct(Product): def __init__(self, product_id, name=None, version=None, architectures=None, provided_tags=None, - os=None): + os=None, brand_name=None): # Initialize some defaults: if not name: @@ -138,7 +138,7 @@ class StubProduct(Product): super(StubProduct, self).__init__(id=product_id, name=name, version=version, architectures=architectures, provided_tags=provided_tags, - brand_type=os) + brand_type=os, brand_name=brand_name) class StubContent(Content): diff --git a/test/test_entbranding.py b/test/test_entbranding.py index 9957509..c0442d3 100644 --- a/test/test_entbranding.py +++ b/test/test_entbranding.py @@ -10,20 +10,25 @@ from subscription_manager import injection as inj class StubProduct(object): - def __init__(self, id=None, name=None, brand_type=None): + def __init__(self, id=None, name=None, + brand_type=None, brand_name=None): self.id = id # we need to test when these dont exist if name: self.name = name if brand_type: self.brand_type = brand_type + if brand_name: + self.brand_name = brand_name class DefaultStubProduct(object): - def __init__(self, id=123, name="Awesome OS", brand_type='OS'): + def __init__(self, id=123, name="Awesome OS", + brand_type='OS', brand_name='Awesome OS super'): self.id = id self.name = name self.brand_type = brand_type + self.brand_name = brand_name class BaseBrandFixture(fixture.SubManFixture): @@ -113,10 +118,12 @@ class TestRHELBrandInstaller(BaseBrandFixture): brand_arg = call_args[0][0] self.assertTrue(isinstance(brand_arg, entbranding.ProductBrand)) self.assertTrue(isinstance(brand_arg, rhelentbranding.RHELProductBrand)) - self.assertEquals("Awesome OS", brand_arg.name) + self.assertEquals('Awesome OS super', brand_arg.name) def test_no_need_to_update_branding(self): - stub_product = StubProduct(id=123, brand_type='OS', name=self.current_brand) + stub_product = StubProduct(id=123, brand_type='OS', + name="Some name", + brand_name=self.current_brand) mock_prod_dir = mock.NonCallableMock(name='MockProductDir') mock_prod_dir.get_installed_products.return_value = [stub_product.id] @@ -132,7 +139,7 @@ class TestRHELBrandInstaller(BaseBrandFixture): self.assertFalse(self.mock_install.called) - def test_no_os_on_product(self): + def test_no_brand_type_on_product(self): # no .os stub_product = StubProduct(id=123, name="Awesome OS Super") @@ -150,7 +157,7 @@ class TestRHELBrandInstaller(BaseBrandFixture): self.assertFalse(self.mock_install.called) - def test_no_name_on_product(self): + def test_brand_type_no_name_no_brand_name_on_product(self): stub_product = StubProduct(id=123, brand_type='OS') stub_product.name = None @@ -166,10 +173,95 @@ class TestRHELBrandInstaller(BaseBrandFixture): self.assertFalse(self.mock_install.called) + def test_no_brand_name_on_product(self): + stub_product = StubProduct(id=123, name="An Awesome OS", brand_type='OS') + stub_product.name = None + + mock_prod_dir = mock.NonCallableMock(name='MockProductDir') + mock_prod_dir.get_installed_products.return_value = [stub_product.id] + + mock_ent_cert = mock.Mock(name='MockEntCert') + mock_ent_cert.products = [stub_product] + self._inj_mock_entdir([mock_ent_cert]) + + brand_installer = self.brand_installer_class() + brand_installer.install() + + self.assertFalse(self.mock_install.called) + + def test_no_brand_type_no_brand_name_on_product(self): + stub_product = StubProduct(id=123, name="An Awesome OS") + stub_product.name = None + + mock_prod_dir = mock.NonCallableMock(name='MockProductDir') + mock_prod_dir.get_installed_products.return_value = [stub_product.id] + + mock_ent_cert = mock.Mock(name='MockEntCert') + mock_ent_cert.products = [stub_product] + self._inj_mock_entdir([mock_ent_cert]) + + brand_installer = self.brand_installer_class() + brand_installer.install() + + self.assertFalse(self.mock_install.called) + + def test_no_brand_type_brand_name_on_product(self): + stub_product = StubProduct(id=123, name="An Awesome OS", + brand_name="Branded Awesome OS") + stub_product.name = None + + mock_prod_dir = mock.NonCallableMock(name='MockProductDir') + mock_prod_dir.get_installed_products.return_value = [stub_product.id] + + mock_ent_cert = mock.Mock(name='MockEntCert') + mock_ent_cert.products = [stub_product] + self._inj_mock_entdir([mock_ent_cert]) + + brand_installer = self.brand_installer_class() + brand_installer.install() + + self.assertFalse(self.mock_install.called) + + def test_wrong_brand_type_brand_name_on_product(self): + stub_product = StubProduct(id=123, name="An Awesome OS", + brand_type='Middleware', + brand_name="Branded Awesome OS") + stub_product.name = None + + mock_prod_dir = mock.NonCallableMock(name='MockProductDir') + mock_prod_dir.get_installed_products.return_value = [stub_product.id] + + mock_ent_cert = mock.Mock(name='MockEntCert') + mock_ent_cert.products = [stub_product] + self._inj_mock_entdir([mock_ent_cert]) + + brand_installer = self.brand_installer_class() + brand_installer.install() + + self.assertFalse(self.mock_install.called) + + def test_wrong_brand_type_no_brand_name_on_product(self): + stub_product = StubProduct(id=123, name="An Awesome OS", + brand_type='Middleware') + stub_product.name = None + + mock_prod_dir = mock.NonCallableMock(name='MockProductDir') + mock_prod_dir.get_installed_products.return_value = [stub_product.id] + + mock_ent_cert = mock.Mock(name='MockEntCert') + mock_ent_cert.products = [stub_product] + self._inj_mock_entdir([mock_ent_cert]) + + brand_installer = self.brand_installer_class() + brand_installer.install() + + self.assertFalse(self.mock_install.called) + def test_multiple_matching_branded_products(self): stub_product = DefaultStubProduct() - stub_product_2 = StubProduct(id=321, brand_type='OS', name="Slightly Different Awesome OS Super") + stub_product_2 = StubProduct(id=321, brand_type='OS', name="Awesome", + brand_name="Slightly Different Awesome OS Super") mock_prod_dir = mock.NonCallableMock(name='MockProductDir') mock_prod_dir.get_installed_products.return_value = [stub_product.id, stub_product_2.id] @@ -259,7 +351,7 @@ class TestRhelAndMockBrandsInstaller(TestRHELBrandInstaller): brand_arg = call_args[0][0] self.assertTrue(isinstance(brand_arg, entbranding.ProductBrand)) self.assertTrue(isinstance(brand_arg, rhelentbranding.RHELProductBrand)) - self.assertEquals("Awesome OS", brand_arg.name) + self.assertEquals("Awesome OS super", brand_arg.name) # verify the install on all the installers got called count = 0 @@ -322,7 +414,7 @@ class TestRHELBrandPicker(BaseBrandFixture): def test_more_than_one_ent_cert_with_branding(self, mock_branded_certs): brand_picker = rhelentbranding.RHELBrandPicker([]) brand = brand_picker.get_brand() - self.assertEquals("Awesome OS", brand.name) + self.assertEquals("Awesome OS super", brand.name) @mock.patch("subscription_manager.rhelentbranding.RHELBrandPicker._get_branded_cert_products", return_value=[]) @@ -377,7 +469,9 @@ class TestRHELBrandPicker(BaseBrandFixture): stub_product = DefaultStubProduct() # same product id, different name - stub_product_2 = StubProduct(id=123, brand_type='OS', name='A Different Stub Product') + stub_product_2 = StubProduct(id=123, brand_type='OS', + name='A Different Stub Product', + brand_name='A Different branded Stub Product') mock_product_dir = mock.NonCallableMock() # note stub_product.id=123 will match the Product from both ents @@ -478,7 +572,7 @@ class TestRHELBrandPicker(BaseBrandFixture): # product.name is none no_name_stub_product = DefaultStubProduct() - no_name_stub_product.name = None + no_name_stub_product.brand_name = None self.assertFalse(brand_picker._is_rhel_branded_product(no_name_stub_product)) @@ -505,7 +599,7 @@ class TestProductBrand(BaseBrandFixture): def test_from_product(self): stub_product = DefaultStubProduct() brand = self.brand_class.from_product(stub_product) - self.assertEquals("Awesome OS", brand.name) + self.assertEquals(stub_product.brand_name, brand.name) def test_format_brand(self): fb = self.brand_class.format_brand('Blip')