Пример #1
0
    def setUpClass(cls):
        """Create Org, Lifecycle Environment, Content View, Activation key

        """
        super(KatelloAgentTestCase, cls).setUpClass()
        # Create new org, environment, CV and activation key
        KatelloAgentTestCase.org = make_org()
        KatelloAgentTestCase.env = make_lifecycle_environment({
            u'organization-id': KatelloAgentTestCase.org['id'],
        })
        KatelloAgentTestCase.content_view = make_content_view({
            u'organization-id': KatelloAgentTestCase.org['id'],
        })
        KatelloAgentTestCase.activation_key = make_activation_key({
            u'lifecycle-environment-id': KatelloAgentTestCase.env['id'],
            u'organization-id': KatelloAgentTestCase.org['id'],
        })
        # Add subscription to Satellite Tools repo to activation key
        setup_org_for_a_rh_repo({
            u'product': PRDS['rhel'],
            u'repository-set': REPOSET['rhst7'],
            u'repository': REPOS['rhst7']['name'],
            u'organization-id': KatelloAgentTestCase.org['id'],
            u'content-view-id': KatelloAgentTestCase.content_view['id'],
            u'lifecycle-environment-id': KatelloAgentTestCase.env['id'],
            u'activationkey-id': KatelloAgentTestCase.activation_key['id'],
        })
        # Create custom repo, add subscription to activation key
        setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': KatelloAgentTestCase.org['id'],
            u'content-view-id': KatelloAgentTestCase.content_view['id'],
            u'lifecycle-environment-id': KatelloAgentTestCase.env['id'],
            u'activationkey-id': KatelloAgentTestCase.activation_key['id'],
        })
Пример #2
0
    def test_positive_get_diff_for_cv_envs(self):
        """Generate a difference in errata between a set of environments
        for a content view

        :id: 96732506-4a89-408c-8d7e-f30c8d469769

        :Setup:

            1. Errata synced on satellite server.
            2. Multiple environments present.

        :Steps: GET /katello/api/compare

        :expectedresults: Difference in errata between a set of environments
            for a content view is retrieved.

        :CaseLevel: System
        """
        org = entities.Organization().create()
        env = entities.LifecycleEnvironment(organization=org).create()
        content_view = entities.ContentView(organization=org).create()
        activation_key = entities.ActivationKey(environment=env,
                                                organization=org).create()
        setup_org_for_a_rh_repo(
            {
                'product': PRDS['rhel'],
                'repository-set': REPOSET['rhst7'],
                'repository': REPOS['rhst7']['name'],
                'organization-id': org.id,
                'content-view-id': content_view.id,
                'lifecycle-environment-id': env.id,
                'activationkey-id': activation_key.id,
            },
            force_use_cdn=True,
        )
        setup_org_for_a_custom_repo({
            'url': CUSTOM_REPO_URL,
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        })
        new_env = entities.LifecycleEnvironment(organization=org,
                                                prior=env).create()
        cvvs = content_view.read().version[-2:]
        promote(cvvs[-1], new_env.id)
        result = entities.Errata().compare(
            data={
                'content_view_version_ids': [cvv.id for cvv in cvvs],
                'per_page': 9999
            })
        cvv2_only_errata = next(
            errata for errata in result['results']
            if errata['errata_id'] == CUSTOM_REPO_ERRATA_ID)
        self.assertEqual([cvvs[-1].id], cvv2_only_errata['comparison'])
        both_cvvs_errata = next(errata for errata in result['results']
                                if errata['errata_id'] == REAL_0_ERRATA_ID)
        self.assertEqual({cvv.id
                          for cvv in cvvs},
                         set(both_cvvs_errata['comparison']))
Пример #3
0
def katello_agent_repos(module_ak, module_cv, module_lce, module_org):
    """Create Org, Lifecycle Environment, Content View, Activation key"""
    setup_org_for_a_rh_repo({
        'product': PRDS['rhel'],
        'repository-set': REPOSET['rhst7'],
        'repository': REPOS['rhst7']['name'],
        'organization-id': module_org.id,
        'content-view-id': module_cv.id,
        'lifecycle-environment-id': module_lce.id,
        'activationkey-id': module_ak.id,
    })
    # Create custom repository content
    setup_org_for_a_custom_repo({
        'url': settings.repos.yum_1.url,
        'organization-id': module_org.id,
        'content-view-id': module_cv.id,
        'lifecycle-environment-id': module_lce.id,
        'activationkey-id': module_ak.id,
    })
    return {
        'ak': module_ak,
        'cv': module_cv,
        'lce': module_lce,
        'org': module_org,
    }
Пример #4
0
def activation_key(module_org, lifecycle_env, content_view):
    """Create activation keys"""
    repo_values = [
        {
            'repo': settings.repos.sattools_repo.rhel8,
            'akname': ak_name['rhel8']
        },
        {
            'repo': settings.repos.sattools_repo.rhel7,
            'akname': ak_name['rhel7']
        },
        {
            'repo': settings.repos.sattools_repo.rhel6,
            'akname': ak_name['rhel6']
        },
    ]

    for repo in repo_values:
        activation_key = entities.ActivationKey(
            name=repo.get('akname'),
            environment=lifecycle_env,
            organization=module_org).create()
        # Setup org for a custom repo for RHEL6, RHEL7 and RHEL8.
        setup_org_for_a_custom_repo({
            'url': repo.get('repo'),
            'organization-id': module_org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': lifecycle_env.id,
            'activationkey-id': activation_key.id,
        })
