def test_add_multiple_docker_repos_to_composite_content_view(self): """@Test: Add multiple Docker-type repositories to a composite content view. @Assert: One repository is created with a Docker image and the product is added to a random number of content views which are then added to a composite content view. @Feature: Docker """ cv_versions = [] product = make_product({'organization-id': self.org_id}) for _ in range(randint(2, 5)): content_view = make_content_view({ 'composite': False, 'organization-id': self.org_id, }) repo = _make_docker_repo(product['id']) result = ContentView.add_repository({ 'id': content_view['id'], 'repository-id': repo['id'], }) self.assertEqual(result.return_code, 0) result = ContentView.publish({'id': content_view['id']}) self.assertEqual(result.return_code, 0) content_view = ContentView.info({'id': content_view['id']}).stdout self.assertEqual(len(content_view['versions']), 1) cv_versions.append(content_view['versions'][0]) comp_content_view = make_content_view({ 'composite': True, 'organization-id': self.org_id, }) cv_versions_ids = ','.join( cv_version['id'] for cv_version in cv_versions) result = ContentView.update({ 'component-ids': cv_versions_ids, 'id': comp_content_view['id'], }) self.assertEqual(result.return_code, 0) comp_content_view = ContentView.info({ 'id': comp_content_view['id'], }).stdout for cv_version in cv_versions: self.assertIn( cv_version['id'], [ component['id'] for component in comp_content_view['components'] ], )
def test_positive_update_cv(self): """Update Content View in an Activation key @Feature: Activation key - Positive Update @Assert: Activation key is updated """ cv = make_content_view({u"organization-id": self.org["id"]}) ak_cv = self._make_activation_key({u"content-view-id": cv["id"]}) new_cv = make_content_view({u"organization-id": self.org["id"]}) ActivationKey.update( {u"content-view": new_cv["name"], u"name": ak_cv["name"], u"organization-id": self.org["id"]} ) updated_ak = ActivationKey.info({"id": ak_cv["id"]}) self.assertEqual(updated_ak["content-view"], new_cv["name"])
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'], })
def setUpClass(cls): """Tests for Content Host via Hammer CLI""" super(ContentHostTestCase, cls).setUpClass() ContentHostTestCase.NEW_ORG = make_org(cached=True) ContentHostTestCase.NEW_LIFECYCLE = make_lifecycle_environment( {u'organization-id': ContentHostTestCase.NEW_ORG['id']}, cached=True ) ContentHostTestCase.LIBRARY = LifecycleEnvironment.info({ u'organization-id': ContentHostTestCase.NEW_ORG['id'], u'name': u'Library', }) ContentHostTestCase.DEFAULT_CV = ContentView.info({ u'organization-id': ContentHostTestCase.NEW_ORG['id'], u'name': u'Default Organization View', }) ContentHostTestCase.NEW_CV = make_content_view({ u'organization-id': ContentHostTestCase.NEW_ORG['id'], }) cv_id = ContentHostTestCase.NEW_CV['id'] ContentView.publish({u'id': cv_id}) version_id = ContentView.version_list({ u'content-view-id': cv_id, })[0]['id'] ContentView.version_promote({ u'id': version_id, u'to-lifecycle-environment-id': ContentHostTestCase.NEW_LIFECYCLE[ 'id' ], u'organization-id': ContentHostTestCase.NEW_ORG['id'] }) ContentHostTestCase.PROMOTED_CV = ContentHostTestCase.NEW_CV
def test_positive_create_with_cv(self): """Create Activation key for all variations of Content Views :id: ec7b1af5-c3f4-40c3-b1df-c69c02a3b9a7 :expectedresults: Activation key is created and has proper content view assigned :CaseLevel: Integration """ for name in valid_data_list(): with self.subTest(name): new_cv = make_content_view({ u'name': name, u'organization-id': self.org['id'], }) new_ak_cv = self._make_activation_key({ u'content-view': new_cv['name'], u'environment': self.get_default_env()['name'], u'organization-id': self.org['id'], }) self.assertEqual(new_ak_cv['content-view'], name)
def setUpClass(cls): """Create necessary objects which can be re-used in tests.""" super(DockerActivationKeyTestCase, cls).setUpClass() cls.org = make_org() cls.lce = make_lifecycle_environment({ 'organization-id': cls.org['id'], }) cls.product = make_product({ 'organization-id': cls.org['id'], }) cls.repo = _make_docker_repo(cls.product['id']) cls.content_view = make_content_view({ 'composite': False, 'organization-id': cls.org['id'], }) ContentView.add_repository({ 'id': cls.content_view['id'], 'repository-id': cls.repo['id'], }) cls.content_view = ContentView.info({ 'id': cls.content_view['id'] }) ContentView.publish({'id': cls.content_view['id']}) cls.content_view = ContentView.info({ 'id': cls.content_view['id']}) cls.cvv = ContentView.version_info({ 'id': cls.content_view['versions'][0]['id'], }) ContentView.version_promote({ 'id': cls.content_view['versions'][0]['id'], 'lifecycle-environment-id': cls.lce['id'], }) cls.cvv = ContentView.version_info({ 'id': cls.content_view['versions'][0]['id'], })
def test_add_docker_repo_to_composite_content_view(self): """@Test: Add one Docker-type repository to a composite content view @Assert: A repository is created with a Docker repository and the product is added to a content view which is then added to a composite content view. @Feature: Docker """ self._create_and_associate_repo_with_cv() ContentView.publish({'id': self.content_view['id']}) self.content_view = ContentView.info({ 'id': self.content_view['id']}) self.assertEqual(len(self.content_view['versions']), 1) comp_content_view = make_content_view({ 'composite': True, 'organization-id': self.org_id, }) ContentView.update({ 'id': comp_content_view['id'], 'component-ids': self.content_view['versions'][0]['id'], }) comp_content_view = ContentView.info({ 'id': comp_content_view['id'], }) self.assertIn( self.content_view['versions'][0]['id'], [component['id'] for component in comp_content_view['components']], )
def _create_and_associate_repo_with_cv(self): """Create a Docker-based repository and content view and associate them. """ self.repo = _make_docker_repo( make_product({'organization-id': self.org_id})['id']) self.content_view = make_content_view({ 'composite': False, 'organization-id': self.org_id, }) ContentView.add_repository({ 'id': self.content_view['id'], 'repository-id': self.repo['id'], }) self.content_view = ContentView.info({ 'id': self.content_view['id'] }) self.assertIn( self.repo['id'], [ repo_['id'] for repo_ in self.content_view['docker-repositories'] ], )
def test_positive_update_aks_to_chost(self): """Check if multiple Activation keys can be attached to a Content host @Feature: Activation key - Content host @Assert: Multiple Activation keys are attached to a Content host """ env = make_lifecycle_environment({u'organization-id': self.org['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ContentView.publish({u'id': new_cv['id']}) cvv = ContentView.info({u'id': new_cv['id']})['versions'][0] ContentView.version_promote({ u'id': cvv['id'], u'to-lifecycle-environment-id': env['id'], }) new_aks = [ make_activation_key({ u'lifecycle-environment-id': env['id'], u'content-view': new_cv['name'], u'organization-id': self.org['id'], }) for _ in range(2) ] with VirtualMachine(distro='rhel65') as vm: vm.install_katello_ca() for i in range(2): result = vm.register_contenthost( new_aks[i]['name'], self.org['label']) self.assertEqual(result.return_code, 0)
def test_positive_create_9(self): """@test: Create Activation key with environment name @feature: Activation key - Positive Create @steps: 1. Create Activation key by entering its name, a content view and a environment name. @assert: Activation key is created @bz: 1109648 """ content_view = make_content_view({u"organization-id": self.org["id"]}) try: self._make_activation_key( { u"content-view": content_view["name"], u"environment": self.library["name"], u"organization-id": self.org["id"], } ) except CLIFactoryError as err: self.fail(err)
def test_positive_update_lce(self): """Update Environment in an Activation key @Feature: Activation key - Positive Update @Assert: Activation key is updated """ ak_env = self._make_activation_key({ u'lifecycle-environment-id': self.get_default_env()['id'], }) env = make_lifecycle_environment({u'organization-id': self.org['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ContentView.publish({u'id': new_cv['id']}) cvv = ContentView.info({u'id': new_cv['id']})['versions'][0] ContentView.version_promote({ u'id': cvv['id'], u'to-lifecycle-environment-id': env['id'], }) ActivationKey.update({ u'id': ak_env['id'], u'lifecycle-environment-id': env['id'], u'content-view': new_cv['name'], u'organization-id': self.org['id'], }) updated_ak = ActivationKey.info({'id': ak_env['id']}) self.assertEqual(updated_ak['lifecycle-environment'], env['name'])
def test_positive_update_lce(self): """@Test: Update Environment in an Activation key @Feature: Activation key - Positive Update @Assert: Activation key is updated """ ak_env = self._make_activation_key({ u'lifecycle-environment-id': self.get_default_env()['id'], }) env = make_lifecycle_environment({u'organization-id': self.org['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ContentView.publish({u'id': new_cv['id']}) cvv = ContentView.info({u'id': new_cv['id']})['versions'][0] ContentView.version_promote({ u'id': cvv['id'], u'to-lifecycle-environment-id': env['id'], }) ActivationKey.update({ u'id': ak_env['id'], u'lifecycle-environment-id': env['id'], u'content-view': new_cv['name'], u'organization-id': self.org['id'], }) updated_ak = ActivationKey.info({'id': ak_env['id']}) self.assertEqual(updated_ak['lifecycle-environment'], env['name'])
def test_positive_sync_publish_promote_cv(self): """Synchronize repository with DRPMs, add repository to content view, publish and promote content view to lifecycle environment @id: a01cb12b-d388-4902-8532-714f4e28ec56 @Assert: drpms can be listed in content view in proper lifecycle environment """ lce = make_lifecycle_environment({"organization-id": self.org["id"]}) repo = make_repository({"product-id": self.product["id"], "url": FAKE_YUM_DRPM_REPO}) Repository.synchronize({"id": repo["id"]}) cv = make_content_view({"organization-id": self.org["id"]}) ContentView.add_repository({"id": cv["id"], "repository-id": repo["id"]}) ContentView.publish({"id": cv["id"]}) content_view = ContentView.info({"id": cv["id"]}) cvv = content_view["versions"][0] ContentView.version_promote({"id": cvv["id"], "to-lifecycle-environment-id": lce["id"]}) result = ssh.command( "ls /var/lib/pulp/published/yum/https/repos/{}/{}/{}/custom/{}/{}" "/drpms/ | grep .drpm".format( self.org["label"], lce["label"], cv["label"], self.product["label"], repo["label"] ) ) self.assertEqual(result.return_code, 0) self.assertGreaterEqual(len(result.stdout), 1)
def setUpClass(cls): """Create Directory for all CV Sync Tests in /tmp""" super(ContentViewSync, cls).setUpClass() cls.exporting_org = make_org() cls.exporting_prod = gen_string('alpha') product = make_product({ 'organization-id': cls.exporting_org['id'], 'name': cls.exporting_prod }) cls.exporting_repo = gen_string('alpha') repo = make_repository({ 'name': cls.exporting_repo, 'download-policy': 'immediate', 'product-id': product['id'] }) Repository.synchronize({'id': repo['id']}) cls.exporting_cv = gen_string('alpha') content_view = make_content_view({ 'name': cls.exporting_cv, 'organization-id': cls.exporting_org['id'] }) ContentView.add_repository({ 'id': content_view['id'], 'organization-id': cls.exporting_org['id'], 'repository-id': repo['id'] }) ContentView.publish({u'id': content_view['id']}) content_view = ContentView.info({u'id': content_view['id']}) cls.exporting_cvv_id = content_view['versions'][0]['id']
def setUpClass(cls): """Tests for Content Host via Hammer CLI""" super(ContentHostTestCase, cls).setUpClass() ContentHostTestCase.NEW_ORG = make_org(cached=True) ContentHostTestCase.NEW_LIFECYCLE = make_lifecycle_environment( {u"organization-id": ContentHostTestCase.NEW_ORG["id"]}, cached=True ) ContentHostTestCase.LIBRARY = LifecycleEnvironment.info( {u"organization-id": ContentHostTestCase.NEW_ORG["id"], u"name": u"Library"} ) ContentHostTestCase.DEFAULT_CV = ContentView.info( {u"organization-id": ContentHostTestCase.NEW_ORG["id"], u"name": u"Default Organization View"} ) ContentHostTestCase.NEW_CV = make_content_view({u"organization-id": ContentHostTestCase.NEW_ORG["id"]}) cv_id = ContentHostTestCase.NEW_CV["id"] ContentView.publish({u"id": cv_id}) version_id = ContentView.version_list({u"content-view-id": cv_id})[0]["id"] ContentView.version_promote( { u"id": version_id, u"to-lifecycle-environment-id": ContentHostTestCase.NEW_LIFECYCLE["id"], u"organization-id": ContentHostTestCase.NEW_ORG["id"], } ) ContentHostTestCase.PROMOTED_CV = ContentHostTestCase.NEW_CV
def test_positive_sync_publish_cv(self): """Synchronize repository with DRPMs, add repository to content view and publish content view @id: 014bfc80-4622-422e-a0ec-755b1d9f845e @Assert: drpms can be listed in content view """ repo = make_repository({ 'product-id': self.product['id'], 'url': FAKE_YUM_DRPM_REPO, }) Repository.synchronize({'id': repo['id']}) cv = make_content_view({'organization-id': self.org['id']}) ContentView.add_repository({ 'id': cv['id'], 'repository-id': repo['id'], }) ContentView.publish({'id': cv['id']}) result = ssh.command( 'ls /var/lib/pulp/published/yum/https/repos/{}/content_views/{}' '/1.0/custom/{}/{}/drpms/ | grep .drpm'.format( self.org['label'], cv['label'], self.product['label'], repo['label'], )) self.assertEqual(result.return_code, 0) self.assertGreaterEqual(len(result.stdout), 1)
def test_positive_sync_publish_cv(self): """Synchronize repository with SRPMs, add repository to content view and publish content view @id: 78cd6345-9c6c-490a-a44d-2ad64b7e959b @Assert: srpms can be listed in content view """ repo = make_repository({ 'product-id': self.product['id'], 'url': FAKE_YUM_SRPM_REPO, }) Repository.synchronize({'id': repo['id']}) cv = make_content_view({'organization-id': self.org['id']}) ContentView.add_repository({ 'id': cv['id'], 'repository-id': repo['id'], }) ContentView.publish({'id': cv['id']}) result = ssh.command( 'ls /var/lib/pulp/published/yum/https/repos/{}/content_views/{}' '/1.0/custom/{}/{}/ | grep .src.rpm'.format( self.org['label'], cv['label'], self.product['label'], repo['label'], )) self.assertEqual(result.return_code, 0) self.assertGreaterEqual(len(result.stdout), 1)
def setUp(self): """Tests for Host Collections via Hammer CLI""" super(HostCollectionTestCase, self).setUp() if HostCollectionTestCase.org is None: HostCollectionTestCase.org = make_org(cached=True) if HostCollectionTestCase.new_lifecycle is None: HostCollectionTestCase.new_lifecycle = make_lifecycle_environment( {u"organization-id": HostCollectionTestCase.org["id"]}, cached=True ) if HostCollectionTestCase.library is None: HostCollectionTestCase.library = LifecycleEnvironment.info( {u"organization-id": HostCollectionTestCase.org["id"], u"name": ENVIRONMENT} ) if HostCollectionTestCase.default_cv is None: HostCollectionTestCase.default_cv = ContentView.info( {u"organization-id": HostCollectionTestCase.org["id"], u"name": DEFAULT_CV} ) if HostCollectionTestCase.new_cv is None: HostCollectionTestCase.new_cv = make_content_view({u"organization-id": HostCollectionTestCase.org["id"]}) HostCollectionTestCase.promoted_cv = None cv_id = HostCollectionTestCase.new_cv["id"] ContentView.publish({u"id": cv_id}) result = ContentView.version_list({u"content-view-id": cv_id}) version_id = result[0]["id"] ContentView.version_promote( { u"id": version_id, u"organization-id": HostCollectionTestCase.org["id"], u"to-lifecycle-environment-id": (HostCollectionTestCase.new_lifecycle["id"]), } ) HostCollectionTestCase.promoted_cv = HostCollectionTestCase.new_cv
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'], }) # 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'], })
def ostree_repo_with_user(ostree_user_credentials): """Create an user, organization, product and ostree repo, sync ostree repo for particular user, create content view and publish it for particular user """ org = make_org_with_credentials(credentials=ostree_user_credentials) product = make_product_with_credentials({'organization-id': org['id']}, ostree_user_credentials) # Create new custom ostree repo ostree_repo = make_repository_with_credentials( { 'product-id': product['id'], 'content-type': 'ostree', 'publish-via-http': 'false', 'url': OSTREE_REPO, }, ostree_user_credentials, ) Repository.with_user(*ostree_user_credentials).synchronize( {'id': ostree_repo['id']}) cv = make_content_view( { 'organization-id': org['id'], 'repository-ids': [ostree_repo['id']] }, ostree_user_credentials, ) ContentView.with_user(*ostree_user_credentials).publish({'id': cv['id']}) cv = ContentView.with_user(*ostree_user_credentials).info({'id': cv['id']}) return { 'cv': cv, 'org': org, 'ostree_repo': ostree_repo, 'product': product }
def test_positive_update_activation_key_5(self, test_data): """@Test: Update Content View in an Activation key @Feature: Activation key - Positive Update @Steps: 1. Create Activation key 2. Update Content View for all variations in [1] and include both RH and custom products @Assert: Activation key is updated """ try: activation_key = self._make_activation_key({u"organization-id": self.org["id"]}) con_view = make_content_view({u"organization-id": self.org["id"], u"name": test_data["content-view"]}) except CLIFactoryError as err: self.fail(err) result = ActivationKey.update( {u"name": activation_key["name"], u"content-view": con_view["name"], u"organization-id": self.org["id"]} ) self.assertEqual(result.return_code, 0, "Failed to update activation key") self.assertEqual(len(result.stderr), 0, "There should not be an error here") result = ActivationKey.info({u"id": activation_key["id"]}) self.assertEqual(result.return_code, 0, "Failed to get info for activation key") self.assertEqual(len(result.stderr), 0, "There should not be an error here") self.assertEqual( result.stdout["content-view"], test_data["content-view"], "Activation key content-view was not updated" )
def test_positive_update_aks_to_chost(self): """Check if multiple Activation keys can be attached to a Content host @Feature: Activation key - Content host @Assert: Multiple Activation keys are attached to a Content host """ env = make_lifecycle_environment({u"organization-id": self.org["id"]}) new_cv = make_content_view({u"organization-id": self.org["id"]}) ContentView.publish({u"id": new_cv["id"]}) cvv = ContentView.info({u"id": new_cv["id"]})["versions"][0] ContentView.version_promote({u"id": cvv["id"], u"to-lifecycle-environment-id": env["id"]}) new_aks = [ make_activation_key( { u"lifecycle-environment-id": env["id"], u"content-view": new_cv["name"], u"organization-id": self.org["id"], } ) for _ in range(2) ] with VirtualMachine(distro="rhel65") as vm: vm.install_katello_ca() for i in range(2): result = vm.register_contenthost(new_aks[i]["name"], self.org["label"]) self.assertEqual(result.return_code, 0)
def test_add_docker_repo_to_content_view(self): """@Test: Add one Docker-type repository to a non-composite content view @Assert: A repository is created with a Docker repository and the product is added to a non-composite content view @Feature: Docker """ repo = _make_docker_repo( make_product({'organization-id': self.org_id})['id']) content_view = make_content_view({ 'composite': False, 'organization-id': self.org_id, }) result = ContentView.add_repository({ 'id': content_view['id'], 'repository-id': repo['id'], }) self.assertEqual(result.return_code, 0) content_view = ContentView.info({'id': content_view['id']}).stdout self.assertIn( repo['id'], [repo_['id'] for repo_ in content_view['docker-repositories']], )
def test_add_multiple_docker_repos_to_content_view(self): """@Test: Add multiple Docker-type repositories to a non-composite content view. @Assert: Repositories are created with Docker images and the product is added to a non-composite content view. @Feature: Docker """ product = make_product({'organization-id': self.org_id}) repos = [ _make_docker_repo(product['id']) for _ in range(randint(2, 5)) ] content_view = make_content_view({ 'composite': False, 'organization-id': self.org_id, }) for repo in repos: result = ContentView.add_repository({ 'id': content_view['id'], 'repository-id': repo['id'], }) self.assertEqual(result.return_code, 0) content_view = ContentView.info({'id': content_view['id']}).stdout self.assertEqual( set([repo['id'] for repo in repos]), set([repo['id'] for repo in content_view['docker-repositories']]), )
def setup_content_view(self, org_id, lce_id=None): # type: (int, int) -> Tuple[Dict, Dict] """Setup organization content view by adding all the repositories, publishing and promoting to lce if needed. """ if lce_id is None: lce = make_lifecycle_environment({'organization-id': org_id}) else: lce = LifecycleEnvironment.info({ 'id': lce_id, 'organization-id': org_id }) content_view = make_content_view({'organization-id': org_id}) # Add repositories to content view for repo in self: repo.add_to_content_view(org_id, content_view['id']) # Publish the content view ContentView.publish({'id': content_view['id']}) if lce['name'] != ENVIRONMENT: # Get the latest content view version id content_view_version = ContentView.info({'id': content_view['id'] })['versions'][-1] # Promote content view version to lifecycle environment ContentView.version_promote({ 'id': content_view_version['id'], 'organization-id': org_id, 'to-lifecycle-environment-id': lce['id'], }) content_view = ContentView.info({'id': content_view['id']}) return content_view, lce
def test_positive_update_lce(self): """Update Environment in an Activation key :id: 55aaee60-b8c8-49f0-995a-6c526b9b653b :expectedresults: Activation key is updated :CaseLevel: Integration """ ak_env = self._make_activation_key({ u'lifecycle-environment-id': self.get_default_env()['id'], }) env = make_lifecycle_environment({u'organization-id': self.org['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ContentView.publish({u'id': new_cv['id']}) cvv = ContentView.info({u'id': new_cv['id']})['versions'][0] ContentView.version_promote({ u'id': cvv['id'], u'to-lifecycle-environment-id': env['id'], }) ActivationKey.update({ u'id': ak_env['id'], u'lifecycle-environment-id': env['id'], u'content-view': new_cv['name'], u'organization-id': self.org['id'], }) updated_ak = ActivationKey.info({'id': ak_env['id']}) self.assertEqual(updated_ak['lifecycle-environment'], env['name'])
def setUpClass(cls): """Create an organization, product and ostree repo.""" super(OstreeBranchTestCase, cls).setUpClass() password = '******' cls.user = make_user({'admin': 'true', 'password': password}) cls.user['password'] = password credentials = cls.get_user_credentials() cls.org = make_org_with_credentials(credentials=credentials) cls.product = make_product_with_credentials( {u'organization-id': cls.org['id']}, credentials) # Create new custom ostree repo cls.ostree_repo = make_repository_with_credentials( { u'product-id': cls.product['id'], u'content-type': u'ostree', u'publish-via-http': u'false', u'url': FEDORA27_OSTREE_REPO, }, credentials) Repository.with_user(*credentials).synchronize( {'id': cls.ostree_repo['id']}) cls.cv = make_content_view( { u'organization-id': cls.org['id'], u'repository-ids': [cls.ostree_repo['id']], }, credentials) ContentView.with_user(*credentials).publish({u'id': cls.cv['id']}) cls.cv = ContentView.with_user(*credentials).info( {u'id': cls.cv['id']})
def set_importing_org(self, product, repo, cv): """Sets same CV, product and repository in importing organization as exporting organization :param str product: The product name same as exporting product :param str repo: The repo name same as exporting repo :param str cv: The cv name same as exporting cv """ self.importing_org = make_org() importing_prod = make_product({ 'organization-id': self.importing_org['id'], 'name': product }) importing_repo = make_repository({ 'name': repo, 'download-policy': 'immediate', 'product-id': importing_prod['id'] }) self.importing_cv = make_content_view({ 'name': cv, 'organization-id': self.importing_org['id'] }) ContentView.add_repository({ 'id': self.importing_cv['id'], 'organization-id': self.importing_org['id'], 'repository-id': importing_repo['id'] })
def test_positive_update_aks_to_chost(self): """Check if multiple Activation keys can be attached to a Content host :id: 24fddd9c-03ae-41a7-8649-72296cbbafdf :expectedresults: Multiple Activation keys are attached to a Content host :CaseLevel: System """ env = make_lifecycle_environment({u'organization-id': self.org['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ContentView.publish({u'id': new_cv['id']}) cvv = ContentView.info({u'id': new_cv['id']})['versions'][0] ContentView.version_promote({ u'id': cvv['id'], u'to-lifecycle-environment-id': env['id'], }) new_aks = [ make_activation_key({ u'lifecycle-environment-id': env['id'], u'content-view': new_cv['name'], u'organization-id': self.org['id'], }) for _ in range(2) ] with VirtualMachine(distro=DISTRO_RHEL6) as vm: vm.install_katello_ca() for i in range(2): vm.register_contenthost( self.org['label'], new_aks[i]['name']) self.assertTrue(vm.subscribed)
def setup_content_view(self, org_id, lce_id=None): # type: (int, int) -> Tuple[Dict, Dict] """Setup organization content view by adding all the repositories, publishing and promoting to lce if needed. """ if lce_id is None: lce = make_lifecycle_environment({'organization-id': org_id}) else: lce = LifecycleEnvironment.info({ 'id': lce_id, 'organization-id': org_id, }) content_view = make_content_view({'organization-id': org_id}) # Add repositories to content view for repo in self: repo.add_to_content_view(org_id, content_view['id']) # Publish the content view ContentView.publish({'id': content_view['id']}) if lce['name'] != ENVIRONMENT: # Get the latest content view version id content_view_version = ContentView.info({ 'id': content_view['id'] })['versions'][-1] # Promote content view version to lifecycle environment ContentView.version_promote({ 'id': content_view_version['id'], 'organization-id': org_id, 'to-lifecycle-environment-id': lce['id'], }) content_view = ContentView.info({'id': content_view['id']}) return content_view, lce
def test_positive_update_aks_to_chost(self): """@Test: Check if multiple Activation keys can be attached to a Content host @Feature: Activation key - Content host @Assert: Multiple Activation keys are attached to a Content host """ env = make_lifecycle_environment({u'organization-id': self.org['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ContentView.publish({u'id': new_cv['id']}) cvv = ContentView.info({u'id': new_cv['id']})['versions'][0] ContentView.version_promote({ u'id': cvv['id'], u'to-lifecycle-environment-id': env['id'], }) new_aks = [ make_activation_key({ u'lifecycle-environment-id': env['id'], u'content-view': new_cv['name'], u'organization-id': self.org['id'], }) for _ in range(2) ] with VirtualMachine(distro='rhel65') as vm: vm.install_katello_ca() for i in range(2): result = vm.register_contenthost( new_aks[i]['name'], self.org['label']) self.assertEqual(result.return_code, 0)
def test_add_synced_docker_repo_to_content_view(self): """@Test: Create and sync a Docker-type repository @Assert: A repository is created with a Docker repository and it is synchronized. @Feature: Docker """ repo = _make_docker_repo( make_product({'organization-id': self.org_id})['id']) result = Repository.synchronize({'id': repo['id']}) self.assertEqual(result.return_code, 0) repo = Repository.info({'id': repo['id']}).stdout self.assertGreaterEqual( int(repo['content-counts']['docker-images']), 1) content_view = make_content_view({ 'composite': False, 'organization-id': self.org_id, }) result = ContentView.add_repository({ 'id': content_view['id'], 'repository-id': repo['id'], }) self.assertEqual(result.return_code, 0) content_view = ContentView.info({'id': content_view['id']}).stdout self.assertIn( repo['id'], [repo_['id'] for repo_ in content_view['docker-repositories']], )
def test_positive_update_ak5(self): """@Test: Update Content View in an Activation key @Feature: Activation key - Positive Update @Steps: 1. Create Activation key 2. Update Content View for all variations in [1] and include both RH and custom products @Assert: Activation key is updated """ activation_key = self._make_activation_key() for content_view_name in valid_data_list(): with self.subTest(content_view_name): con_view = make_content_view({ u'name': content_view_name, u'organization-id': self.org['id'], }) ActivationKey.update({ u'content-view': con_view['name'], u'name': activation_key['name'], u'organization-id': self.org['id'], }) activation_key = ActivationKey.info({ 'id': activation_key['id'], }) self.assertEqual( activation_key['content-view'], content_view_name)
def test_positive_create_ak_3(self): """@Test: Create Activation key for all variations of Content Views @Feature: Activation key - Positive Create @Steps: 1. Create Activation key for all valid Content views in [1] using valid Name, Description, Environment and Usage limit @Assert: Activation key is created """ for name in valid_data_list(): with self.subTest(name): # Using the same name for content view and Activation key con_view = make_content_view({ u'name': name, u'organization-id': self.org['id'], }) new_ackey = self._make_activation_key({ u'content-view': con_view['name'], u'environment': self.library['name'], u'name': name, u'organization-id': self.org['id'], }) # Name should match passed data self.assertEqual(new_ackey['name'], name) # ContentView should match passed data self.assertEqual(new_ackey['content-view'], name)
def test_add_docker_repo_to_composite_content_view(self): """@Test: Add one Docker-type repository to a composite content view @Assert: A repository is created with a Docker repository and the product is added to a content view which is then added to a composite content view. @Feature: Docker """ repo = _make_docker_repo( make_product({'organization-id': self.org_id})['id']) content_view = make_content_view({ 'composite': False, 'organization-id': self.org_id, }) result = ContentView.add_repository({ 'id': content_view['id'], 'repository-id': repo['id'], }) self.assertEqual(result.return_code, 0) content_view = ContentView.info({'id': content_view['id']}).stdout self.assertIn( repo['id'], [repo_['id'] for repo_ in content_view['docker-repositories']], ) result = ContentView.publish({'id': content_view['id']}) self.assertEqual(result.return_code, 0) content_view = ContentView.info({'id': content_view['id']}).stdout self.assertEqual(len(content_view['versions']), 1) comp_content_view = make_content_view({ 'composite': True, 'organization-id': self.org_id, }) result = ContentView.update({ 'id': comp_content_view['id'], 'component-ids': content_view['versions'][0]['id'], }) self.assertEqual(result.return_code, 0) comp_content_view = ContentView.info({ 'id': comp_content_view['id'], }).stdout self.assertIn( content_view['versions'][0]['id'], [component['id'] for component in comp_content_view['components']], )
def test_positive_update_cv(self): """Update Content View in an Activation key @Feature: Activation key - Positive Update @Assert: Activation key is updated """ cv = make_content_view({u'organization-id': self.org['id']}) ak_cv = self._make_activation_key({u'content-view-id': cv['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ActivationKey.update({ u'content-view': new_cv['name'], u'name': ak_cv['name'], u'organization-id': self.org['id'], }) updated_ak = ActivationKey.info({'id': ak_cv['id']}) self.assertEqual(updated_ak['content-view'], new_cv['name'])
def test_positive_update_cv(self): """@Test: Update Content View in an Activation key @Feature: Activation key - Positive Update @Assert: Activation key is updated """ cv = make_content_view({u'organization-id': self.org['id']}) ak_cv = self._make_activation_key({u'content-view-id': cv['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ActivationKey.update({ u'content-view': new_cv['name'], u'name': ak_cv['name'], u'organization-id': self.org['id'], }) updated_ak = ActivationKey.info({'id': ak_cv['id']}) self.assertEqual(updated_ak['content-view'], new_cv['name'])
def setUpClass(cls): """Init single organization, product and repository for all tests""" super(TestContentViewFilter, cls).setUpClass() cls.org = make_org() cls.product = make_product({u"organization-id": cls.org["id"]}) cls.repo = make_repository({u"product-id": cls.product["id"]}) Repository.synchronize({u"id": cls.repo["id"]}) cls.content_view = make_content_view({u"organization-id": cls.org["id"]}) ContentView.add_repository({u"id": cls.content_view["id"], u"repository-id": cls.repo["id"]})
def test_positive_update_cv(self): """Update Content View in an Activation key :id: aa94997d-fc9b-4532-aeeb-9f27b9834914 :expectedresults: Activation key is updated :CaseLevel: Integration """ cv = make_content_view({u'organization-id': self.org['id']}) ak_cv = self._make_activation_key({u'content-view-id': cv['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ActivationKey.update({ u'content-view': new_cv['name'], u'name': ak_cv['name'], u'organization-id': self.org['id'], }) updated_ak = ActivationKey.info({'id': ak_cv['id']}) self.assertEqual(updated_ak['content-view'], new_cv['name'])
def test_positive_delete_with_cv(self): """Create activation key with content view assigned to it and delete it using activation key id @Feature: Activation key - Positive Delete @Assert: Activation key is deleted """ new_cv = make_content_view({u'organization-id': self.org['id']}) new_ak = self._make_activation_key({u'content-view': new_cv['name']}) ActivationKey.delete({'id': new_ak['id']}) with self.assertRaises(CLIReturnCodeError): ActivationKey.info({'id': new_ak['id']})
def local_content_view(local_org): """Create content view, repository, and product""" new_product = make_product({'organization-id': local_org['id']}) new_repo = make_repository({'product-id': new_product['id']}) Repository.synchronize({'id': new_repo['id']}) content_view = make_content_view({'organization-id': local_org['id']}) ContentView.add_repository({ 'id': content_view['id'], 'organization-id': local_org['id'], 'repository-id': new_repo['id'], }) ContentView.publish({'id': content_view['id']}) return content_view
def setUpClass(cls): """Init single organization, product and repository for all tests""" super().setUpClass() cls.org = make_org() cls.product = make_product_wait({'organization-id': cls.org['id']}) cls.content_view = make_content_view( {'organization-id': cls.org['id']}) for _ in range(2): cls.repo = make_repository({'product-id': cls.product['id']}) Repository.synchronize({'id': cls.repo['id']}) ContentView.add_repository({ 'id': cls.content_view['id'], 'repository-id': cls.repo['id'] })
def setUpClass(cls): """Init single organization, product and repository for all tests""" super(ContentViewFilterTestCase, cls).setUpClass() cls.org = make_org() cls.product = make_product({u'organization-id': cls.org['id']}) cls.repo = make_repository({u'product-id': cls.product['id']}) Repository.synchronize({u'id': cls.repo['id']}) cls.content_view = make_content_view({ u'organization-id': cls.org['id'], }) ContentView.add_repository({ u'id': cls.content_view['id'], u'repository-id': cls.repo['id'], })
def test_positive_list_by_cv_id(self): """List Activation key for provided Content View ID @id: 4d9aad38-cd6e-41cb-99a0-9a593cf22655 @Assert: Activation key is listed """ cv = make_content_view({u'organization-id': self.org['id']}) self._make_activation_key({u'content-view-id': cv['id']}) result = ActivationKey.list({ 'content-view-id': cv['id'], 'organization-id': self.org['id'], }) self.assertEqual(len(result), 1) self.assertEqual(result[0]['content-view'], cv['name'])
def test_positive_delete_with_cv(self): """Create activation key with content view assigned to it and delete it using activation key id :id: bba323fa-0362-4a9b-97af-560d446cbb6c :expectedresults: Activation key is deleted :CaseLevel: Integration """ new_cv = make_content_view({u'organization-id': self.org['id']}) new_ak = self._make_activation_key({u'content-view': new_cv['name']}) ActivationKey.delete({'id': new_ak['id']}) with self.assertRaises(CLIReturnCodeError): ActivationKey.info({'id': new_ak['id']})
def setUpClass(cls): """Create an organization, product and ostree repo.""" super(OstreeBranchTestCase, cls).setUpClass() cls.org = make_org() cls.product = make_product({u'organization-id': cls.org['id']}) # Create new custom ostree repo cls.ostree_repo = make_repository({ u'product-id': cls.product['id'], u'content-type': u'ostree', u'publish-via-http': u'false', u'url': FEDORA23_OSTREE_REPO, }) Repository.synchronize({'id': cls.ostree_repo['id']}) cls.cv = make_content_view({u'organization-id': cls.org['id']}) ContentView.publish({u'id': cls.cv['id']}) cls.cv = ContentView.info({u'id': cls.cv['id']})
def setUp(self): # noqa """Tests for Host Collections via Hammer CLI""" super(TestHostCollection, self).setUp() if TestHostCollection.org is None: TestHostCollection.org = make_org(cached=True) if TestHostCollection.new_lifecycle is None: TestHostCollection.new_lifecycle = make_lifecycle_environment( {u'organization-id': TestHostCollection.org['id']}, cached=True) if TestHostCollection.library is None: library_result = LifecycleEnvironment.info({ u'organization-id': TestHostCollection.org['id'], u'name': u'Library' }) TestHostCollection.library = library_result.stdout if TestHostCollection.default_cv is None: cv_result = ContentView.info({ u'organization-id': TestHostCollection.org['id'], u'name': u'Default Organization View' }) TestHostCollection.default_cv = cv_result.stdout if TestHostCollection.new_cv is None: TestHostCollection.new_cv = make_content_view( {u'organization-id': TestHostCollection.org['id']}) TestHostCollection.promoted_cv = None cv_id = TestHostCollection.new_cv['id'] ContentView.publish({u'id': cv_id}) result = ContentView.version_list({u'content-view-id': cv_id}) version_id = result.stdout[0]['id'] promotion = ContentView.version_promote({ u'id': version_id, u'to-lifecycle-environment-id': (TestHostCollection.new_lifecycle['id']), u'organization-id': TestHostCollection.org['id'] }) if promotion.stderr == []: TestHostCollection.promoted_cv = TestHostCollection.new_cv
def setUp(self): # noqa """Tests for Content Host via Hammer CLI""" super(TestContentHost, self).setUp() if TestContentHost.NEW_ORG is None: TestContentHost.NEW_ORG = make_org(cached=True) if TestContentHost.NEW_LIFECYCLE is None: TestContentHost.NEW_LIFECYCLE = make_lifecycle_environment( {u'organization-id': TestContentHost.NEW_ORG['id']}, cached=True) if TestContentHost.LIBRARY is None: library_result = LifecycleEnvironment.info({ u'organization-id': TestContentHost.NEW_ORG['id'], u'name': u'Library' }) TestContentHost.LIBRARY = library_result.stdout if TestContentHost.DEFAULT_CV is None: cv_result = ContentView.info({ u'organization-id': TestContentHost.NEW_ORG['id'], u'name': u'Default Organization View' }) TestContentHost.DEFAULT_CV = cv_result.stdout if TestContentHost.NEW_CV is None: TestContentHost.NEW_CV = make_content_view( {u'organization-id': TestContentHost.NEW_ORG['id']}) TestContentHost.PROMOTED_CV = None cv_id = TestContentHost.NEW_CV['id'] ContentView.publish({u'id': cv_id}) result = ContentView.version_list({u'content-view-id': cv_id}) version_id = result.stdout[0]['id'] promotion = ContentView.version_promote({ u'id': version_id, u'to-lifecycle-environment-id': TestContentHost.NEW_LIFECYCLE['id'], u'organization-id': TestContentHost.NEW_ORG['id'] }) if promotion.stderr == []: TestContentHost.PROMOTED_CV = TestContentHost.NEW_CV
def test_positive_usage_limit(self): """Test that Usage limit actually limits usage :id: 00ded856-e939-4140-ac84-91b6a8643623 :Steps: 1. Create Activation key 2. Update Usage Limit to a finite number 3. Register Content hosts to match the Usage Limit 4. Attempt to register an other Content host after reaching the Usage Limit :expectedresults: Content host Registration fails. Appropriate error shown :CaseLevel: System """ env = make_lifecycle_environment({u'organization-id': self.org['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ContentView.publish({u'id': new_cv['id']}) cvv = ContentView.info({u'id': new_cv['id']})['versions'][0] ContentView.version_promote({ u'id': cvv['id'], u'to-lifecycle-environment-id': env['id'], }) new_ak = make_activation_key({ u'lifecycle-environment-id': env['id'], u'content-view': new_cv['name'], u'organization-id': self.org['id'], u'max-hosts': '1', }) with VirtualMachine(distro=DISTRO_RHEL6) as vm1: with VirtualMachine(distro=DISTRO_RHEL6) as vm2: vm1.install_katello_ca() result = vm1.register_contenthost( self.org['label'], new_ak['name']) self.assertTrue(vm1.subscribed) vm2.install_katello_ca() result = vm2.register_contenthost( self.org['label'], new_ak['name']) self.assertFalse(vm2.subscribed) self.assertEqual(result.return_code, 70) self.assertGreater(len(result.stderr), 0)
def test_positive_create_with_cv(self): """Create Activation key for all variations of Content Views @Feature: Activation key - Positive Create @Assert: Activation key is created and has proper content view assigned """ for name in valid_data_list(): with self.subTest(name): new_cv = make_content_view({ u'name': name, u'organization-id': self.org['id'], }) new_ak_cv = self._make_activation_key({ u'content-view': new_cv['name'], u'environment': self.get_default_env()['name'], u'organization-id': self.org['id'], }) self.assertEqual(new_ak_cv['content-view'], name)
def test_negative_create_with_unpublished_cv(self): """Check if content host can be created using unpublished cv @Feature: Content Hosts @Assert: Content host is not created using new unpublished cv """ con_view = make_content_view({ u'organization-id': ContentHostTestCase.NEW_ORG['id'], }) env = ContentHostTestCase.NEW_LIFECYCLE['id'] with self.assertRaises(CLIFactoryError): make_content_host({ u'content-view-id': con_view['id'], u'lifecycle-environment-id': env, u'name': gen_string('alpha', 15), u'organization-id': ContentHostTestCase.NEW_ORG['id'], })
def test_negative_create_2(self): """@Test: Check if content host can be created with new content view @Feature: Content Hosts @Assert: Content host is not created using new unpublished cv """ con_view = make_content_view( {u'organization-id': TestContentHost.NEW_ORG['id']}) with self.assertRaises(Exception): env = TestContentHost.NEW_LIFECYCLE['id'] make_content_host({ u'name': gen_string('alpha', 15), u'organization-id': TestContentHost.NEW_ORG['id'], u'content-view-id': con_view['id'], u'lifecycle-environment-id': env })
def setUp(self): """Tests for Host Collections via Hammer CLI""" super(HostCollectionTestCase, self).setUp() if HostCollectionTestCase.org is None: HostCollectionTestCase.org = make_org(cached=True) if HostCollectionTestCase.new_lifecycle is None: HostCollectionTestCase.new_lifecycle = make_lifecycle_environment( {u'organization-id': HostCollectionTestCase.org['id']}, cached=True) if HostCollectionTestCase.library is None: HostCollectionTestCase.library = LifecycleEnvironment.info({ u'organization-id': HostCollectionTestCase.org['id'], u'name': ENVIRONMENT, }) if HostCollectionTestCase.default_cv is None: HostCollectionTestCase.default_cv = ContentView.info({ u'organization-id': HostCollectionTestCase.org['id'], u'name': DEFAULT_CV }) if HostCollectionTestCase.new_cv is None: HostCollectionTestCase.new_cv = make_content_view( {u'organization-id': HostCollectionTestCase.org['id']}) HostCollectionTestCase.promoted_cv = None cv_id = HostCollectionTestCase.new_cv['id'] ContentView.publish({u'id': cv_id}) result = ContentView.version_list({u'content-view-id': cv_id}) version_id = result[0]['id'] ContentView.version_promote({ u'id': version_id, u'organization-id': HostCollectionTestCase.org['id'], u'to-lifecycle-environment-id': (HostCollectionTestCase.new_lifecycle['id']), }) HostCollectionTestCase.promoted_cv = HostCollectionTestCase.new_cv
def test_cv_preupgrade_scenario(self): """This is pre-upgrade scenario test to verify if we can create a content-view with various repositories. :id: a4ebbfa1-106a-4962-9c7c-082833879ae8 :steps: 1. Create custom yum, puppet and file repositories. 2. Create content-view. 3. Add yum, file repositories and puppet module to content view. 4. Publish content-view. :expectedresults: content-view created with various repositories. """ self.setupScenario() file_repo = self.make_file_repository_upload_contents() content_view = make_content_view( { 'name': self.cv_name, 'organization-id': self.org['id'], 'repository-ids': [self.yum_repo1['id'], file_repo['id']], } ) content_view = ContentView.info({'id': content_view['id']}) self.assertEqual( content_view['yum-repositories'][0]['name'], self.yum_repo1['name'], 'Repo was not associated to CV', ) ContentView.puppet_module_add( { 'content-view-id': content_view['id'], 'name': self.puppet_module['name'], 'author': self.puppet_module['author'], } ) content_view = ContentView.info({'id': content_view['id']}) self.assertGreater(len(content_view['puppet-modules']), 0) ContentView.publish({'id': content_view['id']}) cv = ContentView.info({'id': content_view['id']}) self.assertEqual(len(cv['versions']), 1)
def test_positive_usage_limit(self): """Test that Usage limit actually limits usage @Feature: Activation key - Usage limit @Steps: 1. Create Activation key 2. Update Usage Limit to a finite number 3. Register Content hosts to match the Usage Limit 4. Attempt to register an other Content host after reaching the Usage Limit @Assert: Content host Registration fails. Appropriate error shown """ env = make_lifecycle_environment({u'organization-id': self.org['id']}) new_cv = make_content_view({u'organization-id': self.org['id']}) ContentView.publish({u'id': new_cv['id']}) cvv = ContentView.info({u'id': new_cv['id']})['versions'][0] ContentView.version_promote({ u'id': cvv['id'], u'to-lifecycle-environment-id': env['id'], }) new_ak = make_activation_key({ u'lifecycle-environment-id': env['id'], u'content-view': new_cv['name'], u'organization-id': self.org['id'], u'max-content-hosts': '1', }) with VirtualMachine(distro='rhel65') as vm1: with VirtualMachine(distro='rhel65') as vm2: vm1.install_katello_ca() result = vm1.register_contenthost( new_ak['name'], self.org['label']) self.assertEqual(result.return_code, 0) vm2.install_katello_ca() result = vm2.register_contenthost( new_ak['name'], self.org['label']) self.assertEqual(result.return_code, 255) self.assertGreater(len(result.stderr), 0)