diff --git a/Makefile b/Makefile index f773ca4..f37573b 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ EXAMPLE_PLUGINS_SRC_DIR := example-plugins/ YUM_PLUGINS_SRC_DIR := $(BASE_SRC_DIR)/plugins ALL_SRC_DIRS := $(SRC_DIR) $(RCT_SRC_DIR) $(RD_SRC_DIR) $(DAEMONS_SRC_DIR) $(EXAMPLE_PLUGINS_SRC_DIR) $(YUM_PLUGINS_SRC_DIR) -CFLAGS = -Wall -g +CFLAGS ?= -g -Wall %.pyc: %.py python -c "import py_compile; py_compile.compile('$<')" diff --git a/etc-conf/rhsm-debug.completion.sh b/etc-conf/rhsm-debug.completion.sh index 36483fb..14227f3 100644 --- a/etc-conf/rhsm-debug.completion.sh +++ b/etc-conf/rhsm-debug.completion.sh @@ -17,7 +17,7 @@ _rhsm-debug() system) case "${cur}" in -*) - local opts="--destination --no-archive ${_rhsm_debug_common_opts}" + local opts="--destination --no-archive --sos ${_rhsm_debug_common_opts}" COMPREPLY=( $( compgen -W "${opts}" -- "$cur" ) ) return 0 ;; diff --git a/man/rhsm-debug.8 b/man/rhsm-debug.8 index ef2151f..74e69dc 100644 --- a/man/rhsm-debug.8 +++ b/man/rhsm-debug.8 @@ -55,6 +55,10 @@ The directory to place the resulting debug data. The default is /tmp. .B --no-archive Generates an uncompressed directory intead of a gzipped file. +.TP +.B --sos +Eliminiates the information that has already been collected by the SOS report process. + .SH BUGS This tool is part of Red Hat Subscription Manager. To file bugs against this command-line tool, go to , and select Red Hat > Red Hat Enterprise Linux > subscription-manager. diff --git a/rel-eng/packages/subscription-manager b/rel-eng/packages/subscription-manager index b52ea0a..abf9a7a 100644 --- a/rel-eng/packages/subscription-manager +++ b/rel-eng/packages/subscription-manager @@ -1 +1 @@ -1.10.14-1 ./ +1.10.14-2 ./ diff --git a/rel-eng/releasers.conf b/rel-eng/releasers.conf index 5535100..fe97c99 100644 --- a/rel-eng/releasers.conf +++ b/rel-eng/releasers.conf @@ -1,56 +1,4 @@ -[yum-f19-x86_64] -releaser = tito.release.YumRepoReleaser -builder = tito.builder.MockBuilder -builder.mock = fedora-19-x86_64 -rsync = fedorapeople.org:/srv/repos/candlepin/subscription-manager/fedora-19/x86_64/ - -[yum-f19-i386] -releaser = tito.release.YumRepoReleaser -builder = tito.builder.MockBuilder -builder.mock = fedora-19-i386 -rsync = fedorapeople.org:/srv/repos/candlepin/subscription-manager/fedora-19/i386/ - -[yum-f18-x86_64] -releaser = tito.release.YumRepoReleaser -builder = tito.builder.MockBuilder -builder.mock = fedora-18-x86_64 -rsync = fedorapeople.org:/srv/repos/candlepin/subscription-manager/fedora-18/x86_64/ - -[yum-f18-i386] -releaser = tito.release.YumRepoReleaser -builder = tito.builder.MockBuilder -builder.mock = fedora-18-i386 -rsync = fedorapeople.org:/srv/repos/candlepin/subscription-manager/fedora-18/i386/ - -[yum-el6-x86_64] -releaser = tito.release.YumRepoReleaser -builder = tito.builder.MockBuilder -builder.mock = epel-6-x86_64 -rsync = fedorapeople.org:/srv/repos/candlepin/subscription-manager/epel-6Server/x86_64/ fedorapeople.org:/srv/repos/candlepin/subscription-manager/epel-6/x86_64/ - -[yum-el6-i386] -releaser = tito.release.YumRepoReleaser -builder = tito.builder.MockBuilder -builder.mock = epel-6-i386 -rsync = fedorapeople.org:/srv/repos/candlepin/subscription-manager/epel-6Server/i386/ fedorapeople.org:/srv/repos/candlepin/subscription-manager/epel-6/i386/ - -[yum-el5-x86_64] -releaser = tito.release.YumRepoReleaser -builder = tito.builder.MockBuilder -builder.mock = epel-5-x86_64 -rsync = fedorapeople.org:/srv/repos/candlepin/subscription-manager/epel-5Server/x86_64/ fedorapeople.org:/srv/repos/candlepin/subscription-manager/epel-5/x86_64/ - -[yum-el5-i386] -releaser = tito.release.YumRepoReleaser -builder = tito.builder.MockBuilder -builder.mock = epel-5-i386 -rsync = fedorapeople.org:/srv/repos/candlepin/subscription-manager/epel-5Server/i386/ fedorapeople.org:/srv/repos/candlepin/subscription-manager/epel-5/i386/ - [rhel-7.0] releaser = tito.release.DistGitReleaser branches = rhel-7.0 -[fedora] -releaser = tito.release.FedoraGitReleaser -branches = master f20 f19 - diff --git a/rel-eng/tito.props b/rel-eng/tito.props index 7e29003..17792b0 100644 --- a/rel-eng/tito.props +++ b/rel-eng/tito.props @@ -1,8 +1,4 @@ [globalconfig] -default_builder = tito.builder.Builder -default_tagger = tito.tagger.VersionTagger - -[cvs] -cvsroot = :gserver:cvs.devel.redhat.com:/cvs/dist -branches = RHEL-6 +default_builder = tito.builder.UpstreamBuilder +default_tagger = tito.tagger.ReleaseTagger diff --git a/src/rhsm_debug/debug_commands.py b/src/rhsm_debug/debug_commands.py index e56ce0d..22ef9ad 100644 --- a/src/rhsm_debug/debug_commands.py +++ b/src/rhsm_debug/debug_commands.py @@ -20,6 +20,7 @@ import shutil import logging import tarfile from datetime import datetime +from shutil import ignore_patterns import subscription_manager.injection as inj import subscription_manager.managercli as managercli @@ -38,6 +39,7 @@ NOT_REGISTERED = _("This system is not yet registered. Try 'subscription-manager ASSEMBLE_DIR = '/var/spool/rhsm/debug' ROOT_READ_ONLY = 0600 +KEY_IGNORE_PATS = ['*key.pem'] class SystemCommand(CliCommand): @@ -54,6 +56,9 @@ class SystemCommand(CliCommand): self.parser.add_option("--no-archive", action='store_false', default=True, dest="archive", help=_("data will be in an uncompressed directory")) + self.parser.add_option("--sos", action='store_true', + default=False, dest="sos", + help=_("only data not already included in sos report will be collected")) def _get_usage(self): return _("%%prog %s [OPTIONS] ") % self.name @@ -103,12 +108,18 @@ class SystemCommand(CliCommand): self._get_version_info()) # FIXME: we need to anon proxy passwords? - self._copy_directory('/etc/rhsm', content_path) - self._copy_directory('/var/log/rhsm', content_path) - self._copy_directory('/var/lib/rhsm', content_path) - self._copy_directory(cfg.get('rhsm', 'productCertDir'), content_path) - self._copy_directory(cfg.get('rhsm', 'entitlementCertDir'), content_path) - self._copy_directory(cfg.get('rhsm', 'consumerCertDir'), content_path) + sos = self.options.sos + defaults = cfg.defaults() + if defaults['productcertdir'] != cfg.get('rhsm', 'productCertDir') or not sos: + self._copy_cert_directory(cfg.get('rhsm', 'productCertDir'), content_path) + if defaults['entitlementcertdir'] != cfg.get('rhsm', 'entitlementCertDir') or not sos: + self._copy_cert_directory(cfg.get('rhsm', 'entitlementCertDir'), content_path) + if defaults['consumercertdir'] != cfg.get('rhsm', 'consumerCertDir') or not sos: + self._copy_cert_directory(cfg.get('rhsm', 'consumerCertDir'), content_path) + if not sos: + self._copy_directory('/etc/rhsm', content_path) + self._copy_directory('/var/log/rhsm', content_path) + self._copy_directory('/var/lib/rhsm', content_path) # build an archive by default if self.options.archive: @@ -158,11 +169,20 @@ class SystemCommand(CliCommand): with open(path, "w+") as fo: fo.write(json.dumps(content, indent=4, sort_keys=True)) - def _copy_directory(self, src_path, dest_path): + def _copy_directory(self, src_path, dest_path, ignore_pats=[]): rel_path = src_path if os.path.isabs(src_path): rel_path = src_path[1:] - shutil.copytree(src_path, os.path.join(dest_path, rel_path)) + if ignore_pats is not None: + shutil.copytree(src_path, os.path.join(dest_path, rel_path), + ignore=ignore_patterns(*ignore_pats)) + else: + shutil.copytree(src_path, os.path.join(dest_path, rel_path)) + + def _copy_cert_directory(self, src_path, dest_path): + self._copy_directory(src_path, + dest_path, + KEY_IGNORE_PATS) def _get_assemble_dir(self): return ASSEMBLE_DIR diff --git a/src/subscription_manager/gui/data/choose_server.glade b/src/subscription_manager/gui/data/choose_server.glade index b913a42..15572a8 100644 --- a/src/subscription_manager/gui/data/choose_server.glade +++ b/src/subscription_manager/gui/data/choose_server.glade @@ -156,18 +156,19 @@ True False - 25 + 5 I will use an Activation Key True True False + 0 True - True - True + False + False 0 @@ -175,7 +176,8 @@ True False - 16 + 0 + 5 True @@ -187,7 +189,7 @@ - True + False False 1 @@ -198,7 +200,6 @@ 2 1 2 - GTK_EXPAND diff --git a/src/subscription_manager/productid.py b/src/subscription_manager/productid.py index 4c3cdf2..698f5d2 100644 --- a/src/subscription_manager/productid.py +++ b/src/subscription_manager/productid.py @@ -19,7 +19,6 @@ import gettext from gzip import GzipFile import logging import os -import re import types import yum @@ -27,6 +26,7 @@ from rhsm.certificate import create_from_pem from subscription_manager.certdirectory import Directory from subscription_manager.injection import PLUGIN_MANAGER, require +from subscription_manager import rhelproduct import subscription_manager.injection as inj from rhsm import ourjson as json @@ -101,23 +101,6 @@ class ProductDatabase: return self.dir.abspath('productid.js') -class RHELProductMatcher(object): - def __init__(self, product=None): - self.product = product - # Match "rhel-6" or "rhel-11" - # but not "rhel-6-server" or "rhel-6-server-highavailabilty" - self.pattern = "rhel-\d+$" - - def is_rhel(self): - """return true if this is a rhel product cert""" - - for tag in self.product.provided_tags: - if re.match(self.pattern, tag): - return True - - return False - - class ProductManager: """Manager product certs, detecting when they need to be installed, or deleted. @@ -395,7 +378,7 @@ class ProductManager: # is not 'active'. So it ends up deleting the product cert for rhel since # it appears it is not being used. It is kind of a strange case for the # base os product cert, so we hardcode a special case here. - rhel_matcher = RHELProductMatcher(p) + rhel_matcher = rhelproduct.RHELProductMatcher(p) if rhel_matcher.is_rhel(): delete_product_cert = False diff --git a/src/subscription_manager/release.py b/src/subscription_manager/release.py index 228b261..4b4fb9d 100644 --- a/src/subscription_manager/release.py +++ b/src/subscription_manager/release.py @@ -27,6 +27,7 @@ import rhsm.config from subscription_manager.facts import Facts from subscription_manager import listing +from subscription_manager import rhelproduct _ = gettext.gettext @@ -55,21 +56,21 @@ class ReleaseBackend(object): prod_dir=self.product_dir) # find the rhel product - rhel_product = None + release_product = None installed_products = self.product_dir.get_installed_products() for product_hash in installed_products: product_cert = installed_products[product_hash] products = product_cert.products for product in products: - product_tags = product.provided_tags + rhel_matcher = rhelproduct.RHELProductMatcher(product) + if rhel_matcher.is_rhel(): + release_product = product - if self._is_rhel(product_tags): - rhel_product = product - - if rhel_product is None: + if release_product is None: + log.info("No products with RHEL product tags found") return [] - entitlements = self.entitlement_dir.list_for_product(rhel_product.id) + entitlements = self.entitlement_dir.list_for_product(release_product.id) listings = [] for entitlement in entitlements: contents = entitlement.content @@ -78,7 +79,7 @@ class ReleaseBackend(object): # see bz #820639 if not content.enabled: continue - if self._is_correct_rhel(rhel_product.provided_tags, + if self._is_correct_rhel(release_product.provided_tags, content.required_tags): listing_path = self._build_listing_path(content.url) listings.append(listing_path) @@ -125,22 +126,8 @@ class ReleaseBackend(object): # FIXME: cleanup paths ("//"'s, etc) return listing_path - def _is_rhel(self, product_tags): - #easy to pass a string instead of a list - assert not isinstance(product_tags, basestring) - - for product_tag in product_tags: - # so in theory, we should only have one rhel - # product. Not sure what to do if we have - # more than one. Probably throw an error - # TESTME - if product_tag.split('-', 1)[0] == "rhel": - # we only need to match the first hit - return True - log.info("No products with RHEL product tags found") - return False - # require tags provided by installed products? + def _is_correct_rhel(self, product_tags, content_tags): # easy to pass a string instead of a list assert not isinstance(product_tags, basestring) diff --git a/src/subscription_manager/rhelproduct.py b/src/subscription_manager/rhelproduct.py new file mode 100644 index 0000000..64192a6 --- /dev/null +++ b/src/subscription_manager/rhelproduct.py @@ -0,0 +1,43 @@ +# +# Copyright (c) 2014 Red Hat, Inc. +# +# This software is licensed to you under the GNU General Public License, +# version 2 (GPLv2). There is NO WARRANTY for this software, express or +# implied, including the implied warranties of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 +# along with this software; if not, see +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. +# +# Red Hat trademarks are not licensed under GPLv2. No permission is +# granted to use or replicate Red Hat trademarks that are incorporated +# in this software or its documentation. +# +# +# RHEL product specific code +# + +import re + + +# NOTE: This class compares a Product that could be from a ProductCertificate +# or from an Entitlement. Product's from Entitlements may include a +# brand_type attribute. A Product that represents a RHEL base os +# may or may not be a RHEL "branded" Product. See rhelentbranding for +# code that handles finding and comparing RHEL "branded" Product objects. +# +class RHELProductMatcher(object): + """Check a Product object to see if it is a RHEL product. + + Compares the provided tags to see if any provide 'rhel-VERSION'. + """ + def __init__(self, product=None): + self.product = product + # Match "rhel-6" or "rhel-11" + # but not "rhel-6-server" or "rhel-6-server-highavailabilty" + self.pattern = "rhel-\d+$" + + def is_rhel(self): + """return true if this is a rhel product cert""" + + return any([re.match(self.pattern, tag) + for tag in self.product.provided_tags]) diff --git a/subscription-manager.spec b/subscription-manager.spec index 1fdb3c3..02eaafb 100644 --- a/subscription-manager.spec +++ b/subscription-manager.spec @@ -6,6 +6,9 @@ %define rhsm_plugins_dir /usr/share/rhsm-plugins + +%global _hardened_build 1 + # A couple files are for RHEL 5 only: %if 0%{?rhel} == 5 %define el5 1 @@ -13,7 +16,7 @@ Name: subscription-manager Version: 1.10.14 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Tools and libraries for subscription and repository management Group: System Environment/Base License: GPLv2 @@ -140,7 +143,7 @@ subscriptions %setup -q %build -make -f Makefile +make -f Makefile CFLAGS="%{optflags}" %install rm -rf %{buildroot} @@ -246,6 +249,7 @@ rm -rf %{buildroot} %{_datadir}/rhsm/subscription_manager/release.py* %{_datadir}/rhsm/subscription_manager/repolib.py* %{_datadir}/rhsm/subscription_manager/rhelentbranding.py* +%{_datadir}/rhsm/subscription_manager/rhelproduct.py* %{_datadir}/rhsm/subscription_manager/utils.py* %{_datadir}/rhsm/subscription_manager/printing_utils.py* %{_datadir}/rhsm/subscription_manager/validity.py* @@ -418,6 +422,14 @@ fi %endif %changelog +* Tue Feb 18 2014 ckozak 1.10.14-2 +- updated tito.props to rev release (ckozak@redhat.com) +- 958016: use rpm %%{optflags} and _hardended_build (alikins@redhat.com) +- 851325: Tweak activation key checkbox to left (alikins@redhat.com) +- 1044596: Don't match beta product tags for release (alikins@redhat.com) +- 1060727: Changes to rhsm-debug for sos report (wpoteat@redhat.com) +- removed other releasers (ckozak@redhat.com) + * Tue Feb 11 2014 ckozak 1.10.14-1 - Use glob for finding entitlement certs to remove. (dgoodwin@redhat.com) - Make sure entitlement cert directory exists before we clean it out. diff --git a/test/test_productid.py b/test/test_productid.py index f1e6162..fbac60b 100644 --- a/test/test_productid.py +++ b/test/test_productid.py @@ -151,81 +151,6 @@ class TestProductDatabase(unittest.TestCase): self.assertEquals(len_content, len_content2) -# matches: -# rhel-6 -# not matches -# rhel-6-server-highavailibity -# rhel-6-computenode-hpn -# rhel-6-hpn -# rhel-6-server-resilientstorage -# rhel-6-resilientstorage -class TestRHELProductMatcher(SubManFixture): - - matches = ["rhel-6,rhel-6-client", - "rhel-6,rhel-6-client", - "rhel-6,rhel-6-computenode", - "rhel-6,rhel-6-server", - "rhel-6,rhel-6-ibm-power", - "rhel-6,rhel-6-ibm-system-z", - "rhel-6,rhel-6-server", - "rhel-6,rhel-6-workstation", - "rhel-6,rhel-6-workstation", - "rhel-11", - "rhel-6,rhel-6-someotherthing", - "rhel-11,rhel-11-something"] - - not_matches = ["rhel-5-server-scalablefilesystem,rhel-5-scalablefilesystem", - "rhel-5-server-clusterstorage,rhel-5-clusterstorage", - "rhel-6-server-highavailibity", - "rhel-6-server-loadbalancer,rhel-6-loadbalancer", - "rhel-6-ibm-system-z", - "rhel-somethingelse", - "rhel", - "rhel-rhel-rhelly-rhel", - "rhel-", - "rhev-3", - "what-is-this-rhel-6", - "not-rhel-6", - "stillnotrhel-6", - "rhel-6-rhel-6", - "el-6", - "rhel-6.1", - "rhel-11-but-this-rhel-goes-to-11", - "rhel-11.11", - "fedora-20", - "awsomeos-11", - "6"] - - def test_matches(self): - for tag in self.matches: - self._assert_is_rhel(tag) - - def test_not_matches(self): - for tag in self.not_matches: - self._assert_is_not_rhel(tag) - - def _assert_is_rhel(self, tags): - matcher = self._build_matcher(tags) - is_rhel = matcher.is_rhel() - if not is_rhel: - self.fail("RHELProductMatcher fail: %s is a rhel product tag but matcher failed" % tags) - - def _assert_is_not_rhel(self, tags): - matcher = self._build_matcher(tags) - is_rhel = matcher.is_rhel() - if is_rhel: - self.fail("RHELProductMatcher fail: %s is NOT a rhel product tag but matcher did not fail" % tags) - - def _build_matcher(self, tags): - # NOTE: Matcher only looks at tags atm - product = stubs.StubProduct("69", "Red Hat Enterprise Linux Server", - version="6.2", - provided_tags=tags) - - matcher = productid.RHELProductMatcher(product) - return matcher - - class TestProductManager(SubManFixture): def setUp(self): diff --git a/test/test_release.py b/test/test_release.py index 0775f98..1d7e2d0 100644 --- a/test/test_release.py +++ b/test/test_release.py @@ -56,26 +56,70 @@ class TestReleaseBackend(fixture.SubManFixture): stub_product = stubs.StubProduct("rhel-6") stub_entitlement_certs = [stubs.StubEntitlementCertificate(stub_product, content=stub_contents)] - stub_entitlement_dir = stubs.StubEntitlementDirectory(stub_entitlement_certs) + self.stub_entitlement_dir = stubs.StubEntitlementDirectory(stub_entitlement_certs) - stub_product_dir = stubs.StubProductDirectory( + self.stub_product_dir = stubs.StubProductDirectory( [stubs.StubProductCertificate( stubs.StubProduct("rhel-6", - provided_tags="rhel-6-stub"),)]) + provided_tags="rhel-6,rhel-6-stub"),)]) def get_versions(dummy): return versions - stub_content_connection = stubs.StubContentConnection() - stub_content_connection.get_versions = get_versions + self.stub_content_connection = stubs.StubContentConnection() + self.stub_content_connection.get_versions = get_versions - self.rb = release.ReleaseBackend(ent_dir=stub_entitlement_dir, - prod_dir=stub_product_dir, - content_connection=stub_content_connection) + self.rb = release.ReleaseBackend(ent_dir=self.stub_entitlement_dir, + prod_dir=self.stub_product_dir, + content_connection=self.stub_content_connection) def test_get_releases(self): releases = self.rb.get_releases() self.assertNotEquals([], releases) + def test_get_releases_no_rhel(self): + stub_product_dir = stubs.StubProductDirectory( + [stubs.StubProductCertificate( + stubs.StubProduct("rhel-6-something", + provided_tags="rhel-6-something,rhel-6-stub"),)]) + + self.rb = release.ReleaseBackend(ent_dir=self.stub_entitlement_dir, + prod_dir=stub_product_dir, + content_connection=self.stub_content_connection) + releases = self.rb.get_releases() + self.assertEquals([], releases) + + def test_get_releases_rhel_no_content(self): + + stub_content_5 = stubs.StubContent("c5", required_tags="AwesomeOS", + gpg=None, enabled="1") + + stub_product = stubs.StubProduct("rhel-6") + stub_entitlement_certs = [stubs.StubEntitlementCertificate(stub_product, + content=[stub_content_5])] + + stub_entitlement_dir = stubs.StubEntitlementDirectory(stub_entitlement_certs) + self.rb = release.ReleaseBackend(ent_dir=stub_entitlement_dir, + prod_dir=self.stub_product_dir, + content_connection=self.stub_content_connection) + releases = self.rb.get_releases() + self.assertEquals([], releases) + + def test_get_releases_rhel_no_enabled_content(self): + + stub_content_6 = stubs.StubContent("c6", required_tags="rhel-6", + gpg=None, enabled="0") + + stub_product = stubs.StubProduct("rhel-6") + stub_entitlement_certs = [stubs.StubEntitlementCertificate(stub_product, + content=[stub_content_6])] + + stub_entitlement_dir = stubs.StubEntitlementDirectory(stub_entitlement_certs) + self.rb = release.ReleaseBackend(ent_dir=stub_entitlement_dir, + prod_dir=self.stub_product_dir, + content_connection=self.stub_content_connection) + releases = self.rb.get_releases() + self.assertEquals([], releases) + def test_get_releases_throws_exception(self): with mock.patch.object(self.rb, 'content_connection') as mock_cc: mock_cc.get_versions.side_effect = \ @@ -93,14 +137,6 @@ class TestReleaseBackend(fixture.SubManFixture): releases = self.rb.get_releases() self.assertEquals([], releases) - def test_is_rhel(self): - ir = self.rb._is_rhel(["rhel-6-test"]) - self.assertTrue(ir) - - def test_is_not_rhel(self): - ir = self.rb._is_rhel(["awesome-test"]) - self.assertFalse(ir) - def test_is_correct_rhel(self): icr = self.rb._is_correct_rhel(["rhel-6-test"], ["rhel-6"]) self.assertTrue(icr) diff --git a/test/test_rhelproduct.py b/test/test_rhelproduct.py new file mode 100644 index 0000000..db8049a --- /dev/null +++ b/test/test_rhelproduct.py @@ -0,0 +1,81 @@ + +import stubs + +from subscription_manager import rhelproduct + +from fixture import SubManFixture + + +# matches: +# rhel-6 +# not matches +# rhel-6-server-highavailibity +# rhel-6-computenode-hpn +# rhel-6-hpn +# rhel-6-server-resilientstorage +# rhel-6-resilientstorage +class TestRHELProductMatcher(SubManFixture): + + matches = ["rhel-6,rhel-6-client", + "rhel-6,rhel-6-client", + "rhel-6,rhel-6-computenode", + "rhel-6,rhel-6-server", + "rhel-6,rhel-6-ibm-power", + "rhel-6,rhel-6-ibm-system-z", + "rhel-6,rhel-6-server", + "rhel-6,rhel-6-workstation", + "rhel-6,rhel-6-workstation", + "rhel-11", + "rhel-6,rhel-6-someotherthing", + "rhel-11,rhel-11-something"] + + not_matches = ["rhel-5-server-scalablefilesystem,rhel-5-scalablefilesystem", + "rhel-5-server-clusterstorage,rhel-5-clusterstorage", + "rhel-6-server-highavailibity", + "rhel-6-server-loadbalancer,rhel-6-loadbalancer", + "rhel-6-ibm-system-z", + "rhel-somethingelse", + "rhel", + "rhel-rhel-rhelly-rhel", + "rhel-", + "rhev-3", + "what-is-this-rhel-6", + "not-rhel-6", + "stillnotrhel-6", + "rhel-6-rhel-6", + "el-6", + "rhel-6.1", + "rhel-11-but-this-rhel-goes-to-11", + "rhel-11.11", + "fedora-20", + "awsomeos-11", + "6"] + + def test_matches(self): + for tag in self.matches: + self._assert_is_rhel(tag) + + def test_not_matches(self): + for tag in self.not_matches: + self._assert_is_not_rhel(tag) + + def _assert_is_rhel(self, tags): + matcher = self._build_matcher(tags) + is_rhel = matcher.is_rhel() + if not is_rhel: + self.fail("RHELProductMatcher fail: %s is a rhel product tag but matcher failed" % tags) + + def _assert_is_not_rhel(self, tags): + matcher = self._build_matcher(tags) + is_rhel = matcher.is_rhel() + if is_rhel: + self.fail("RHELProductMatcher fail: %s is NOT a rhel product tag but matcher did not fail" % tags) + + def _build_matcher(self, tags): + # NOTE: Matcher only looks at tags atm + product = stubs.StubProduct("69", "Red Hat Enterprise Linux Server", + version="6.2", + provided_tags=tags) + + matcher = rhelproduct.RHELProductMatcher(product) + return matcher diff --git a/test/test_rhsm_debug_command.py b/test/test_rhsm_debug_command.py index 280a674..cd762e3 100644 --- a/test/test_rhsm_debug_command.py +++ b/test/test_rhsm_debug_command.py @@ -66,21 +66,23 @@ class TestCompileCommand(TestCliCommand): except SystemExit: self.fail("Exception Raised") - tar_path = path_join(path, "rhsm-debug-system-%s.tar.gz" % self.time_code) - tar_file = tarfile.open(tar_path, "r") - self.assertTrue(tar_file.getmember(path_join(self.code, "consumer.json")) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, "compliance.json")) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, "entitlements.json")) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, "pools.json")) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, "version.json")) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, "subscriptions.json")) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, "/etc/rhsm")) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, "/var/log/rhsm")) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, "/var/lib/rhsm")) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, cfg.get('rhsm', 'productCertDir'))) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, cfg.get('rhsm', 'entitlementCertDir'))) is not None) - self.assertTrue(tar_file.getmember(path_join(self.code, cfg.get('rhsm', 'consumerCertDir'))) is not None) - shutil.rmtree(path) + try: + tar_path = path_join(path, "rhsm-debug-system-%s.tar.gz" % self.time_code) + tar_file = tarfile.open(tar_path, "r") + self.assertTrue(tar_file.getmember(path_join(self.code, "consumer.json")) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, "compliance.json")) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, "entitlements.json")) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, "pools.json")) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, "version.json")) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, "subscriptions.json")) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, "/etc/rhsm")) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, "/var/log/rhsm")) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, "/var/lib/rhsm")) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, cfg.get('rhsm', 'productCertDir'))) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, cfg.get('rhsm', 'entitlementCertDir'))) is not None) + self.assertTrue(tar_file.getmember(path_join(self.code, cfg.get('rhsm', 'consumerCertDir'))) is not None) + finally: + shutil.rmtree(path) # Runs the non-tar tree creation. # It does not write the certs or log files because of @@ -98,22 +100,76 @@ class TestCompileCommand(TestCliCommand): except SystemExit: self.fail("Exception Raised") - tree_path = path_join(path, self.code) - self.assertTrue(os.path.exists(path_join(tree_path, "consumer.json"))) - self.assertTrue(os.path.exists(path_join(tree_path, "compliance.json"))) - self.assertTrue(os.path.exists(path_join(tree_path, "entitlements.json"))) - self.assertTrue(os.path.exists(path_join(tree_path, "pools.json"))) - self.assertTrue(os.path.exists(path_join(tree_path, "version.json"))) - self.assertTrue(os.path.exists(path_join(tree_path, "subscriptions.json"))) - self.assertTrue(os.path.exists(path_join(tree_path, "/etc/rhsm"))) - self.assertTrue(os.path.exists(path_join(tree_path, "/var/log/rhsm"))) - self.assertTrue(os.path.exists(path_join(tree_path, "/var/lib/rhsm"))) - self.assertTrue(os.path.exists(path_join(tree_path, cfg.get('rhsm', 'productCertDir')))) - self.assertTrue(os.path.exists(path_join(tree_path, cfg.get('rhsm', 'entitlementCertDir')))) - self.assertTrue(os.path.exists(path_join(tree_path, cfg.get('rhsm', 'consumerCertDir')))) - shutil.rmtree(path) - - # by not creating of the destination directory + try: + tree_path = path_join(path, self.code) + self.assertTrue(os.path.exists(path_join(tree_path, "consumer.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "compliance.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "entitlements.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "pools.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "version.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "subscriptions.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "/etc/rhsm"))) + self.assertTrue(os.path.exists(path_join(tree_path, "/var/log/rhsm"))) + self.assertTrue(os.path.exists(path_join(tree_path, "/var/lib/rhsm"))) + self.assertTrue(os.path.exists(path_join(tree_path, cfg.get('rhsm', 'productCertDir')))) + self.assertTrue(os.path.exists(path_join(tree_path, cfg.get('rhsm', 'entitlementCertDir')))) + self.assertTrue(os.path.exists(path_join(tree_path, cfg.get('rhsm', 'consumerCertDir')))) + finally: + shutil.rmtree(path) + + # Runs the non-tar tree creation. + # sos flag limits included data + def test_command_sos(self): + try: + self.cc._do_command = self._orig_do_command + self.cc._make_code = self._make_code + self.cc._get_assemble_dir = self._get_assemble_dir + self.cc._copy_directory = self._copy_directory + self.cc._makedir = self._makedir + self.test_dir = os.getcwd() + path = path_join(self.test_dir, "testing-dir") + self.cc.main(["--destination", path, "--no-archive", "--sos"]) + except SystemExit: + self.fail("Exception Raised") + + try: + tree_path = path_join(path, self.code) + self.assertTrue(os.path.exists(path_join(tree_path, "consumer.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "compliance.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "entitlements.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "pools.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "version.json"))) + self.assertTrue(os.path.exists(path_join(tree_path, "subscriptions.json"))) + self.assertFalse(os.path.exists(path_join(tree_path, "/etc/rhsm"))) + self.assertFalse(os.path.exists(path_join(tree_path, "/var/log/rhsm"))) + self.assertFalse(os.path.exists(path_join(tree_path, "/var/lib/rhsm"))) + # if cert directories are default, these should not be included + self.assertFalse(os.path.exists(path_join(tree_path, cfg.get('rhsm', 'productCertDir')))) + self.assertFalse(os.path.exists(path_join(tree_path, cfg.get('rhsm', 'entitlementCertDir')))) + self.assertFalse(os.path.exists(path_join(tree_path, cfg.get('rhsm', 'consumerCertDir')))) + finally: + shutil.rmtree(path) + + # Test to see that the filter on copy directory properly skips any -key.pem files + def test_copy_private_key_filter(self): + path1 = "./test-key-filter" + path2 = "./result-dir" + if not os.path.exists(path1): + os.makedirs(path1) + try: + open(path_join(path1, "12346.pem"), 'a').close() + open(path_join(path1, "7890.pem"), 'a').close() + open(path_join(path1, "22222-key.pem"), 'a').close() + self.cc._copy_cert_directory(path1, path2) + + self.assertTrue(os.path.exists(path_join(path2, path_join(path1, "12346.pem")))) + self.assertTrue(os.path.exists(path_join(path2, path_join(path1, "7890.pem")))) + self.assertFalse(os.path.exists(path_join(path2, path_join(path1, "22222-key.pem")))) + finally: + shutil.rmtree(path1) + shutil.rmtree(path2) + + # by not creating the destination directory # we expect the validation to fail def test_archive_to_non_exist_dir(self): self.test_dir = os.getcwd() @@ -144,7 +200,7 @@ class TestCompileCommand(TestCliCommand): return self.assemble_path # write to my directory instead - def _copy_directory(self, path, prefix): + def _copy_directory(self, path, prefix, ignore_pats=[]): #print "_copy_directory: %s, %s" % (path, prefix) shutil.copytree(path_join(self.assemble_path, path), path_join(prefix, path))