Пример #5
0
 def setUpClass(cls):
     """Create Lifecycle Environment, Content View and Activation key
     """
     super(ContentHostTestCase, cls).setUpClass()
     cls.env = entities.LifecycleEnvironment(
         organization=cls.session_org).create()
     cls.content_view = entities.ContentView(
         organization=cls.session_org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env,
         organization=cls.session_org,
     ).create()
     setup_org_for_a_rh_repo({
         'product': PRDS['rhel'],
         'repository-set': REPOSET['rhst7'],
         'repository': REPOS['rhst7']['name'],
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
     setup_org_for_a_custom_repo({
         'url': FAKE_6_YUM_REPO,
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
Пример #6
0
def katello_agent_repos(sat_with_katello_agent):
    """Create Org, Lifecycle Environment, Content View, Activation key"""
    sat = sat_with_katello_agent
    org = sat.api.Organization().create()
    lce = sat.api.LifecycleEnvironment(organization=org).create()
    cv = sat.api.ContentView(organization=org).create()
    ak = sat.api.ActivationKey(environment=lce, organization=org).create()
    setup_org_for_a_rh_repo({
        'product': constants.PRDS['rhel'],
        'repository-set': constants.REPOSET['rhst7'],
        'repository': constants.REPOS['rhst7']['name'],
        'organization-id': org.id,
        'content-view-id': cv.id,
        'lifecycle-environment-id': lce.id,
        'activationkey-id': ak.id,
    })
    # Create custom repository content
    setup_org_for_a_custom_repo({
        'url': settings.repos.yum_1.url,
        'organization-id': org.id,
        'content-view-id': cv.id,
        'lifecycle-environment-id': lce.id,
        'activationkey-id': ak.id,
    })
    return {
        'ak': ak,
        'cv': cv,
        'lce': lce,
        'org': org,
    }, sat_with_katello_agent
Пример #7
0
 def setUpClass(cls):
     """Create Lifecycle Environment, Content View and Activation key
     """
     super(ContentHostTestCase, cls).setUpClass()
     cls.env = entities.LifecycleEnvironment(
         organization=cls.session_org).create()
     cls.content_view = entities.ContentView(
         organization=cls.session_org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env,
         organization=cls.session_org,
     ).create()
     setup_org_for_a_rh_repo({
         'product': PRDS['rhel'],
         'repository-set': REPOSET['rhst7'],
         'repository': REPOS['rhst7']['name'],
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
     setup_org_for_a_custom_repo({
         'url': FAKE_6_YUM_REPO,
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
Пример #8
0
    def setUpClass(cls):
        """Create Org, Lifecycle Environment, Content View, Activation key

        """
        super(KatelloAgentTestCase, cls).setUpClass()
        # Create new org, environment, CV and activation key
        KatelloAgentTestCase.org = make_org()
        KatelloAgentTestCase.env = make_lifecycle_environment({
            u'organization-id': KatelloAgentTestCase.org['id'],
        })
        KatelloAgentTestCase.content_view = make_content_view({
            u'organization-id': KatelloAgentTestCase.org['id'],
        })
        KatelloAgentTestCase.activation_key = make_activation_key({
            u'lifecycle-environment-id': KatelloAgentTestCase.env['id'],
            u'organization-id': KatelloAgentTestCase.org['id'],
        })
        # Add subscription to Satellite Tools repo to activation key
        setup_org_for_a_rh_repo({
            u'product': PRDS['rhel'],
            u'repository-set': REPOSET['rhst7'],
            u'repository': REPOS['rhst7']['name'],
            u'organization-id': KatelloAgentTestCase.org['id'],
            u'content-view-id': KatelloAgentTestCase.content_view['id'],
            u'lifecycle-environment-id': KatelloAgentTestCase.env['id'],
            u'activationkey-id': KatelloAgentTestCase.activation_key['id'],
        })
        # Create custom repo, add subscription to activation key
        setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': KatelloAgentTestCase.org['id'],
            u'content-view-id': KatelloAgentTestCase.content_view['id'],
            u'lifecycle-environment-id': KatelloAgentTestCase.env['id'],
            u'activationkey-id': KatelloAgentTestCase.activation_key['id'],
        })
Пример #9
0
def custom_repo(module_org, module_lce, module_cv, module_ak_cv_lce):
    """Create custom repo and add a subscription to activation key."""
    setup_org_for_a_custom_repo({
        'url': REPO_WITH_ERRATA['url'],
        'organization-id': module_org.id,
        'content-view-id': module_cv.id,
        'lifecycle-environment-id': module_lce.id,
        'activationkey-id': module_ak_cv_lce.id,
    })
Пример #10
0
    def setUp(self):
        """Create VM, subscribe it to satellite-tools repo, install katello-ca
        and katello-agent packages

        """
        super(TestCHKatelloAgent, self).setUp()

        # Create new org, environment, CV and activation key
        if TestCHKatelloAgent.org is None:
            TestCHKatelloAgent.org = make_org()
        if TestCHKatelloAgent.env is None:
            TestCHKatelloAgent.env = make_lifecycle_environment({
                u'organization-id': TestCHKatelloAgent.org['id'],
            })
        if TestCHKatelloAgent.cv is None:
            TestCHKatelloAgent.cv = make_content_view({
                u'organization-id': TestCHKatelloAgent.org['id'],
            })
        if TestCHKatelloAgent.activation_key is None:
            TestCHKatelloAgent.activation_key = make_activation_key({
                u'lifecycle-environment-id': TestCHKatelloAgent.env['id'],
                u'organization-id': TestCHKatelloAgent.org['id'],
            })
        # Add subscription to Satellite Tools repo to activation key
        if not TestCHKatelloAgent.org_is_set_up:
            setup_org_for_a_rh_repo({
                u'product': PRDS['rhel'],
                u'repository-set': REPOSET['rhst7'],
                u'repository': REPOS['rhst7']['name'],
                u'organization-id': TestCHKatelloAgent.org['id'],
                u'content-view-id': TestCHKatelloAgent.cv['id'],
                u'lifecycle-environment-id': TestCHKatelloAgent.env['id'],
                u'activationkey-id': TestCHKatelloAgent.activation_key['id'],
            })
            TestCHKatelloAgent.org_is_set_up = True

        # Create VM and register content host
        self.vm = VirtualMachine(distro='rhel71')
        self.vm.create()
        self.vm.install_katello_cert()
        # Create custom repo, add subscription to activation key
        setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': TestCHKatelloAgent.org['id'],
            u'content-view-id': TestCHKatelloAgent.cv['id'],
            u'lifecycle-environment-id': TestCHKatelloAgent.env['id'],
            u'activationkey-id': TestCHKatelloAgent.activation_key['id'],
        })
        # Register content host, install katello-agent
        self.vm.register_contenthost(
            TestCHKatelloAgent.activation_key['name'],
            TestCHKatelloAgent.org['label']
        )
        self.vm.enable_repo(REPOS['rhst7']['id'])
        self.vm.install_katello_agent()
Пример #11
0
def test_positive_get_diff_for_cv_envs():
    """Generate a difference in errata between a set of environments
    for a content view

    :id: 96732506-4a89-408c-8d7e-f30c8d469769

    :Setup:

        1. Errata synced on satellite server.
        2. Multiple environments present.

    :Steps: GET /katello/api/compare

    :expectedresults: Difference in errata between a set of environments
        for a content view is retrieved.

    :CaseLevel: System
    """
    org = entities.Organization().create()
    env = entities.LifecycleEnvironment(organization=org).create()
    content_view = entities.ContentView(organization=org).create()
    activation_key = entities.ActivationKey(environment=env, organization=org).create()
    for repo_url in [settings.repos.yum_9.url, CUSTOM_REPO_URL]:
        setup_org_for_a_custom_repo(
            {
                'url': repo_url,
                'organization-id': org.id,
                'content-view-id': content_view.id,
                'lifecycle-environment-id': env.id,
                'activationkey-id': activation_key.id,
            }
        )
    new_env = entities.LifecycleEnvironment(organization=org, prior=env).create()
    cvvs = content_view.read().version[-2:]
    promote(cvvs[-1], new_env.id)
    result = entities.Errata().compare(
        data={'content_view_version_ids': [cvv.id for cvv in cvvs], 'per_page': '9999'}
    )
    cvv2_only_errata = next(
        errata for errata in result['results'] if errata['errata_id'] == CUSTOM_REPO_ERRATA_ID
    )
    assert cvvs[-1].id in cvv2_only_errata['comparison']
    both_cvvs_errata = next(
        errata
        for errata in result['results']
        if errata['errata_id'] in constants.FAKE_9_YUM_SECURITY_ERRATUM
    )
    assert {cvv.id for cvv in cvvs} == set(both_cvvs_errata['comparison'])
Пример #12
0
    def test_positive_content_override(self):
        """Positive content override

        @Feature: Activation key copy

        @Steps:

        1. Create activation key and add content
        2. Get the first product's label
        3. Override the product's content enabled state
        4. Verify that the command succeeded

        @BZ: 1180282

        @Assert: Activation key content override was successful
        """
        result = setup_org_for_a_custom_repo({u"url": FAKE_0_YUM_REPO, u"organization-id": self.org["id"]})
        content = ActivationKey.product_content({u"id": result["activationkey-id"], u"organization-id": self.org["id"]})
        for override_value in (u"1", u"0"):
            with self.subTest(override_value):
                ActivationKey.content_override(
                    {
                        u"content-label": content[0]["label"],
                        u"id": result["activationkey-id"],
                        u"organization-id": self.org["id"],
                        u"value": override_value,
                    }
                )
                # Retrieve the product content enabled flag
                content = ActivationKey.product_content(
                    {u"id": result["activationkey-id"], u"organization-id": self.org["id"]}
                )
                self.assertEqual(content[0]["enabled?"], override_value)
Пример #13
0
def test_positive_service_level_subscription_with_custom_product(session):
    """Subscribe a host to activation key with Premium service level and with
    custom product

    :id: 195a8049-860e-494d-b7f0-0794384194f7

    :customerscenario: true

    :steps:
        1. Create a product with custom repository synchronized
        2. Create and Publish a content view with the created repository
        3. Create an activation key and assign the created content view
        4. Add a RedHat subscription to activation key (The product
           subscription should be added automatically)
        5. Set the activation service_level to Premium
        6. Register a host to activation key
        7. List consumed subscriptions on host
        8. List the subscription in Content Host UI

    :expectedresults:
        1. The product subscription is listed in consumed subscriptions on host
        2. The product subscription is listed in the contenthost subscriptions
           UI

    :BZ: 1394357

    :CaseLevel: System
    """
    org = entities.Organization().create()
    manifests.upload_manifest_locked(org.id)
    entities_ids = setup_org_for_a_custom_repo({'url': FAKE_1_YUM_REPO, 'organization-id': org.id})
    product = entities.Product(id=entities_ids['product-id']).read()
    activation_key = entities.ActivationKey(id=entities_ids['activationkey-id']).read()
    # add the default RH subscription
    subscription = entities.Subscription(organization=org).search(
        query={'search': 'name="{}"'.format(DEFAULT_SUBSCRIPTION_NAME)}
    )[0]
    activation_key.add_subscriptions(data={'quantity': 1, 'subscription_id': subscription.id})
    # ensure all the needed subscriptions are attached to activation key
    results = activation_key.subscriptions()['results']
    assert {product.name, DEFAULT_SUBSCRIPTION_NAME} == {
        ak_subscription['name'] for ak_subscription in results
    }
    # Set the activation service_level to Premium
    activation_key.service_level = 'Premium'
    activation_key = activation_key.update(['service_level'])
    with VirtualMachine() as vm:
        vm.install_katello_ca()
        vm.register_contenthost(org.label, activation_key=activation_key.name)
        assert vm.subscribed
        result = vm.run('subscription-manager list --consumed')
        assert result.return_code == 0
        assert 'Subscription Name:   {0}'.format(product.name) in '\n'.join(result.stdout)
        with session:
            session.organization.select(org.name)
            chost = session.contenthost.read(vm.hostname, widget_names='subscriptions')
            subscriptions = {
                subs['Repository Name'] for subs in chost['subscriptions']['resources']['assigned']
            }
            assert product.name in subscriptions
Пример #14
0
    def test_positive_add_custom_product(self):
        """Test that custom product can be associated to Activation Keys

        :id: 96ace967-e165-4069-8ff7-f54c4c822de0

        :expectedresults: Custom products are successfully associated to
            Activation key

        :CaseLevel: System

        :BZ: 1426386
        """
        result = setup_org_for_a_custom_repo({
            u'url':
            FAKE_0_YUM_REPO,
            u'organization-id':
            self.org['id'],
        })
        repo = Repository.info({u'id': result['repository-id']})
        content = ActivationKey.product_content({
            u'id':
            result['activationkey-id'],
            u'organization-id':
            self.org['id'],
        })
        self.assertEqual(content[0]['name'], repo['name'])
Пример #15
0
 def setUpClass(cls):
     """Set up single org with subscription to 1 RH and 1 custom products to
     reuse in tests
     """
     super(ErrataTestCase, cls).setUpClass()
     cls.env = entities.LifecycleEnvironment(
         organization=cls.session_org).create()
     cls.content_view = entities.ContentView(
         organization=cls.session_org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env,
         organization=cls.session_org,
     ).create()
     setup_org_for_a_rh_repo({
         'product': PRDS['rhel'],
         'repository-set': REPOSET['rhst7'],
         'repository': REPOS['rhst7']['name'],
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
     cls.custom_entitites = setup_org_for_a_custom_repo({
         'url':
         CUSTOM_REPO_URL,
         'organization-id':
         cls.session_org.id,
         'content-view-id':
         cls.content_view.id,
         'lifecycle-environment-id':
         cls.env.id,
         'activationkey-id':
         cls.activation_key.id,
     })
Пример #16
0
 def setUpClass(cls):
     """Create Org, Lifecycle Environment, Content View, Activation key"""
     super(ErrataTestCase, cls).setUpClass()
     cls.org = entities.Organization().create()
     cls.env = entities.LifecycleEnvironment(
         organization=cls.org).create()
     cls.content_view = entities.ContentView(
         organization=cls.org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env,
         organization=cls.org,
     ).create()
     setup_org_for_a_rh_repo({
         'product': PRDS['rhel'],
         'repository-set': REPOSET['rhst7'],
         'repository': REPOS['rhst7']['name'],
         'organization-id': cls.org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     }, force_manifest_upload=True)
     cls.custom_entities = setup_org_for_a_custom_repo({
         'url': FAKE_9_YUM_REPO,
         'organization-id': cls.org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
Пример #17
0
 def setUpClass(cls):
     """Set up single org with subscription to 1 RH and 1 custom products to
     reuse in tests
     """
     super(ErrataTestCase, cls).setUpClass()
     cls.env = entities.LifecycleEnvironment(
         organization=cls.session_org).create()
     cls.content_view = entities.ContentView(
         organization=cls.session_org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env,
         organization=cls.session_org,
     ).create()
     setup_org_for_a_rh_repo({
         'product': PRDS['rhel'],
         'repository-set': REPOSET['rhst7'],
         'repository': REPOS['rhst7']['name'],
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
     cls.custom_entitites = setup_org_for_a_custom_repo({
         'url': CUSTOM_REPO_URL,
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
Пример #18
0
 def setUpClass(cls):
     """Create Org, Lifecycle Environment, Content View, Activation key"""
     super(ErrataTestCase, cls).setUpClass()
     cls.org = entities.Organization().create()
     cls.env = entities.LifecycleEnvironment(organization=cls.org).create()
     cls.content_view = entities.ContentView(organization=cls.org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env, organization=cls.org).create()
     setup_org_for_a_rh_repo(
         {
             'product': PRDS['rhel'],
             'repository-set': REPOSET['rhst7'],
             'repository': REPOS['rhst7']['name'],
             'organization-id': cls.org.id,
             'content-view-id': cls.content_view.id,
             'lifecycle-environment-id': cls.env.id,
             'activationkey-id': cls.activation_key.id,
         },
         force_manifest_upload=True,
     )
     cls.custom_entities = setup_org_for_a_custom_repo({
         'url':
         FAKE_9_YUM_REPO,
         'organization-id':
         cls.org.id,
         'content-view-id':
         cls.content_view.id,
         'lifecycle-environment-id':
         cls.env.id,
         'activationkey-id':
         cls.activation_key.id,
     })
Пример #19
0
def custom_repo(module_org, module_lce, module_cv, activation_key):
    return setup_org_for_a_custom_repo({
        'url': settings.repos.yum_9.url,
        'organization-id': module_org.id,
        'content-view-id': module_cv.id,
        'lifecycle-environment-id': module_lce.id,
        'activationkey-id': activation_key.id,
    })
Пример #20
0
def rhel8_custom_repo_cv(module_manifest_org):
    """Create repo and publish CV so that packages are in Library"""
    return setup_org_for_a_custom_repo(
        {
            'url': settings.repos.module_stream_1.url,
            'organization-id': module_manifest_org.id,
        }
    )
Пример #21
0
def custom_repo(module_org, module_lce, module_cv, activation_key):
    return setup_org_for_a_custom_repo({
        'url': repos.FAKE_9_YUM_REPO,
        'organization-id': module_org.id,
        'content-view-id': module_cv.id,
        'lifecycle-environment-id': module_lce.id,
        'activationkey-id': activation_key.id,
    })
Пример #22
0
 def setUpClass(cls):
     """Create Org, Lifecycle Environment, Content View, Activation key"""
     super(HostCollectionPackageManagementTest, cls).setUpClass()
     cls.env = entities.LifecycleEnvironment(
         organization=cls.session_org).create()
     cls.content_view = entities.ContentView(
         organization=cls.session_org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env,
         organization=cls.session_org,
     ).create()
     rh_tools_content_data = setup_org_for_a_rh_repo({
         'product':
         PRDS['rhel'],
         'repository-set':
         REPOSET['rhst7'],
         'repository':
         REPOS['rhst7']['name'],
         'organization-id':
         cls.session_org.id,
         'content-view-id':
         cls.content_view.id,
         'lifecycle-environment-id':
         cls.env.id,
         'activationkey-id':
         cls.activation_key.id,
     })
     custom_content_data = [
         setup_org_for_a_custom_repo({
             'url':
             url,
             'organization-id':
             cls.session_org.id,
             'content-view-id':
             cls.content_view.id,
             'lifecycle-environment-id':
             cls.env.id,
             'activationkey-id':
             cls.activation_key.id,
         }) for url in [FAKE_1_YUM_REPO, FAKE_6_YUM_REPO]
     ]
     cls.rh_sat_tools_custom_product = None
     cls.rh_sat_tools_custom_repository = None
     if not settings.cdn and settings.sattools_repo['rhel7']:
         # RH sat tools repository was added as custom product and repo
         cls.rh_sat_tools_custom_product = entities.Product(
             id=rh_tools_content_data['product-id']).read()
         cls.rh_sat_tools_custom_repository = entities.Repository(
             id=rh_tools_content_data['repository-id']).read()
     cls.custom_products = [
         entities.Product(id=content_data['product-id']).read()
         for content_data in custom_content_data
     ]
     cls.custom_repositories = [
         entities.Repository(id=content_data['repository-id']).read()
         for content_data in custom_content_data
     ]
Пример #23
0
    def test_positive_install_multiple_packages_with_a_job_by_ip(self):
        """Run job to install several packages on host by ip

        :id: 8b73033f-83c9-4024-83c3-5e442a79d320

        :expectedresults: Verify the packages were successfully installed
            on host
        """
        # set connecting to host by ip
        Host.set_parameter({
            'host': self.client.hostname,
            'name': 'remote_execution_connect_by_ip',
            'value': 'True',
        })
        packages = ["cow", "dog", "lion"]
        # Create a custom repo
        setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
            u'content-view-id': self.content_view['id'],
            u'lifecycle-environment-id': self.env['id'],
            u'activationkey-id': self.activation_key['id'],
        })
        invocation_command = make_job_invocation({
            'job-template': 'Install Package - Katello SSH Default',
            'inputs': 'package={0} {1} {2}'.format(*packages),
            'search-query': "name ~ {0}".format(self.client.hostname),
        })
        self.assertEqual(
                invocation_command['success'],
                u'1',
                'host output: {0}'.format(
                    ' '.join(JobInvocation.get_output({
                        'id': invocation_command[u'id'],
                        'host': self.client.hostname})
                    )
                )
            )
        result = ssh.command(
                "rpm -q {0}".format(" ".join(packages)),
                hostname=self.client.ip_addr
                )
        self.assertEqual(result.return_code, 0)
Пример #24
0
    def test_positive_add_custom_product(self):
        """Test that custom product can be associated to Activation Keys

        @Feature: Activation key - Product

        @Assert: Custom products are successfully associated to Activation key
        """
        result = setup_org_for_a_custom_repo({u"url": FAKE_0_YUM_REPO, u"organization-id": self.org["id"]})
        repo = Repository.info({u"id": result["repository-id"]})
        content = ActivationKey.product_content({u"id": result["activationkey-id"], u"organization-id": self.org["id"]})
        self.assertEqual(content[0]["name"], repo["name"])
Пример #25
0
    def test_positive_list(self):
        """View all errata in an Org

        @id: 71c7a054-a644-4c1e-b304-6bc34ea143f4

        @Setup: Errata synced on satellite server.

        @Steps:

        1. Create two Orgs each having a product synced which contains errata.

        @Assert: Check that the errata belonging to one Org is not showing in
        the other.

        @CaseLevel: Integration
        """
        org = entities.Organization().create()
        env = entities.LifecycleEnvironment(organization=org).create()
        content_view = entities.ContentView(organization=org).create()
        activation_key = entities.ActivationKey(
            environment=env,
            organization=org,
        ).create()
        setup_org_for_a_custom_repo({
            'url': FAKE_3_YUM_REPO,
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        })
        with Session(self.browser) as session:
            session.nav.go_to_errata()
            self.errata.show_only_applicable(False)
            self.assertIsNone(self.errata.search(CUSTOM_REPO_ERRATA_ID))
            self.assertIsNotNone(self.errata.search(FAKE_1_ERRATA_ID))
            session.nav.go_to_select_org(org.name)
            session.nav.go_to_errata()
            self.errata.show_only_applicable(False)
            self.assertIsNone(self.errata.search(FAKE_1_ERRATA_ID))
            self.assertIsNotNone(self.errata.search(CUSTOM_REPO_ERRATA_ID))
Пример #26
0
    def test_positive_list(self):
        """View all errata in an Org

        @id: 71c7a054-a644-4c1e-b304-6bc34ea143f4

        @Setup: Errata synced on satellite server.

        @Steps:

        1. Create two Orgs each having a product synced which contains errata.

        @Assert: Check that the errata belonging to one Org is not showing in
        the other.

        @CaseLevel: Integration
        """
        org = entities.Organization().create()
        env = entities.LifecycleEnvironment(organization=org).create()
        content_view = entities.ContentView(organization=org).create()
        activation_key = entities.ActivationKey(
            environment=env,
            organization=org,
        ).create()
        setup_org_for_a_custom_repo({
            'url': FAKE_3_YUM_REPO,
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        })
        with Session(self.browser) as session:
            session.nav.go_to_errata()
            self.errata.show_only_applicable(False)
            self.assertIsNone(self.errata.search(CUSTOM_REPO_ERRATA_ID))
            self.assertIsNotNone(self.errata.search(FAKE_1_ERRATA_ID))
            session.nav.go_to_select_org(org.name)
            session.nav.go_to_errata()
            self.errata.show_only_applicable(False)
            self.assertIsNone(self.errata.search(FAKE_1_ERRATA_ID))
            self.assertIsNotNone(self.errata.search(CUSTOM_REPO_ERRATA_ID))
Пример #27
0
    def test_positive_add_redhat_and_custom_products(self):
        """Test if RH/Custom product can be associated to Activation key

        :id: 74c77426-18f5-4abb-bca9-a2135f7fcc1f

        :Steps:

            1. Create Activation key
            2. Associate RH product(s) to Activation Key
            3. Associate custom product(s) to Activation Key

        :expectedresults: RH/Custom product is successfully associated to
            Activation key

        :CaseLevel: System

        :BZ: 1426386
        """
        org = make_org()
        # Using CDN as we need this repo to be RH one no matter are we in
        # downstream or cdn
        result = setup_org_for_a_rh_repo(
            {
                u'product': PRDS['rhel'],
                u'repository-set': REPOSET['rhst7'],
                u'repository': REPOS['rhst7']['name'],
                u'organization-id': org['id'],
            },
            force_use_cdn=True)
        result = setup_org_for_a_custom_repo({
            u'url':
            FAKE_0_YUM_REPO,
            u'organization-id':
            org['id'],
            u'activationkey-id':
            result['activationkey-id'],
            u'content-view-id':
            result['content-view-id'],
            u'lifecycle-environment-id':
            result['lifecycle-environment-id'],
        })
        repo = Repository.info({u'id': result['repository-id']})
        content = ActivationKey.product_content({
            u'id':
            result['activationkey-id'],
            u'organization-id':
            org['id'],
        })
        self.assertEqual(len(content), 2)
        self.assertEqual({REPOSET['rhst7'], repo['name']},
                         {pc['name']
                          for pc in content})
Пример #28
0
 def setUpClass(cls):
     """Create Org, Lifecycle Environment, Content View, Activation key
     """
     super(RemoteExecutionTestCase, cls).setUpClass()
     cls.org = make_org()
     ssh.command(
         '''echo 'getenforce' > {0}'''.format(TEMPLATE_FILE)
     )
     cls.env = make_lifecycle_environment({
         u'organization-id': cls.org['id'],
     })
     cls.content_view = make_content_view({
         u'organization-id': cls.org['id'],
     })
     cls.activation_key = make_activation_key({
         u'lifecycle-environment-id': cls.env['id'],
         u'organization-id': cls.org['id'],
     })
     if settings.cdn:
         # Add subscription to Satellite Tools repo to activation key
         setup_org_for_a_rh_repo({
             u'product': PRDS['rhel'],
             u'repository-set': REPOSET['rhst7'],
             u'repository': REPOS['rhst7']['name'],
             u'organization-id': cls.org['id'],
             u'content-view-id': cls.content_view['id'],
             u'lifecycle-environment-id': cls.env['id'],
             u'activationkey-id': cls.activation_key['id'],
         })
     else:
         # Create custom internal Tools repo, add to activation key
         setup_org_for_a_custom_repo({
             u'url': settings.sattools_repo,
             u'organization-id': cls.org['id'],
             u'content-view-id': cls.content_view['id'],
             u'lifecycle-environment-id': cls.env['id'],
             u'activationkey-id': cls.activation_key['id'],
         })
Пример #29
0
    def test_positive_install_multiple_packages_with_a_job(self):
        """Run job to install several packages on host

        :id: 1cf2709e-e6cd-46c9-a7b7-c2e542c0e943

        :expectedresults: Verify the packages were successfully installed
            on host
        """
        packages = ["cow", "dog", "lion"]
        # Create a custom repo
        setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
            u'content-view-id': self.content_view['id'],
            u'lifecycle-environment-id': self.env['id'],
            u'activationkey-id': self.activation_key['id'],
        })
        invocation_command = make_job_invocation({
            'job-template': 'Install Package - Katello SSH Default',
            'inputs': 'package={0} {1} {2}'.format(*packages),
            'search-query': "name ~ {0}".format(self.client.hostname),
        })
        self.assertEqual(
                invocation_command['success'],
                u'1',
                'host output: {0}'.format(
                    ' '.join(JobInvocation.get_output({
                        'id': invocation_command[u'id'],
                        'host': self.client.hostname})
                    )
                )
            )
        result = ssh.command(
                "rpm -q {0}".format(" ".join(packages)),
                hostname=self.client.hostname
                )
        self.assertEqual(result.return_code, 0)
Пример #30
0
    def test_positive_install_multiple_packages_with_a_job(self):
        """Run job to install several packages on host

        :id: 1cf2709e-e6cd-46c9-a7b7-c2e542c0e943

        :expectedresults: Verify the packages were successfully installed
            on host
        """
        packages = ["cow", "dog", "lion"]
        # Create a custom repo
        setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
            u'content-view-id': self.content_view['id'],
            u'lifecycle-environment-id': self.env['id'],
            u'activationkey-id': self.activation_key['id'],
        })
        invocation_command = make_job_invocation({
            'job-template': 'Install Package - Katello SSH Default',
            'inputs': 'package={0} {1} {2}'.format(*packages),
            'search-query': "name ~ {0}".format(self.client.hostname),
        })
        self.assertEqual(
                invocation_command['success'],
                u'1',
                'host output: {0}'.format(
                    ' '.join(JobInvocation.get_output({
                        'id': invocation_command[u'id'],
                        'host': self.client.hostname})
                    )
                )
            )
        result = ssh.command(
                "rpm -q {0}".format(" ".join(packages)),
                hostname=self.client.hostname
                )
        self.assertEqual(result.return_code, 0)
Пример #31
0
    def setUpClass(cls):
        """Create Org, Lifecycle Environment, Content View, Activation key

        """
        super(KatelloAgentTestCase, cls).setUpClass()
        # Create new org, environment, CV and activation key
        KatelloAgentTestCase.org = make_org()
        KatelloAgentTestCase.env = make_lifecycle_environment({u"organization-id": KatelloAgentTestCase.org["id"]})
        KatelloAgentTestCase.content_view = make_content_view({u"organization-id": KatelloAgentTestCase.org["id"]})
        KatelloAgentTestCase.activation_key = make_activation_key(
            {
                u"lifecycle-environment-id": KatelloAgentTestCase.env["id"],
                u"organization-id": KatelloAgentTestCase.org["id"],
            }
        )
        # Add subscription to Satellite Tools repo to activation key
        setup_org_for_a_rh_repo(
            {
                u"product": PRDS["rhel"],
                u"repository-set": REPOSET["rhst7"],
                u"repository": REPOS["rhst7"]["name"],
                u"organization-id": KatelloAgentTestCase.org["id"],
                u"content-view-id": KatelloAgentTestCase.content_view["id"],
                u"lifecycle-environment-id": KatelloAgentTestCase.env["id"],
                u"activationkey-id": KatelloAgentTestCase.activation_key["id"],
            }
        )
        # Create custom repo, add subscription to activation key
        setup_org_for_a_custom_repo(
            {
                u"url": FAKE_0_YUM_REPO,
                u"organization-id": KatelloAgentTestCase.org["id"],
                u"content-view-id": KatelloAgentTestCase.content_view["id"],
                u"lifecycle-environment-id": KatelloAgentTestCase.env["id"],
                u"activationkey-id": KatelloAgentTestCase.activation_key["id"],
            }
        )
Пример #32
0
    def test_positive_content_override(self):
        """Positive content override

        :id: a4912cc0-3bf7-4e90-bb51-ec88b2fad227

        :Steps:

            1. Create activation key and add content
            2. Get the first product's label
            3. Override the product's content enabled state
            4. Verify that the command succeeded

        :expectedresults: Activation key content override was successful

        :CaseLevel: System
        """
        result = setup_org_for_a_custom_repo({
            u'url':
            FAKE_0_YUM_REPO,
            u'organization-id':
            self.org['id'],
        })
        content = ActivationKey.product_content({
            u'id':
            result['activationkey-id'],
            u'organization-id':
            self.org['id'],
        })
        for override_value in (True, False):
            with self.subTest(override_value):
                ActivationKey.content_override({
                    u'content-label':
                    content[0]['label'],
                    u'id':
                    result['activationkey-id'],
                    u'organization-id':
                    self.org['id'],
                    u'value':
                    int(override_value),
                })
                # Retrieve the product content enabled flag
                content = ActivationKey.product_content({
                    u'id':
                    result['activationkey-id'],
                    u'organization-id':
                    self.org['id'],
                })
                self.assertEqual(content[0]['enabled?'],
                                 str(override_value).lower())
Пример #33
0
 def setUpClass(cls):
     """Set up single org with subscription to 1 RH and 1 custom products to
     reuse in tests
     """
     super(ErrataTestCase, cls).setUpClass()
     cls.env = entities.LifecycleEnvironment(
         organization=cls.session_org).create()
     cls.content_view = entities.ContentView(
         organization=cls.session_org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env,
         organization=cls.session_org,
     ).create()
     setup_org_for_a_rh_repo(
         {
             'product': PRDS['rhel'],
             'repository-set': REPOSET['rhst7'],
             'repository': REPOS['rhst7']['name'],
             'organization-id': cls.session_org.id,
             'content-view-id': cls.content_view.id,
             'lifecycle-environment-id': cls.env.id,
             'activationkey-id': cls.activation_key.id,
         },
         force_manifest_upload=True)
     cls.custom_entitites = setup_org_for_a_custom_repo({
         'url':
         CUSTOM_REPO_URL,
         'organization-id':
         cls.session_org.id,
         'content-view-id':
         cls.content_view.id,
         'lifecycle-environment-id':
         cls.env.id,
         'activationkey-id':
         cls.activation_key.id,
     })
     rhva_repo = enable_rhrepo_and_fetchid(
         basearch=DEFAULT_ARCHITECTURE,
         org_id=cls.session_org.id,
         product=PRDS['rhel'],
         repo=REPOS['rhva6']['name'],
         reposet=REPOSET['rhva6'],
         releasever=DEFAULT_RELEASE_VERSION,
     )
     assert entities.Repository(id=rhva_repo).sync()['result'] == 'success'
     cls.rhva_errata_id = REAL_4_ERRATA_ID
     cls.rhva_errata_cves = REAL_4_ERRATA_CVES
Пример #34
0
    def test_positive_add_custom_product(self):
        """@Test: Test that custom product can be associated to Activation Keys

        @Feature: Activation key - Product

        @Assert: Custom products are successfully associated to Activation key
        """
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
        })
        repo = Repository.info({u'id': result['repository-id']})
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(content[0]['name'], repo['name'])
    def test_positive_add_custom_product(self):
        """Test that custom product can be associated to Activation Keys

        @Feature: Activation key - Product

        @Assert: Custom products are successfully associated to Activation key
        """
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
        })
        repo = Repository.info({u'id': result['repository-id']})
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(content[0]['name'], repo['name'])
Пример #36
0
 def setUpClass(cls):
     """Create Org, Lifecycle Environment, Content View, Activation key"""
     super(HostCollectionPackageManagementTest, cls).setUpClass()
     cls.env = entities.LifecycleEnvironment(
         organization=cls.session_org).create()
     cls.content_view = entities.ContentView(
         organization=cls.session_org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env,
         organization=cls.session_org,
     ).create()
     rh_tools_content_data = setup_org_for_a_rh_repo({
         'product': PRDS['rhel'],
         'repository-set': REPOSET['rhst7'],
         'repository': REPOS['rhst7']['name'],
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
     custom_content_data = [
         setup_org_for_a_custom_repo({
             'url': url,
             'organization-id': cls.session_org.id,
             'content-view-id': cls.content_view.id,
             'lifecycle-environment-id': cls.env.id,
             'activationkey-id': cls.activation_key.id,
         }) for url in [FAKE_1_YUM_REPO, FAKE_6_YUM_REPO]
     ]
     cls.rh_sat_tools_custom_product = None
     cls.rh_sat_tools_custom_repository = None
     if not settings.cdn and settings.sattools_repo['rhel7']:
         # RH sat tools repository was added as custom product and repo
         cls.rh_sat_tools_custom_product = entities.Product(
             id=rh_tools_content_data['product-id']).read()
         cls.rh_sat_tools_custom_repository = entities.Repository(
             id=rh_tools_content_data['repository-id']).read()
     cls.custom_products = [
         entities.Product(id=content_data['product-id']).read()
         for content_data in custom_content_data
     ]
     cls.custom_repositories = [
         entities.Repository(id=content_data['repository-id']).read()
         for content_data in custom_content_data
     ]
Пример #37
0
def test_positive_host_associations(session, default_sat):
    """Register few hosts with different activation keys and ensure proper
    data is reflected under Associations > Content Hosts tab

    :id: 111aa2af-caf4-4940-8e4b-5b071d488876

    :expectedresults: Only hosts, registered by specific AK are shown under
        Associations > Content Hosts tab

    :customerscenario: true

    :BZ: 1344033, 1372826, 1394388

    :CaseLevel: System
    """
    org = entities.Organization().create()
    org_entities = setup_org_for_a_custom_repo({
        'url': settings.repos.yum_1.url,
        'organization-id': org.id
    })
    ak1 = entities.ActivationKey(id=org_entities['activationkey-id']).read()
    ak2 = entities.ActivationKey(
        content_view=org_entities['content-view-id'],
        environment=org_entities['lifecycle-environment-id'],
        organization=org.id,
    ).create()
    with VMBroker(nick='rhel7', host_classes={'host': ContentHost},
                  _count=2) as hosts:
        vm1, vm2 = hosts
        vm1.install_katello_ca(default_sat)
        vm1.register_contenthost(org.label, ak1.name)
        assert vm1.subscribed
        vm2.install_katello_ca(default_sat)
        vm2.register_contenthost(org.label, ak2.name)
        assert vm2.subscribed
        with session:
            session.organization.select(org.name)
            ak1 = session.activationkey.read(ak1.name,
                                             widget_names='content_hosts')
            assert len(ak1['content_hosts']['table']) == 1
            assert ak1['content_hosts']['table'][0]['Name'] == vm1.hostname
            ak2 = session.activationkey.read(ak2.name,
                                             widget_names='content_hosts')
            assert len(ak2['content_hosts']['table']) == 1
            assert ak2['content_hosts']['table'][0]['Name'] == vm2.hostname
Пример #38
0
    def test_positive_add_custom_product(self):
        """Test that custom product can be associated to Activation Keys

        @id: 96ace967-e165-4069-8ff7-f54c4c822de0

        @Assert: Custom products are successfully associated to Activation key

        @CaseLevel: System
        """
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
        })
        repo = Repository.info({u'id': result['repository-id']})
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(content[0]['name'], repo['name'])
Пример #39
0
    def test_positive_host_associations(self):
        """Register few hosts with different activation keys and ensure proper
        data is reflected under Associations > Content Hosts tab

        :id: 111aa2af-caf4-4940-8e4b-5b071d488876

        :expectedresults: Only hosts, registered by specific AK are shown under
            Associations > Content Hosts tab

        :BZ: 1344033, 1372826, 1394388

        :CaseLevel: System
        """
        org = entities.Organization().create()
        org_entities = setup_org_for_a_custom_repo({
            'url': FAKE_1_YUM_REPO,
            'organization-id': org.id,
        })
        ak1 = entities.ActivationKey(
            id=org_entities['activationkey-id']).read()
        ak2 = entities.ActivationKey(
            content_view=org_entities['content-view-id'],
            environment=org_entities['lifecycle-environment-id'],
            organization=org.id,
        ).create()
        with VirtualMachine(distro=DISTRO_RHEL7) as vm1, VirtualMachine(
                distro=DISTRO_RHEL7) as vm2:
            vm1.install_katello_ca()
            vm1.register_contenthost(org.label, ak1.name)
            self.assertTrue(vm1.subscribed)
            vm2.install_katello_ca()
            vm2.register_contenthost(org.label, ak2.name)
            self.assertTrue(vm2.subscribed)
            with Session(self) as session:
                set_context(session, org=org.name)
                ak1_hosts = self.activationkey.fetch_associated_content_hosts(
                    ak1.name)
                self.assertEqual(len(ak1_hosts), 1)
                self.assertIn(vm1.hostname, ak1_hosts)
                ak2_hosts = self.activationkey.fetch_associated_content_hosts(
                    ak2.name)
                self.assertEqual(len(ak2_hosts), 1)
                self.assertIn(vm2.hostname, ak2_hosts)
Пример #40
0
def test_positive_host_associations(session):
    """Register few hosts with different activation keys and ensure proper
    data is reflected under Associations > Content Hosts tab

    :id: 111aa2af-caf4-4940-8e4b-5b071d488876

    :expectedresults: Only hosts, registered by specific AK are shown under
        Associations > Content Hosts tab

    :BZ: 1344033, 1372826, 1394388

    :CaseLevel: System
    """
    org = entities.Organization().create()
    org_entities = setup_org_for_a_custom_repo({
        'url': FAKE_1_YUM_REPO,
        'organization-id': org.id,
    })
    ak1 = entities.ActivationKey(
        id=org_entities['activationkey-id']).read()
    ak2 = entities.ActivationKey(
        content_view=org_entities['content-view-id'],
        environment=org_entities['lifecycle-environment-id'],
        organization=org.id,
    ).create()
    with VirtualMachine(distro=DISTRO_RHEL7) as vm1, VirtualMachine(
            distro=DISTRO_RHEL7) as vm2:
        vm1.install_katello_ca()
        vm1.register_contenthost(org.label, ak1.name)
        assert vm1.subscribed
        vm2.install_katello_ca()
        vm2.register_contenthost(org.label, ak2.name)
        assert vm2.subscribed
        with session:
            session.organization.select(org.name)
            ak1 = session.activationkey.read(ak1.name)
            assert len(ak1['content_hosts']['resources']) == 1
            assert ak1['content_hosts']['resources'][0]['Name'] == vm1.hostname
            # fixme: drop next line after airgun#63 is solved
            session.activationkey.search(ak2.name)
            ak2 = session.activationkey.read(ak2.name)
            assert len(ak2['content_hosts']['resources']) == 1
            assert ak2['content_hosts']['resources'][0]['Name'] == vm2.hostname
Пример #41
0
    def test_positive_add_redhat_and_custom_products(self):
        """Test if RH/Custom product can be associated to Activation key

        :id: 74c77426-18f5-4abb-bca9-a2135f7fcc1f

        :Steps:

            1. Create Activation key
            2. Associate RH product(s) to Activation Key
            3. Associate custom product(s) to Activation Key

        :expectedresults: RH/Custom product is successfully associated to
            Activation key

        :CaseLevel: System

        :BZ: 1426386
        """
        org = make_org()
        # Using CDN as we need this repo to be RH one no matter are we in
        # downstream or cdn
        result = setup_org_for_a_rh_repo({
            u'product': PRDS['rhel'],
            u'repository-set': REPOSET['rhst7'],
            u'repository': REPOS['rhst7']['name'],
            u'organization-id': org['id'],
        }, force_use_cdn=True)
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': org['id'],
            u'activationkey-id': result['activationkey-id'],
            u'content-view-id': result['content-view-id'],
            u'lifecycle-environment-id': result['lifecycle-environment-id'],
        })
        repo = Repository.info({u'id': result['repository-id']})
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': org['id'],
        })
        self.assertEqual(len(content), 2)
        self.assertEqual(
            {REPOSET['rhst7'], repo['name']}, {pc['name'] for pc in content})
