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 <https://bugzilla.redhat.com>, 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 @@
<widget class="GtkHBox" id="hbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">25</property>
+ <property name="spacing">5</property>
<child>
<widget class="GtkCheckButton" id="activation_key_checkbox">
<property name="label" translatable="yes">I will use an Activation Key</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
+ <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
@@ -175,7 +176,8 @@
<widget class="GtkAlignment" id="alignment3">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="right_padding">16</property>
+ <property name="xalign">0</property>
+ <property name="left_padding">5</property>
<child>
<widget class="GtkImage" id="image3">
<property name="visible">True</property>
@@ -187,7 +189,7 @@
</child>
</widget>
<packing>
- <property name="expand">True</property>
+ <property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
@@ -198,7 +200,6 @@
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
- <property name="x_options">GTK_EXPAND</property>
</packing>
</child>
</widget>
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 <ckozak@redhat.com> 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 <ckozak@redhat.com> 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))