def test_positive_promote_with_rh_content(session): """Attempt to promote a content view containing RH content :id: 82f71639-3580-49fd-bd5a-8dba568b98d1 :setup: Multiple environments for an org; RH content synced :expectedresults: Content view can be promoted :CaseLevel: System """ cv_name = gen_string('alpha') version = 'Version 1.0' rh_repo = { 'name': REPOS['rhst7']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhst7'], 'basearch': 'x86_64', 'releasever': None, } org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) enable_sync_redhat_repo(rh_repo, org.id) lce = entities.LifecycleEnvironment(organization=org).create() with session: session.organization.select(org.name) session.contentview.create({'name': cv_name}) assert session.contentview.search(cv_name)[0]['Name'] == cv_name session.contentview.add_yum_repo(cv_name, rh_repo['name']) result = session.contentview.publish(cv_name) assert result['Version'] == version result = session.contentview.promote(cv_name, version, lce.name) assert 'Promoted to {}'.format(lce.name) in result['Status']
def test_positive_publish_with_rh_content(session): """Attempt to publish a content view containing RH content :id: bd24dc13-b6c4-4a9b-acb2-cd6df30f436c :setup: RH content synced :expectedresults: Content view can be published :CaseLevel: System """ cv_name = gen_string('alpha') version = 'Version 1.0' rh_repo = { 'name': REPOS['rhst7']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhst7'], 'basearch': 'x86_64', 'releasever': None, } org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) enable_sync_redhat_repo(rh_repo, org.id) with session: session.organization.select(org.name) session.contentview.create({'name': cv_name}) assert session.contentview.search(cv_name)[0]['Name'] == cv_name session.contentview.add_yum_repo(cv_name, rh_repo['name']) result = session.contentview.publish(cv_name) assert result['Version'] == version cv = session.contentview.read(cv_name) assert cv['versions']['table'][0]['Version'] == version
def test_positive_update_rh_product(session): """Update Content View in an Activation key :id: 9b0ac209-45de-4cc4-97e8-e191f3f37239 :Steps: 1. Create an activation key 2. Update the content view with another content view which has RH products :expectedresults: Activation key is updated :CaseLevel: Integration """ name = gen_string('alpha') env1_name = gen_string('alpha') env2_name = gen_string('alpha') cv1_name = gen_string('alpha') cv2_name = gen_string('alpha') rh_repo1 = { 'name': REPOS['rhva6']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhva6'], 'basearch': DEFAULT_ARCHITECTURE, 'releasever': DEFAULT_RELEASE_VERSION, } rh_repo2 = { 'name': ('Red Hat Enterprise Virtualization Agents for RHEL 6 ' 'Server RPMs i386 6Server'), 'product': PRDS['rhel'], 'reposet': REPOSET['rhva6'], 'basearch': 'i386', 'releasever': DEFAULT_RELEASE_VERSION, } org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) repo1_id = enable_sync_redhat_repo(rh_repo1, org.id) cv_publish_promote(cv1_name, env1_name, repo1_id, org.id) repo2_id = enable_sync_redhat_repo(rh_repo2, org.id) cv_publish_promote(cv2_name, env2_name, repo2_id, org.id) with session: session.organization.select(org.name) session.activationkey.create({ 'name': name, 'lce': {env1_name: True}, 'content_view': cv1_name, }) assert session.activationkey.search(name)[0]['Name'] == name ak = session.activationkey.read(name) assert ak['details']['content_view'] == cv1_name if bz_bug_is_open(1597639): assert session.activationkey.search(name)[0]['Name'] == name session.activationkey.update(name, {'details': { 'lce': {env2_name: True}, 'content_view': cv2_name, }}) ak = session.activationkey.read(name) assert ak['details']['content_view'] == cv2_name
def test_positive_add_rh_content(session): """Add Red Hat content to a content view :id: c370fd79-0c0d-4685-99cb-848556c786c1 :setup: Sync RH content :expectedresults: RH Content can be seen in a view :CaseLevel: Integration """ cv_name = gen_string('alpha') rh_repo = { 'name': REPOS['rhst7']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhst7'], 'basearch': 'x86_64', 'releasever': None } # Create new org to import manifest org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) enable_sync_redhat_repo(rh_repo, org.id) with session: # Create content-view session.organization.select(org.name) session.contentview.create({'name': cv_name}) assert session.contentview.search(cv_name)[0]['Name'] == cv_name session.contentview.add_yum_repo(cv_name, rh_repo['name']) cv = session.contentview.read(cv_name) assert (cv['repositories']['resources']['assigned'][0]['Name'] == rh_repo['name'])
def _create_rh_rhel_tools_repos(self, org_id): """ Upload manifest, enable RHEL7 and tools repos and sync them :param: int org_id: Organization ID :return: nailgun.entities.Repository: repository """ from_version = settings.upgrade.from_version repo_name = 'rhst7_{}'.format(str(from_version).replace('.', '')) rh_rhel = { 'name': REPOS['rhel7']['name'], 'product': REPOS['rhel7']['product'], 'reposet': REPOS['rhel7']['reposet'], 'basearch': REPOS['rhel7']['arch'], 'releasever': '7Server', } rh_tools = { 'name': REPOS[repo_name]['name'], 'product': REPOS[repo_name]['product'], 'reposet': REPOS[repo_name]['reposet'], 'basearch': DEFAULT_ARCHITECTURE, 'releasever': '7Server', } with manifests.clone() as manifest: upload_manifest(org_id, manifest.content) repo1_id = enable_sync_redhat_repo(rh_rhel, org_id, timeout=3500) repo2_id = enable_sync_redhat_repo(rh_tools, org_id, timeout=3500) return [ entities.Repository(id=repo_id) for repo_id in [repo1_id, repo2_id] ]
def test_positive_update_rh_product(session): """Update Content View in an Activation key :id: 9b0ac209-45de-4cc4-97e8-e191f3f37239 :Steps: 1. Create an activation key 2. Update the content view with another content view which has RH products :expectedresults: Activation key is updated :CaseLevel: Integration """ name = gen_string('alpha') env1_name = gen_string('alpha') env2_name = gen_string('alpha') cv1_name = gen_string('alpha') cv2_name = gen_string('alpha') rh_repo1 = { 'name': REPOS['rhva6']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhva6'], 'basearch': DEFAULT_ARCHITECTURE, 'releasever': DEFAULT_RELEASE_VERSION, } rh_repo2 = { 'name': ('Red Hat Enterprise Virtualization Agents for RHEL 6 ' 'Server RPMs i386 6Server'), 'product': PRDS['rhel'], 'reposet': REPOSET['rhva6'], 'basearch': 'i386', 'releasever': DEFAULT_RELEASE_VERSION, } org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) repo1_id = enable_sync_redhat_repo(rh_repo1, org.id) cv_publish_promote(cv1_name, env1_name, repo1_id, org.id) repo2_id = enable_sync_redhat_repo(rh_repo2, org.id) cv_publish_promote(cv2_name, env2_name, repo2_id, org.id) with session: session.organization.select(org.name) session.activationkey.create({ 'name': name, 'lce': {env1_name: True}, 'content_view': cv1_name, }) assert session.activationkey.search(name)[0]['Name'] == name ak = session.activationkey.read(name) assert ak['details']['content_view'] == cv1_name if bz_bug_is_open(1597639): assert session.activationkey.search(name)[0]['Name'] == name session.activationkey.update(name, {'details': { 'lce': {env2_name: True}, 'content_view': cv2_name, }}) ak = session.activationkey.read(name) assert ak['details']['content_view'] == cv2_name
def test_positive_add_rh_content(session): """Add Red Hat content to a content view :id: c370fd79-0c0d-4685-99cb-848556c786c1 :setup: Sync RH content :expectedresults: RH Content can be seen in a view :CaseLevel: Integration """ cv_name = gen_string('alpha') rh_repo = { 'name': REPOS['rhst7']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhst7'], 'basearch': 'x86_64', 'releasever': None } # Create new org to import manifest org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) enable_sync_redhat_repo(rh_repo, org.id) with session: # Create content-view session.organization.select(org.name) session.contentview.create({'name': cv_name}) assert session.contentview.search(cv_name)[0]['Name'] == cv_name session.contentview.add_yum_repo(cv_name, rh_repo['name']) cv = session.contentview.read(cv_name) assert ( cv['repositories']['resources']['assigned'][0]['Name'] == rh_repo['name'] )
def test_positive_create_composite(session): # Note: puppet repos cannot/should not be used in this test # It shouldn't work - and that is tested in a different case. # Individual modules from a puppet repo, however, are a valid # variation. """Create a composite content views :id: 550f1970-5cbd-4571-bb7b-17e97639b715 :setup: sync multiple content source/types (RH, custom, etc.) :expectedresults: Composite content views are created :CaseLevel: System """ puppet_module = 'httpd' cv_name1 = gen_string('alpha') cv_name2 = gen_string('alpha') composite_name = gen_string('alpha') rh_repo = { 'name': REPOS['rhst7']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhst7'], 'basearch': 'x86_64', 'releasever': None, } # Create new org to import manifest org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) enable_sync_redhat_repo(rh_repo, org.id) create_sync_custom_repo( org.id, repo_url=FAKE_0_PUPPET_REPO, repo_type=REPO_TYPE['puppet']) with session: session.organization.select(org.name) # Create content views for cv_name in (cv_name1, cv_name2): session.contentview.create({'name': cv_name}) assert session.contentview.search(cv_name)[0]['Name'] == cv_name session.contentview.add_puppet_module(cv_name1, puppet_module) cv1 = session.contentview.read(cv_name1) assert cv1['puppet_modules']['table'][0]['Name'] == puppet_module session.contentview.publish(cv_name1) # fixme: drop next line after airgun#63 is solved session.contentview.search(cv_name2) session.contentview.add_yum_repo(cv_name2, rh_repo['name']) session.contentview.publish(cv_name2) session.contentview.create({ 'name': composite_name, 'composite_view': True, }) for cv_name in (cv_name1, cv_name2): session.contentview.add_cv(composite_name, cv_name) composite_cv = session.contentview.read(composite_name) assert {cv_name1, cv_name2} == set([ cv['Name'] for cv in composite_cv['content_views']['resources']['assigned'] ])
def test_positive_create_composite(session): # Note: puppet repos cannot/should not be used in this test # It shouldn't work - and that is tested in a different case. # Individual modules from a puppet repo, however, are a valid # variation. """Create a composite content views :id: 550f1970-5cbd-4571-bb7b-17e97639b715 :setup: sync multiple content source/types (RH, custom, etc.) :expectedresults: Composite content views are created :CaseLevel: System """ puppet_module = 'httpd' cv_name1 = gen_string('alpha') cv_name2 = gen_string('alpha') composite_name = gen_string('alpha') rh_repo = { 'name': REPOS['rhst7']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhst7'], 'basearch': 'x86_64', 'releasever': None, } # Create new org to import manifest org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) enable_sync_redhat_repo(rh_repo, org.id) create_sync_custom_repo(org.id, repo_url=FAKE_0_PUPPET_REPO, repo_type=REPO_TYPE['puppet']) with session: session.organization.select(org.name) # Create content views for cv_name in (cv_name1, cv_name2): session.contentview.create({'name': cv_name}) assert session.contentview.search(cv_name)[0]['Name'] == cv_name session.contentview.add_puppet_module(cv_name1, puppet_module) cv1 = session.contentview.read(cv_name1) assert cv1['puppet_modules']['table'][0]['Name'] == puppet_module session.contentview.publish(cv_name1) session.contentview.add_yum_repo(cv_name2, rh_repo['name']) session.contentview.publish(cv_name2) session.contentview.create({ 'name': composite_name, 'composite_view': True, }) for cv_name in (cv_name1, cv_name2): session.contentview.add_cv(composite_name, cv_name) composite_cv = session.contentview.read(composite_name) assert {cv_name1, cv_name2} == set([ cv['Name'] for cv in composite_cv['content_views']['resources']['assigned'] ])
def test_positive_add_rh_product(session): """Test that RH product can be associated to Activation Keys :id: d805341b-6d2f-4e16-8cb4-902de00b9a6c :expectedresults: RH products are successfully associated to Activation key :CaseLevel: Integration """ name = gen_string('alpha') cv_name = gen_string('alpha') env_name = gen_string('alpha') rh_repo = { 'name': constants.REPOS['rhva6']['name'], 'product': constants.PRDS['rhel'], 'reposet': constants.REPOSET['rhva6'], 'basearch': constants.DEFAULT_ARCHITECTURE, 'releasever': constants.DEFAULT_RELEASE_VERSION, } # Create new org to import manifest org = entities.Organization().create() # Upload manifest with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) # Helper function to create and promote CV to next environment repo_id = enable_sync_redhat_repo(rh_repo, org.id) cv_publish_promote(cv_name, env_name, repo_id, org.id) with session: session.organization.select(org.name) session.activationkey.create({ 'name': name, 'lce': { env_name: True }, 'content_view': cv_name }) assert session.activationkey.search(name)[0]['Name'] == name session.activationkey.add_subscription( name, constants.DEFAULT_SUBSCRIPTION_NAME) ak = session.activationkey.read(name, widget_names='subscriptions') subs_name = ak['subscriptions']['resources']['assigned'][0][ 'Repository Name'] assert subs_name == constants.DEFAULT_SUBSCRIPTION_NAME
def test_positive_add_rh_product(session): """Test that RH product can be associated to Activation Keys :id: d805341b-6d2f-4e16-8cb4-902de00b9a6c :expectedresults: RH products are successfully associated to Activation key :CaseLevel: Integration """ name = gen_string('alpha') cv_name = gen_string('alpha') env_name = gen_string('alpha') rh_repo = { 'name': REPOS['rhva6']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhva6'], 'basearch': DEFAULT_ARCHITECTURE, 'releasever': DEFAULT_RELEASE_VERSION, } # Create new org to import manifest org = entities.Organization().create() # Upload manifest with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) # Helper function to create and promote CV to next environment repo_id = enable_sync_redhat_repo(rh_repo, org.id) cv_publish_promote(cv_name, env_name, repo_id, org.id) with session: session.organization.select(org.name) session.activationkey.create({ 'name': name, 'lce': {env_name: True}, 'content_view': cv_name, }) assert session.activationkey.search(name) == name session.activationkey.add_subscription(name, DEFAULT_SUBSCRIPTION_NAME) ak = session.activationkey.read(name) subs_name = ak[ 'subscriptions']['resources']['assigned'][0]['Repository Name'] assert subs_name == DEFAULT_SUBSCRIPTION_NAME
def test_positive_promote_composite_with_custom_content(session): """Attempt to promote composite content view containing custom content :id: 35efbd83-d32e-4831-9d5b-1adb15289f54 :setup: Multiple environments for an org; custom content synced :steps: create a composite view containing multiple content types :expectedresults: Composite content view can be promoted :CaseLevel: Integration """ cv1_name = gen_string('alpha') cv2_name = gen_string('alpha') cv_composite_name = gen_string('alpha') custom_repo1_name = gen_string('alpha') custom_repo2_name = gen_string('alpha') custom_repo1_url = FAKE_0_YUM_REPO custom_repo2_url = FAKE_1_YUM_REPO puppet_repo1_url = FAKE_0_PUPPET_REPO puppet_repo2_url = FAKE_1_PUPPET_REPO puppet_module1 = 'httpd' puppet_module2 = 'ntp' rh7_repo = { 'name': REPOS['rhst7']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhst7'], 'basearch': 'x86_64', 'releasever': None, } version = 'Version 1.0' org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) # create a life cycle environment lce = entities.LifecycleEnvironment(organization=org).create() # Enable and sync RH repository enable_sync_redhat_repo(rh7_repo, org.id) # Create custom yum repositories for name, url in ((custom_repo1_name, custom_repo1_url), (custom_repo2_name, custom_repo2_url)): create_sync_custom_repo(repo_name=name, repo_url=url, org_id=org.id) # Create custom puppet repositories for url in (puppet_repo1_url, puppet_repo2_url): create_sync_custom_repo(repo_url=url, repo_type=REPO_TYPE['puppet'], org_id=org.id) with session: session.organization.select(org.name) # create the first content view session.contentview.create({'name': cv1_name}) assert session.contentview.search(cv1_name)[0]['Name'] == cv1_name # add repositories to first content view for repo_name in (rh7_repo['name'], custom_repo1_name): session.contentview.add_yum_repo(cv1_name, repo_name) # add the first puppet module to first content view session.contentview.add_puppet_module(cv1_name, puppet_module1) # publish the first content result = session.contentview.publish(cv1_name) assert result['Version'] == version # create the second content view session.contentview.create({'name': cv2_name}) assert session.contentview.search(cv2_name)[0]['Name'] == cv2_name # add repositories to the second content view session.contentview.add_yum_repo(cv2_name, custom_repo2_name) # add the second puppet module to the second content view session.contentview.add_puppet_module(cv2_name, puppet_module2) # publish the second content result = session.contentview.publish(cv2_name) assert result['Version'] == version # create a composite content view session.contentview.create({ 'name': cv_composite_name, 'composite_view': True, }) assert session.contentview.search( cv_composite_name)[0]['Name'] == cv_composite_name # add the first and second content views to the composite one for cv_name in (cv1_name, cv2_name): session.contentview.add_cv(cv_composite_name, cv_name) # publish the composite content view result = session.contentview.publish(cv_composite_name) assert result['Version'] == version # promote the composite content view result = session.contentview.promote(cv_composite_name, version, lce.name) assert 'Promoted to {}'.format(lce.name) in result['Status']
def test_positive_publish_composite_with_custom_content(session): """Attempt to publish composite content view containing custom content :id: 73947204-408e-4e2e-b87f-ba2e52ee50b6 :setup: Multiple environments for an org; custom content synced :expectedresults: Composite content view can be published :CaseLevel: Integration """ cv1_name = gen_string('alpha') cv2_name = gen_string('alpha') cv_composite_name = gen_string('alpha') custom_repo1_name = gen_string('alpha') custom_repo2_name = gen_string('alpha') custom_repo1_url = FAKE_0_YUM_REPO custom_repo2_url = FAKE_1_YUM_REPO puppet_repo1_url = FAKE_0_PUPPET_REPO puppet_repo2_url = FAKE_1_PUPPET_REPO puppet_module1 = 'httpd' puppet_module2 = 'ntp' rh7_repo = { 'name': REPOS['rhst7']['name'], 'product': PRDS['rhel'], 'reposet': REPOSET['rhst7'], 'basearch': 'x86_64', 'releasever': None, } version = 'Version 1.0' org = entities.Organization().create() with manifests.clone() as manifest: upload_manifest(org.id, manifest.content) # Enable and sync RH repository enable_sync_redhat_repo(rh7_repo, org.id) # Create custom yum repositories for name, url in ((custom_repo1_name, custom_repo1_url), (custom_repo2_name, custom_repo2_url)): create_sync_custom_repo(repo_name=name, repo_url=url, org_id=org.id) # Create custom puppet repositories for url in (puppet_repo1_url, puppet_repo2_url): create_sync_custom_repo(repo_url=url, repo_type=REPO_TYPE['puppet'], org_id=org.id) with session: session.organization.select(org.name) # create the first content view session.contentview.create({'name': cv1_name}) assert session.contentview.search(cv1_name)[0]['Name'] == cv1_name # add repositories to first content view for repo_name in (rh7_repo['name'], custom_repo1_name): session.contentview.add_yum_repo(cv1_name, repo_name) # add the first puppet module to first content view session.contentview.add_puppet_module(cv1_name, puppet_module1) # publish the first content result = session.contentview.publish(cv1_name) assert result['Version'] == version # create the second content view session.contentview.create({'name': cv2_name}) assert session.contentview.search(cv2_name)[0]['Name'] == cv2_name # add repositories to the second content view session.contentview.add_yum_repo(cv2_name, custom_repo2_name) # add the second puppet module to the second content view session.contentview.add_puppet_module(cv2_name, puppet_module2) # publish the second content result = session.contentview.publish(cv2_name) assert result['Version'] == version # create a composite content view session.contentview.create({ 'name': cv_composite_name, 'composite_view': True, }) assert session.contentview.search( cv_composite_name)[0]['Name'] == cv_composite_name # add the first and second content views to the composite one for cv_name in (cv1_name, cv2_name): session.contentview.add_cv(cv_composite_name, cv_name) # publish the composite content view result = session.contentview.publish(cv_composite_name) assert result['Version'] == version ccv = session.contentview.read(cv_composite_name) assert ccv['versions']['table'][0]['Version'] == version