Пример #42
0
    def test_positive_content_override(self):
        """Positive content override

        :id: a4912cc0-3bf7-4e90-bb51-ec88b2fad227

        :Steps:

            1. Create activation key and add content
            2. Get the first product's label
            3. Override the product's content enabled state
            4. Verify that the command succeeded

        :expectedresults: Activation key content override was successful

        :CaseLevel: System
        """
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
        })
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        for override_value in (True, False):
            with self.subTest(override_value):
                ActivationKey.content_override({
                    u'content-label': content[0]['label'],
                    u'id': result['activationkey-id'],
                    u'organization-id': self.org['id'],
                    u'value': int(override_value),
                })
                # Retrieve the product content enabled flag
                content = ActivationKey.product_content({
                    u'id': result['activationkey-id'],
                    u'organization-id': self.org['id'],
                })
                self.assertEqual(
                    content[0]['override'],
                    'enabled:{}'.format(int(override_value))
                )
Пример #43
0
    def test_positive_create_content_and_check_enabled(self):
        """Create activation key and add content to it. Check enabled state.

        :id: abfc6c6e-acd1-4761-b309-7e68e1d17172

        :expectedresults: Enabled state is shown for product content
            successfully

        :BZ: 1361993

        :CaseLevel: Integration
        """
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
        })
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(content[0]['enabled?'], 'true')
Пример #44
0
    def test_positive_create_content_and_check_enabled(self):
        """Create activation key and add content to it. Check enabled state.

        :id: abfc6c6e-acd1-4761-b309-7e68e1d17172

        :expectedresults: Enabled state is shown for product content
            successfully

        :BZ: 1361993

        :CaseLevel: Integration
        """
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
        })
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(content[0]['enabled?'], 'true')
Пример #45
0
 def setUpClass(cls):
     """Set up single org with subscription to 1 RH and 1 custom products to
     reuse in tests
     """
     super(ErrataTestCase, cls).setUpClass()
     cls.env = entities.LifecycleEnvironment(
         organization=cls.session_org).create()
     cls.content_view = entities.ContentView(
         organization=cls.session_org).create()
     cls.activation_key = entities.ActivationKey(
         environment=cls.env,
         organization=cls.session_org,
     ).create()
     setup_org_for_a_rh_repo({
         'product': PRDS['rhel'],
         'repository-set': REPOSET['rhst7'],
         'repository': REPOS['rhst7']['name'],
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     }, force_manifest_upload=True)
     cls.custom_entitites = setup_org_for_a_custom_repo({
         'url': CUSTOM_REPO_URL,
         'organization-id': cls.session_org.id,
         'content-view-id': cls.content_view.id,
         'lifecycle-environment-id': cls.env.id,
         'activationkey-id': cls.activation_key.id,
     })
     rhva_repo = enable_rhrepo_and_fetchid(
         basearch=DEFAULT_ARCHITECTURE,
         org_id=cls.session_org.id,
         product=PRDS['rhel'],
         repo=REPOS['rhva6']['name'],
         reposet=REPOSET['rhva6'],
         releasever=DEFAULT_RELEASE_VERSION,
     )
     assert entities.Repository(id=rhva_repo).sync()['result'] == 'success'
     cls.rhva_errata_id = REAL_4_ERRATA_ID
     cls.rhva_errata_cves = REAL_4_ERRATA_CVES
    def test_positive_content_override(self):
        """Positive content override

        @Feature: Activation key copy

        @Steps:

        1. Create activation key and add content
        2. Get the first product's label
        3. Override the product's content enabled state
        4. Verify that the command succeeded

        @BZ: 1180282

        @Assert: Activation key content override was successful
        """
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
        })
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        for override_value in (u'1', u'0'):
            with self.subTest(override_value):
                ActivationKey.content_override({
                    u'content-label': content[0]['label'],
                    u'id': result['activationkey-id'],
                    u'organization-id': self.org['id'],
                    u'value': override_value,
                })
                # Retrieve the product content enabled flag
                content = ActivationKey.product_content({
                    u'id': result['activationkey-id'],
                    u'organization-id': self.org['id'],
                })
                self.assertEqual(content[0]['enabled?'], override_value)
Пример #47
0
    def test_positive_content_override(self):
        """@Test: Positive content override

        @Feature: Activation key copy

        @Steps:

        1. Create activation key and add content
        2. Get the first product's label
        3. Override the product's content enabled state
        4. Verify that the command succeeded

        @BZ: 1180282

        @Assert: Activation key content override was successful
        """
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
        })
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        for override_value in (u'1', u'0'):
            with self.subTest(override_value):
                ActivationKey.content_override({
                    u'content-label': content[0]['label'],
                    u'id': result['activationkey-id'],
                    u'organization-id': self.org['id'],
                    u'value': override_value,
                })
                # Retrieve the product content enabled flag
                content = ActivationKey.product_content({
                    u'id': result['activationkey-id'],
                    u'organization-id': self.org['id'],
                })
                self.assertEqual(content[0]['enabled?'], override_value)
Пример #48
0
    def test_positive_add_redhat_and_custom_products(self):
        """Test if RH/Custom product can be associated to Activation key

        @Feature: Activation key - Product

        @Steps:

        1. Create Activation key
        2. Associate RH product(s) to Activation Key
        3. Associate custom product(s) to Activation Key

        @BZ: 1293585

        @Assert: RH/Custom product is successfully associated to Activation key
        """
        result = setup_org_for_a_rh_repo(
            {
                u"product": PRDS["rhel"],
                u"repository-set": REPOSET["rhst7"],
                u"repository": REPOS["rhst7"]["name"],
                u"organization-id": self.org["id"],
            }
        )
        result = setup_org_for_a_custom_repo(
            {
                u"url": FAKE_0_YUM_REPO,
                u"organization-id": self.org["id"],
                u"activationkey-id": result["activationkey-id"],
                u"content-view-id": result["content-view-id"],
                u"lifecycle-environment-id": result["lifecycle-environment-id"],
            }
        )
        repo = Repository.info({u"id": result["repository-id"]})
        content = ActivationKey.product_content({u"id": result["activationkey-id"], u"organization-id": self.org["id"]})
        self.assertEqual(len(content), 2)
        self.assertEqual(content[0]["name"], REPOSET["rhst7"])
        self.assertEqual(content[1]["name"], repo["name"])
Пример #49
0
    def test_positive_add_redhat_and_custom_products(self):
        """Test if RH/Custom product can be associated to Activation key

        @id: 74c77426-18f5-4abb-bca9-a2135f7fcc1f

        @Steps:

        1. Create Activation key
        2. Associate RH product(s) to Activation Key
        3. Associate custom product(s) to Activation Key

        @Assert: RH/Custom product is successfully associated to Activation key

        @CaseLevel: System
        """
        org = make_org()
        result = setup_org_for_a_rh_repo({
            u'product': PRDS['rhel'],
            u'repository-set': REPOSET['rhst7'],
            u'repository': REPOS['rhst7']['name'],
            u'organization-id': org['id'],
        })
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': org['id'],
            u'activationkey-id': result['activationkey-id'],
            u'content-view-id': result['content-view-id'],
            u'lifecycle-environment-id': result['lifecycle-environment-id'],
        })
        repo = Repository.info({u'id': result['repository-id']})
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': org['id'],
        })
        self.assertEqual(len(content), 2)
        self.assertEqual(
            {REPOSET['rhst7'], repo['name']}, {pc['name'] for pc in content})
    def test_positive_add_redhat_and_custom_products(self):
        """Test if RH/Custom product can be associated to Activation key

        @Feature: Activation key - Product

        @Steps:

        1. Create Activation key
        2. Associate RH product(s) to Activation Key
        3. Associate custom product(s) to Activation Key

        @BZ: 1293585

        @Assert: RH/Custom product is successfully associated to Activation key
        """
        result = setup_org_for_a_rh_repo({
            u'product': PRDS['rhel'],
            u'repository-set': REPOSET['rhst7'],
            u'repository': REPOS['rhst7']['name'],
            u'organization-id': self.org['id'],
        })
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
            u'activationkey-id': result['activationkey-id'],
            u'content-view-id': result['content-view-id'],
            u'lifecycle-environment-id': result['lifecycle-environment-id'],
        })
        repo = Repository.info({u'id': result['repository-id']})
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(len(content), 2)
        self.assertEqual(content[0]['name'], REPOSET['rhst7'])
        self.assertEqual(content[1]['name'], repo['name'])
Пример #51
0
    def test_positive_add_redhat_and_custom_products(self):
        """@Test: Test if RH/Custom product can be associated to Activation key

        @Feature: Activation key - Product

        @Steps:

        1. Create Activation key
        2. Associate RH product(s) to Activation Key
        3. Associate custom product(s) to Activation Key

        @BZ: 1293585

        @Assert: RH/Custom product is successfully associated to Activation key
        """
        result = setup_org_for_a_rh_repo({
            u'product': PRDS['rhel'],
            u'repository-set': REPOSET['rhst7'],
            u'repository': REPOS['rhst7']['name'],
            u'organization-id': self.org['id'],
        })
        result = setup_org_for_a_custom_repo({
            u'url': FAKE_0_YUM_REPO,
            u'organization-id': self.org['id'],
            u'activationkey-id': result['activationkey-id'],
            u'content-view-id': result['content-view-id'],
            u'lifecycle-environment-id': result['lifecycle-environment-id'],
        })
        repo = Repository.info({u'id': result['repository-id']})
        content = ActivationKey.product_content({
            u'id': result['activationkey-id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(len(content), 2)
        self.assertEqual(content[0]['name'], REPOSET['rhst7'])
        self.assertEqual(content[1]['name'], repo['name'])
Пример #52
0
    def test_positive_get_applicable_for_host(self):
        """Get applicable errata ids for a host

        :id: 51d44d51-eb3f-4ee4-a1df-869629d427ac

        :Setup:
            1. Errata synced on satellite server.
            2. Some Content hosts present.

        :Steps: GET /api/v2/hosts/:id/errata

        :expectedresults: The available errata is retrieved.

        :CaseLevel: System
        """
        org = entities.Organization().create()
        env = entities.LifecycleEnvironment(organization=org).create()
        content_view = entities.ContentView(organization=org).create()
        activation_key = entities.ActivationKey(environment=env,
                                                organization=org).create()
        setup_org_for_a_rh_repo(
            {
                'product': PRDS['rhel'],
                'repository-set': REPOSET['rhst6'],
                'repository': REPOS['rhst6']['name'],
                'organization-id': org.id,
                'content-view-id': content_view.id,
                'lifecycle-environment-id': env.id,
                'activationkey-id': activation_key.id,
            },
            force_manifest_upload=True,
        )
        setup_org_for_a_custom_repo({
            'url': CUSTOM_REPO_URL,
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        })
        repo_id = enable_rhrepo_and_fetchid(
            basearch=DEFAULT_ARCHITECTURE,
            org_id=org.id,
            product=PRDS['rhel'],
            repo=REPOS['rhva6']['name'],
            reposet=REPOSET['rhva6'],
            releasever=DEFAULT_RELEASE_VERSION,
        )
        repo = entities.Repository(id=repo_id)
        self.assertEqual(repo.sync()['result'], 'success')
        content_view = content_view.read()
        content_view.repository.append(repo)
        content_view = content_view.update(['repository'])
        content_view.publish()
        versions = sorted(content_view.read().version, key=lambda ver: ver.id)
        cvv = versions[-1].read()
        promote(cvv, env.id)
        with VirtualMachine(distro=DISTRO_RHEL6) as client:
            client.install_katello_ca()
            client.register_contenthost(org.label, activation_key.name)
            self.assertTrue(client.subscribed)
            client.enable_repo(REPOS['rhst6']['id'])
            client.enable_repo(REPOS['rhva6']['id'])
            client.install_katello_agent()
            host = (entities.Host().search(
                query={'search': 'name={0}'.format(client.hostname)})
                    [0].read())
            erratum = self._fetch_available_errata(host, 0)
            self.assertEqual(len(erratum), 0)
            client.run('yum install -y {0}'.format(FAKE_1_CUSTOM_PACKAGE))
            erratum = self._fetch_available_errata(host, 1)
            self.assertEqual(len(erratum), 1)
            self.assertIn(CUSTOM_REPO_ERRATA_ID,
                          [errata['errata_id'] for errata in erratum])
            client.run('yum install -y {0}'.format(REAL_0_RH_PACKAGE))
            erratum = self._fetch_available_errata(host, 3)
            self.assertEqual(len(erratum), 3)
            self.assertTrue({REAL_1_ERRATA_ID, REAL_2_ERRATA_ID}.issubset(
                {errata['errata_id']
                 for errata in erratum}))
Пример #53
0
    def test_positive_get_diff_for_cv_envs(self):
        """Generate a difference in errata between a set of environments
        for a content view

        :id: 96732506-4a89-408c-8d7e-f30c8d469769

        :Setup:

            1. Errata synced on satellite server.
            2. Multiple environments present.

        :Steps: GET /katello/api/compare

        :expectedresults: Difference in errata between a set of environments
            for a content view is retrieved.

        :CaseLevel: System
        """
        org = entities.Organization().create()
        env = entities.LifecycleEnvironment(
            organization=org).create()
        content_view = entities.ContentView(
            organization=org).create()
        activation_key = entities.ActivationKey(
            environment=env,
            organization=org,
        ).create()
        setup_org_for_a_rh_repo({
            'product': PRDS['rhel'],
            'repository-set': REPOSET['rhst7'],
            'repository': REPOS['rhst7']['name'],
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        }, force_use_cdn=True)
        setup_org_for_a_custom_repo({
            'url': CUSTOM_REPO_URL,
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        })
        new_env = entities.LifecycleEnvironment(
            organization=org,
            prior=env,
        ).create()
        cvvs = content_view.read().version[-2:]
        promote(cvvs[-1], new_env.id)
        result = entities.Errata().compare(data={
            'content_view_version_ids': [cvv.id for cvv in cvvs],
            'per_page': 9999,
        })
        cvv2_only_errata = next(
            errata for errata in result['results']
            if errata['errata_id'] == CUSTOM_REPO_ERRATA_ID
        )
        self.assertEqual([cvvs[-1].id], cvv2_only_errata['comparison'])
        both_cvvs_errata = next(
            errata for errata in result['results']
            if errata['errata_id'] == REAL_0_ERRATA_ID
        )
        self.assertEqual(
            set(cvv.id for cvv in cvvs), set(both_cvvs_errata['comparison']))
Пример #54
0
    def test_positive_get_applicable_for_host(self):
        """Get applicable errata ids for a host

        :id: 51d44d51-eb3f-4ee4-a1df-869629d427ac

        :Setup:
            1. Errata synced on satellite server.
            2. Some Content hosts present.

        :Steps: GET /api/v2/hosts/:id/errata

        :expectedresults: The available errata is retrieved.

        :CaseLevel: System
        """
        org = entities.Organization().create()
        env = entities.LifecycleEnvironment(
            organization=org).create()
        content_view = entities.ContentView(
            organization=org).create()
        activation_key = entities.ActivationKey(
            environment=env,
            organization=org,
        ).create()
        setup_org_for_a_rh_repo({
            'product': PRDS['rhel'],
            'repository-set': REPOSET['rhst6'],
            'repository': REPOS['rhst6']['name'],
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        }, force_manifest_upload=True)
        setup_org_for_a_custom_repo({
            'url': CUSTOM_REPO_URL,
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        })
        repo_id = enable_rhrepo_and_fetchid(
            basearch=DEFAULT_ARCHITECTURE,
            org_id=org.id,
            product=PRDS['rhel'],
            repo=REPOS['rhva6']['name'],
            reposet=REPOSET['rhva6'],
            releasever=DEFAULT_RELEASE_VERSION,
        )
        repo = entities.Repository(id=repo_id)
        self.assertEqual(repo.sync()['result'], 'success')
        content_view = content_view.read()
        content_view.repository.append(repo)
        content_view = content_view.update(['repository'])
        content_view.publish()
        versions = sorted(content_view.read().version, key=lambda ver: ver.id)
        cvv = versions[-1].read()
        promote(cvv, env.id)
        with VirtualMachine(distro=DISTRO_RHEL6) as client:
            client.install_katello_ca()
            client.register_contenthost(org.label, activation_key.name)
            self.assertTrue(client.subscribed)
            client.enable_repo(REPOS['rhst6']['id'])
            client.enable_repo(REPOS['rhva6']['id'])
            client.install_katello_agent()
            host = entities.Host().search(query={
                'search': 'name={0}'.format(client.hostname)})[0].read()
            erratum = self._fetch_available_errata(host, 0)
            self.assertEqual(len(erratum), 0)
            client.run(
                'yum install -y {0}'.format(FAKE_1_CUSTOM_PACKAGE))
            erratum = self._fetch_available_errata(host, 1)
            self.assertEqual(len(erratum), 1)
            self.assertIn(
                CUSTOM_REPO_ERRATA_ID,
                [errata['errata_id'] for errata in erratum],
            )
            client.run('yum install -y {0}'.format(REAL_0_RH_PACKAGE))
            erratum = self._fetch_available_errata(host, 3)
            self.assertEqual(len(erratum), 3)
            self.assertTrue(
                {REAL_1_ERRATA_ID, REAL_2_ERRATA_ID}.issubset(
                    {errata['errata_id'] for errata in erratum})
            )
Пример #55
0
    def test_positive_get_count_for_host(self):
        """Available errata count when retrieving Host

        :id: 2f35933f-8026-414e-8f75-7f4ec048faae

        :Setup:

            1. Errata synced on satellite server.
            2. Some Content hosts present.

        :Steps: GET /api/v2/hosts

        :expectedresults: The available errata count is retrieved.

        :CaseLevel: System
        """
        org = entities.Organization().create()
        env = entities.LifecycleEnvironment(
            organization=org).create()
        content_view = entities.ContentView(
            organization=org).create()
        activation_key = entities.ActivationKey(
            environment=env,
            organization=org,
        ).create()
        setup_org_for_a_rh_repo({
            'product': PRDS['rhel'],
            'repository-set': REPOSET['rhst6'],
            'repository': REPOS['rhst6']['name'],
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        }, force_manifest_upload=True)
        setup_org_for_a_custom_repo({
            'url': CUSTOM_REPO_URL,
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        })
        repo_id = enable_rhrepo_and_fetchid(
            basearch=DEFAULT_ARCHITECTURE,
            org_id=org.id,
            product=PRDS['rhel'],
            repo=REPOS['rhva6']['name'],
            reposet=REPOSET['rhva6'],
            releasever=DEFAULT_RELEASE_VERSION,
        )
        repo = entities.Repository(id=repo_id)
        self.assertEqual(repo.sync()['result'], 'success')
        content_view = content_view.read()
        content_view.repository.append(repo)
        content_view = content_view.update(['repository'])
        content_view.publish()
        versions = sorted(content_view.read().version, key=lambda ver: ver.id)
        cvv = versions[-1].read()
        promote(cvv, env.id)
        with VirtualMachine(distro=DISTRO_RHEL6) as client:
            client.install_katello_ca()
            client.register_contenthost(org.label, activation_key.name)
            self.assertTrue(client.subscribed)
            client.enable_repo(REPOS['rhst6']['id'])
            client.enable_repo(REPOS['rhva6']['id'])
            client.install_katello_agent()
            host = entities.Host().search(query={
                'search': 'name={0}'.format(client.hostname)})[0].read()
            for errata in ('security', 'bugfix', 'enhancement'):
                if bz_bug_is_open(1482502):
                    self._validate_errata_counts(host, errata, None)
                else:
                    self._validate_errata_counts(host, errata, 0)
            client.run(
                'yum install -y {0}'.format(FAKE_1_CUSTOM_PACKAGE))
            self._validate_errata_counts(host, 'security', 1)
            client.run('yum install -y {0}'.format(REAL_0_RH_PACKAGE))
            for errata in ('bugfix', 'enhancement'):
                self._validate_errata_counts(host, errata, 1)
Пример #56
0
    def test_positive_show_count_on_chost_details_page(self):
        """Errata count on Content host Details page

        :id: 388229da-2b0b-41aa-a457-9b5ecbf3df4b

        :Setup:

            1. Errata synced on satellite server.
            2. Some content hosts are present.

        :Steps: Go to Hosts -> Content Hosts -> Select Content Host -> Details
            page.

        :expectedresults:

            1. The errata section should be displayed with Security, Bugfix,
                Enhancement types.
            2. The number should link to the errata details page, filtered  by
                type.

        :CaseLevel: System
        """
        org = entities.Organization().create()
        env = entities.LifecycleEnvironment(
            organization=org).create()
        content_view = entities.ContentView(
            organization=org).create()
        activation_key = entities.ActivationKey(
            environment=env,
            organization=org,
        ).create()
        setup_org_for_a_rh_repo({
            'product': PRDS['rhel'],
            'repository-set': REPOSET['rhst6'],
            'repository': REPOS['rhst6']['name'],
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        }, force_use_cdn=True)
        setup_org_for_a_custom_repo({
            'url': CUSTOM_REPO_URL,
            'organization-id': org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        })
        RepositorySet.enable({
            'basearch': DEFAULT_ARCHITECTURE,
            'name': REPOSET['rhva6'],
            'organization-id': org.id,
            'product': PRDS['rhel'],
            'releasever': DEFAULT_RELEASE_VERSION,
        })
        rhel_repo = Repository.info({
            'name': REPOS['rhva6']['name'],
            'organization-id': org.id,
            'product': PRDS['rhel'],
        })
        Repository.synchronize({
            'name': REPOS['rhva6']['name'],
            'organization-id': org.id,
            'product': PRDS['rhel'],
        })
        ContentView.add_repository({
            'id': content_view.id,
            'organization-id': org.id,
            'repository-id': rhel_repo['id'],
        })
        ContentView.publish({'id': content_view.id})
        cvv = ContentView.info({'id': content_view.id})['versions'][-1]
        ContentView.version_promote({
            'id': cvv['id'],
            'organization-id': org.id,
            'to-lifecycle-environment-id': env.id,
        })
        with VirtualMachine(distro=DISTRO_RHEL6) as client:
            client.install_katello_ca()
            client.register_contenthost(org.label, activation_key.name)
            self.assertTrue(client.subscribed)
            client.enable_repo(REPOS['rhst6']['id'])
            client.enable_repo(REPOS['rhva6']['id'])
            client.install_katello_agent()
            with Session(self) as session:
                session.nav.go_to_select_org(org.name)
                result = self.contenthost.fetch_errata_counts(
                    client.hostname, details_page=True)
                for errata in ('security', 'bug_fix', 'enhancement'):
                    self.assertEqual(result[errata]['value'], 0)
                if bz_bug_is_open(1484044):
                    self.assertNotIn(
                        result['security']['color'], ('red', 'yellow'))
                else:
                    self.assertEqual(result['security']['color'], 'black')
                client.run(
                    'yum install -y {0}'.format(FAKE_1_CUSTOM_PACKAGE))
                result = self.contenthost.fetch_errata_counts(
                    client.hostname, details_page=True)
                self.assertEqual(result['security']['value'], 1)
                self.assertEqual(result['security']['color'], 'red')
                client.run('yum install -y {0}'.format(REAL_0_RH_PACKAGE))
                result = self.contenthost.fetch_errata_counts(
                    client.hostname, details_page=True)
                for errata in ('bug_fix', 'enhancement'):
                    self.assertEqual(result[errata]['value'], 1)
                    self.assertEqual(result[errata]['color'], 'yellow')
Пример #57
0
def test_positive_service_level_subscription_with_custom_product(session):
    """Subscribe a host to activation key with Premium service level and with
    custom product

    :id: 195a8049-860e-494d-b7f0-0794384194f7

    :customerscenario: true

    :steps:
        1. Create a product with custom repository synchronized
        2. Create and Publish a content view with the created repository
        3. Create an activation key and assign the created content view
        4. Add a RedHat subscription to activation key (The product
           subscription should be added automatically)
        5. Set the activation service_level to Premium
        6. Register a host to activation key
        7. List consumed subscriptions on host
        8. List the subscription in Content Host UI

    :expectedresults:
        1. The product subscription is listed in consumed subscriptions on host
        2. The product subscription is listed in the contenthost subscriptions
           UI

    :BZ: 1394357

    :CaseLevel: System
    """
    org = entities.Organization().create()
    manifests.upload_manifest_locked(org.id)
    entities_ids = setup_org_for_a_custom_repo({
        'url': FAKE_1_YUM_REPO,
        'organization-id': org.id,
    })
    product = entities.Product(id=entities_ids['product-id']).read()
    activation_key = entities.ActivationKey(
        id=entities_ids['activationkey-id']).read()
    # add the default RH subscription
    subscription = entities.Subscription(organization=org).search(query={
        'search': 'name="{}"'.format(DEFAULT_SUBSCRIPTION_NAME)})[0]
    activation_key.add_subscriptions(data={
        'quantity': 1,
        'subscription_id': subscription.id,
    })
    # ensure all the needed subscriptions are attached to activation key
    results = activation_key.subscriptions()['results']
    assert (
            {product.name, DEFAULT_SUBSCRIPTION_NAME} ==
            {ak_subscription['name'] for ak_subscription in results}
    )
    # Set the activation service_level to Premium
    activation_key.service_level = 'Premium'
    activation_key = activation_key.update(['service_level'])
    with VirtualMachine() as vm:
        vm.install_katello_ca()
        vm.register_contenthost(
            org.label, activation_key=activation_key.name)
        assert vm.subscribed
        result = vm.run('subscription-manager list --consumed')
        assert result.return_code == 0
        assert 'Subscription Name:   {0}'.format(product.name) in '\n'.join(
            result.stdout)
        with session:
            session.organization.select(org.name)
            chost = session.contenthost.read(vm.hostname)
            subscriptions = {
                subs['Repository Name'] for subs
                in chost['subscriptions']['resources']['assigned']
            }
            assert product.name in subscriptions
Пример #58
0
    def test_positive_errata_status_installable_param(self):
        """Filter errata for specific content view and verify that host that
        was registered using that content view has different states in
        correspondence to filtered errata and `errata status installable`
        settings flag value

        :id: ed94cf34-b8b9-4411-8edc-5e210ea6af4f

        :Steps:

            1. Prepare setup: Create Lifecycle Environment, Content View,
                Activation Key and all necessary repos
            2. Register Content Host using created data
            3. Create necessary Content View Filter and Rule for repository
                errata
            4. Publish and Promote Content View to a new version and remove old
                ones.
            5. Go to created Host page and check its properties
            6. Change 'errata status installable' flag in the settings and
                check host properties once more

        :expectedresults: Check that 'errata status installable' flag works as
            intended

        :BZ: 1368254

        :CaseLevel: System
        """
        env = entities.LifecycleEnvironment(
            organization=self.session_org).create()
        content_view = entities.ContentView(
            organization=self.session_org).create()
        activation_key = entities.ActivationKey(
            environment=env,
            organization=self.session_org,
        ).create()
        setup_org_for_a_rh_repo({
            'product': PRDS['rhel'],
            'repository-set': REPOSET['rhst7'],
            'repository': REPOS['rhst7']['name'],
            'organization-id': self.session_org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        }, force_manifest_upload=True)
        custom_entitites = setup_org_for_a_custom_repo({
            'url': CUSTOM_REPO_URL,
            'organization-id': self.session_org.id,
            'content-view-id': content_view.id,
            'lifecycle-environment-id': env.id,
            'activationkey-id': activation_key.id,
        })
        with VirtualMachine(distro=DISTRO_RHEL7) as client:
            client.install_katello_ca()
            client.register_contenthost(
                self.session_org.label,
                activation_key.name,
            )
            self.assertTrue(client.subscribed)
            client.enable_repo(REPOS['rhst7']['id'])
            client.install_katello_agent()
            client.run('yum install -y {0}'.format(FAKE_1_CUSTOM_PACKAGE))
            # Adding content view filter and content view filter rule to
            # exclude errata that we are going to track
            cvf = make_content_view_filter({
                u'content-view-id': content_view.id,
                u'inclusion': 'false',
                u'organization-id': self.session_org.id,
                u'repository-ids': custom_entitites['repository-id'],
                u'type': 'erratum',
            })
            make_content_view_filter_rule({
                u'content-view-id': content_view.id,
                u'content-view-filter-id': cvf['filter-id'],
                u'errata-id': CUSTOM_REPO_ERRATA_ID,
            })
            ContentView.publish({u'id': content_view.id})
            cvv = ContentView.info({u'id': content_view.id})['versions'][-1]
            ContentView.version_promote({
                u'id': cvv['id'],
                u'organization-id': self.session_org.id,
                u'to-lifecycle-environment-id': env.id,
            })
            # Remove old cv versions to have unambiguous one for testing
            cvvs = ContentView.info({u'id': content_view.id})['versions']
            self.assertGreater(len(cvvs), 1)
            for i in range(len(cvvs)-1):
                ContentView.version_delete({u'id': cvvs[i]['id']})
            with Session(self) as session:
                edit_param(
                    session,
                    tab_locator=tab_locators['settings.tab_content'],
                    param_name='errata_status_installable',
                    param_value='Yes',
                )
                expected_dict = {
                    'Status': 'OK',
                    'Errata': 'All errata applied',
                    'Subscription': 'Fully entitled',
                }
                actual_dict = self.hosts.get_host_properties(
                    client.hostname, expected_dict.keys())
                self.assertEqual(expected_dict, actual_dict)
                edit_param(
                    session,
                    tab_locator=tab_locators['settings.tab_content'],
                    param_name='errata_status_installable',
                    param_value='No',
                )
                expected_dict = {
                    'Status': 'Error',
                    'Errata': 'Security errata applicable',
                    'Subscription': 'Fully entitled',
                }
                actual_dict = self.hosts.get_host_properties(
                    client.hostname, expected_dict.keys())
                self.assertEqual(expected_dict, actual_dict)