コード例 #1
0
ファイル: test_product.py プロジェクト: ares/robottelo
    def test_positive_delete_1(self):
        """@Test: Check if product can be deleted

        @Feature: Product

        @Assert: Product is deleted

        """
        new_product = make_product({
            u'organization-id': self.org['id']
        })

        # Delete it
        result = Product.delete({u'id': new_product['id']})
        self.assertEqual(result.return_code, 0)
        self.assertEqual(len(result.stderr), 0)

        # Fetch it
        result = Product.info({
            u'id': new_product['id'],
            u'organization-id': self.org['id'],
        })
        if bz_bug_is_open(1219490):
            for _ in range(5):
                if result.return_code == 0:
                    time.sleep(5)
                    result = Product.info({
                        u'id': new_product['id'],
                        u'organization-id': self.org['id'],
                    })
                else:
                    break
        self.assertNotEqual(result.return_code, 0)
        self.assertGreater(len(result.stderr), 0)
コード例 #2
0
ファイル: test_product.py プロジェクト: lpramuk/robottelo
    def test_remove_syncplan_1(self):
        """@Test: Check if product can be assigned a syncplan

        @Feature: Product

        @Assert: Product has syncplan

        """
        product = make_product({u'organization-id': self.org['id']})
        sync_plan = make_sync_plan({'organization-id': self.org['id']})
        Product.set_sync_plan({
            'id': product['id'],
            'sync-plan-id': sync_plan['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['sync-plan-id'], sync_plan['id'])
        Product.remove_sync_plan({'id': product['id']})
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(len(product['sync-plan-id']), 0)
コード例 #3
0
ファイル: test_product.py プロジェクト: Ichimonji10/robottelo
    def test_positive_remove_sync_plan_by_id(self):
        """Check if a sync plan can be removed from a product

        @id: 0df2005c-158a-48cb-8a16-9a63923699fc

        @Assert: Product has sync plan

        @CaseLevel: Integration
        """
        product = make_product({u'organization-id': self.org['id']})
        sync_plan = make_sync_plan({'organization-id': self.org['id']})
        Product.set_sync_plan({
            'id': product['id'],
            'sync-plan-id': sync_plan['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['sync-plan-id'], sync_plan['id'])
        Product.remove_sync_plan({'id': product['id']})
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(len(product['sync-plan-id']), 0)
コード例 #4
0
    def test_positive_update_key_for_product_with_repos(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has more than one
        repository then update the key

        :id: a95eb51b-4b6b-4c04-bb4d-cbe600431850

        :expectedresults: gpg key is associated with product before/after
            update as well as with the repositories

        :CaseLevel: Integration
        """
        # Create a product and a gpg key
        product = make_product({'organization-id': self.org['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Create repositories and assign them to the product
        repos = [
            make_repository({'product-id': product['id']})
            for _ in range(gen_integer(2, 5))
        ]
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id']
        })
        # Verify gpg key was associated
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id']
        })
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertEqual(repo['gpg-key'].get('name'), gpg_key['name'])
        # Update the gpg key
        new_name = gen_choice(list(valid_data_list().values()))
        GPGKey.update({
            'name': gpg_key['name'],
            'new-name': new_name,
            'organization-id': self.org['id']
        })
        # Verify changes are reflected in the gpg key
        gpg_key = GPGKey.info({
            'id': gpg_key['id'],
            'organization-id': self.org['id']
        })
        self.assertEqual(gpg_key['name'], new_name)
        # Verify changes are reflected in the product
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id']
        })
        self.assertEqual(product['gpg']['gpg-key'], new_name)
        # Verify changes are reflected in the repositories
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertEqual(repo['gpg-key'].get('name'), new_name)
コード例 #5
0
ファイル: test_gpgkey.py プロジェクト: SatelliteQE/robottelo
    def test_positive_update_key_for_product_with_repos(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has more than one
        repository then update the key

        @id: a95eb51b-4b6b-4c04-bb4d-cbe600431850

        @assert: gpg key is associated with product before/after update as well
        as with the repositories

        @CaseLevel: Integration
        """
        # Create a product and a gpg key
        product = make_product({'organization-id': self.org['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Create repositories and assign them to the product
        repos = [
            make_repository({'product-id': product['id']})
            for _ in range(gen_integer(2, 5))
        ]
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertEqual(repo['gpg-key'].get('name'), gpg_key['name'])
        # Update the gpg key
        new_name = gen_choice(valid_data_list())
        GPGKey.update({
            'name': gpg_key['name'],
            'new-name': new_name,
            'organization-id': self.org['id'],
        })
        # Verify changes are reflected in the gpg key
        gpg_key = GPGKey.info({
            'id': gpg_key['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(gpg_key['name'], new_name)
        # Verify changes are reflected in the product
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key'], new_name)
        # Verify changes are reflected in the repositories
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertEqual(repo['gpg-key'].get('name'), new_name)
コード例 #6
0
def test_positive_update_key_for_product_with_repos(module_org):
    """Create gpg key with valid name and valid gpg key via file
    import then associate it with custom product that has more than one
    repository then update the key

    :id: 8aa3dc75-6257-48ae-b3f9-c617e323b47a

    :expectedresults: gpg key is associated with product before/after
        update as well as with the repositories

    :CaseLevel: Integration
    """
    # Create a product and a gpg key
    product = make_product({'organization-id': module_org.id})
    gpg_key = make_content_credential({'organization-id': module_org.id})
    # Create repositories and assign them to the product
    repos = [
        make_repository({'product-id': product['id']})
        for _ in range(gen_integer(2, 5))
    ]
    # Associate gpg key with a product
    Product.update({
        'gpg-key-id': gpg_key['id'],
        'id': product['id'],
        'organization-id': module_org.id
    })
    # Verify gpg key was associated
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    assert product['gpg']['gpg-key'] == gpg_key['name']
    for repo in repos:
        repo = Repository.info({'id': repo['id']})
        assert repo['gpg-key'].get('name') == gpg_key['name']
    # Update the gpg key
    new_name = gen_choice(list(valid_data_list().values()))
    ContentCredential.update({
        'name': gpg_key['name'],
        'new-name': new_name,
        'organization-id': module_org.id
    })
    # Verify changes are reflected in the gpg key
    gpg_key = ContentCredential.info({
        'id': gpg_key['id'],
        'organization-id': module_org.id
    })
    assert gpg_key['name'] == new_name
    # Verify changes are reflected in the product
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    assert product['gpg']['gpg-key'] == new_name
    # Verify changes are reflected in the repositories
    for repo in repos:
        repo = Repository.info({'id': repo['id']})
        assert repo['gpg-key'].get('name') == new_name
コード例 #7
0
ファイル: test_gpgkey.py プロジェクト: SatelliteQE/robottelo
    def test_positive_delete_key_for_product_with_repos(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has more than one
        repository then delete it

        @id: f92d4643-1892-4f95-ae6b-fcea8e726946

        @assert: gpg key is associated with product and its repositories
        during creation but removed from the product and the repositories after
        deletion

        @CaseLevel: Integration
        """
        # Create product, repositories and gpg key
        product = make_product({'organization-id': self.org['id']})
        repos = [
            make_repository({'product-id': product['id']})
            for _ in range(gen_integer(2, 5))
        ]
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated with product and its repositories
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertEqual(repo['gpg-key'].get('name'), gpg_key['name'])
        # Delete the gpg key
        GPGKey.delete({
            'name': gpg_key['name'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was actually deleted
        with self.assertRaises(CLIReturnCodeError):
            GPGKey.info({
                'id': gpg_key['id'],
                'organization-id': self.org['id'],
            })
        # Verify gpg key was disassociated from the product and its
        # repositories
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertNotEqual(product['gpg']['gpg-key'], gpg_key['name'])
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertNotEqual(repo['gpg-key'].get('name'), gpg_key['name'])
コード例 #8
0
ファイル: test_gpgkey.py プロジェクト: vikask18/robottelo
    def test_positive_delete_key_for_product_with_repos(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has more than one
        repository then delete it

        :id: f92d4643-1892-4f95-ae6b-fcea8e726946

        :expectedresults: gpg key is associated with product and its
            repositories during creation but removed from the product and the
            repositories after deletion

        :CaseLevel: Integration
        """
        # Create product, repositories and gpg key
        product = make_product({'organization-id': self.org['id']})
        repos = [
            make_repository({'product-id': product['id']})
            for _ in range(gen_integer(2, 5))
        ]
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated with product and its repositories
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertEqual(repo['gpg-key'].get('name'), gpg_key['name'])
        # Delete the gpg key
        GPGKey.delete({
            'name': gpg_key['name'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was actually deleted
        with self.assertRaises(CLIReturnCodeError):
            GPGKey.info({
                'id': gpg_key['id'],
                'organization-id': self.org['id'],
            })
        # Verify gpg key was disassociated from the product and its
        # repositories
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertNotEqual(product['gpg']['gpg-key'], gpg_key['name'])
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertNotEqual(repo['gpg-key'].get('name'), gpg_key['name'])
コード例 #9
0
def test_positive_delete_key_for_product_with_repos(module_org):
    """Create gpg key with valid name and valid gpg key via file
    import then associate it with custom product that has more than one
    repository then delete it

    :id: 3848441f-746a-424c-afc3-4d5a15888af8

    :expectedresults: gpg key is associated with product and its
        repositories during creation but removed from the product and the
        repositories after deletion

    :CaseLevel: Integration
    """
    # Create product, repositories and gpg key
    product = make_product({'organization-id': module_org.id})
    repos = [
        make_repository({'product-id': product['id']})
        for _ in range(gen_integer(2, 5))
    ]
    gpg_key = make_content_credential({'organization-id': module_org.id})
    # Associate gpg key with a product
    Product.update({
        'gpg-key': gpg_key['name'],
        'id': product['id'],
        'organization-id': module_org.id
    })
    # Verify gpg key was associated with product and its repositories
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    assert product['gpg']['gpg-key'] == gpg_key['name']
    for repo in repos:
        repo = Repository.info({'id': repo['id']})
        assert repo['gpg-key'].get('name') == gpg_key['name']
    # Delete the gpg key
    ContentCredential.delete({
        'name': gpg_key['name'],
        'organization-id': module_org.id
    })
    # Verify gpg key was actually deleted
    with pytest.raises(CLIReturnCodeError):
        ContentCredential.info({
            'id': gpg_key['id'],
            'organization-id': module_org.id
        })
    # Verify gpg key was disassociated from the product and its
    # repositories
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    assert product['gpg']['gpg-key'] != gpg_key['name']
    for repo in repos:
        repo = Repository.info({'id': repo['id']})
        assert repo['gpg-key'].get('name') != gpg_key['name']
コード例 #10
0
    def test_remove_syncplan_1(self):
        """@Test: Check if product can be assigned a syncplan

        @Feature: Product

        @Assert: Product has syncplan

        @BZ: 1121136

        """
        try:
            new_product = make_product(
                {
                    u'organization-id': self.org['id']
                }
            )
            s = make_sync_plan({'organization-id': self.org['id']})
            s_result = Product.set_sync_plan(
                {
                    'sync-plan-id': s['id'],
                    'id': new_product['id']
                }
            )
        except CLIFactoryError as err:
            self.fail(err)

        self.assertEqual(
            s_result.stderr, [],
            "Running set_sync_plan should cause no errors.")
        i_result = Product.info({'id': new_product['id'],
                                 'organization-id': self.org['id']})
        self.assertEqual(
            i_result.stderr, [],
            "Running product info should cause no errors.")
        self.assertEqual(
            i_result.stdout['sync-plan-id'], s['id'],
            "Info should have consistent sync ids.")
        r_result = Product.remove_sync_plan(
            {
                'sync-plan-id': s['id'],
                'id': new_product['id']
            }
        )
        self.assertEqual(
            r_result.stderr, [],
            "Running product remove_sync_plan should cause no errors.")
        i_result = Product.info({'id': new_product['id'],
                                 'organization-id': self.org['id']})
        self.assertEqual(
            i_result.stderr, [],
            "Running product info should cause no errors.")
        self.assertEqual(
            len(i_result.stdout['sync-plan-id']), 0,
            "Info should have no sync ids.")
コード例 #11
0
def test_positive_update_key_for_product_with_repo(module_org):
    """Create gpg key with valid name and valid gpg key via file
    import then associate it with custom product that has one repository
    then update the key

    :id: 1f8f943c-a611-4ed2-9d8a-770f60a549a7

    :expectedresults: gpg key is associated with product before/after
        update as well as with the repository

    :CaseLevel: Integration
    """
    # Create a product and a gpg key
    product = make_product({'organization-id': module_org.id})
    gpg_key = make_content_credential({'organization-id': module_org.id})
    # Create a repository and assign it to the product
    repo = make_repository({'product-id': product['id']})
    # Associate gpg key with a product
    Product.update({
        'gpg-key': gpg_key['name'],
        'id': product['id'],
        'organization-id': module_org.id
    })
    # Verify gpg key was associated
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    repo = Repository.info({'id': repo['id']})
    assert product['gpg']['gpg-key'] == gpg_key['name']
    assert repo['gpg-key'].get('name') == gpg_key['name']
    # Update the gpg key
    new_name = gen_choice(list(valid_data_list().values()))
    ContentCredential.update({
        'name': gpg_key['name'],
        'new-name': new_name,
        'organization-id': module_org.id
    })
    # Verify changes are reflected in the gpg key
    gpg_key = ContentCredential.info({
        'id': gpg_key['id'],
        'organization-id': module_org.id
    })
    assert gpg_key['name'] == new_name
    # Verify changes are reflected in the product
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    assert product['gpg']['gpg-key'] == new_name
    # Verify changes are reflected in the repository
    repo = Repository.info({'id': repo['id']})
    assert repo['gpg-key'].get('id') == gpg_key['id']
コード例 #12
0
ファイル: test_gpgkey.py プロジェクト: vikask18/robottelo
    def test_positive_update_key_for_product_with_repo(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has one repository
        then update the key

        :id: 3fb550a7-507e-4988-beb6-35bdfc2e99a8

        :expectedresults: gpg key is associated with product before/after
            update as well as with the repository

        :CaseLevel: Integration
        """
        # Create a product and a gpg key
        product = make_product({'organization-id': self.org['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Create a repository and assign it to the product
        repo = make_repository({'product-id': product['id']})
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        self.assertEqual(repo['gpg-key'].get('name'), gpg_key['name'])
        # Update the gpg key
        new_name = gen_choice(valid_data_list())
        GPGKey.update({
            'name': gpg_key['name'],
            'new-name': new_name,
            'organization-id': self.org['id'],
        })
        # Verify changes are reflected in the gpg key
        gpg_key = GPGKey.info({
            'id': gpg_key['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(gpg_key['name'], new_name)
        # Verify changes are reflected in the product
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key'], new_name)
        # Verify changes are reflected in the repository
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(repo['gpg-key'].get('id'), gpg_key['id'])
コード例 #13
0
ファイル: test_product.py プロジェクト: cswiii/robottelo
    def test_remove_syncplan_1(self):
        """@Test: Check if product can be assigned a syncplan

        @Feature: Product

        @Assert: Product has syncplan

        """
        try:
            product = make_product({u'organization-id': self.org['id']})
            sync_plan = make_sync_plan({'organization-id': self.org['id']})
            result = Product.set_sync_plan({
                'sync-plan-id': sync_plan['id'],
                'id': product['id'],
            })
        except CLIFactoryError as err:
            self.fail(err)

        self.assertEqual(
            result.stderr, [],
            'Running set_sync_plan should cause no errors.'
        )
        result = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(
            result.stderr, [],
            'Running product info should cause no errors.'
        )
        self.assertEqual(
            result.stdout['sync-plan-id'], sync_plan['id'],
            'Info should have consistent sync ids.'
        )
        r_result = Product.remove_sync_plan({
            'id': product['id'],
        })
        self.assertEqual(
            r_result.stderr, [],
            'Running product remove_sync_plan should cause no errors.'
        )
        result = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(
            result.stderr, [],
            'Running product info should cause no errors.'
        )
        self.assertEqual(
            len(result.stdout['sync-plan-id']), 0,
            'Info should have no sync id.'
        )
コード例 #14
0
ファイル: test_gpgkey.py プロジェクト: SatelliteQE/robottelo
    def test_positive_update_key_for_product_with_repo(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has one repository
        then update the key

        @id: 3fb550a7-507e-4988-beb6-35bdfc2e99a8

        @assert: gpg key is associated with product before/after update as well
        as with the repository

        @CaseLevel: Integration
        """
        # Create a product and a gpg key
        product = make_product({'organization-id': self.org['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Create a repository and assign it to the product
        repo = make_repository({'product-id': product['id']})
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        self.assertEqual(repo['gpg-key'].get('name'), gpg_key['name'])
        # Update the gpg key
        new_name = gen_choice(valid_data_list())
        GPGKey.update({
            'name': gpg_key['name'],
            'new-name': new_name,
            'organization-id': self.org['id'],
        })
        # Verify changes are reflected in the gpg key
        gpg_key = GPGKey.info({
            'id': gpg_key['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(gpg_key['name'], new_name)
        # Verify changes are reflected in the product
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key'], new_name)
        # Verify changes are reflected in the repository
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(repo['gpg-key'].get('id'), gpg_key['id'])
コード例 #15
0
    def test_positive_update_1(self, test_data):
        """@Test: Update the description of a product

        @Feature: Product

        @Assert: Product description is updated

        @BZ: 1096320

        """

        new_product = make_product(
            {
                u'organization-id': self.org['id']
            }
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")

        # Update the Descriptions
        result = Product.update(
            {u'id': new_product['id'],
             u'description': test_data['description']}
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")
        self.assertEqual(
            result.stdout['description'],
            test_data['description'],
            "Description was not updated"
        )
        self.assertNotEqual(
            result.stdout['description'],
            new_product['description'],
            "Descriptions should not match"
        )
コード例 #16
0
    def test_positive_delete_1(self, test_name):
        """@Test: Check if product can be deleted

        @Feature: Product

        @Assert: Product is deleted

        @BZ: 1096320

        """

        new_product = make_product(
            {
                u'name': test_name['name'],
                u'organization-id': self.org['id']
            }
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")
        self.assertEqual(
            result.stdout['name'], new_product['name'], "Names don't match")
        self.assertGreater(
            len(result.stdout['label']), 0, "Label not automatically created"
        )

        # Delete it
        result = Product.delete({u'id': new_product['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not deleted")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertNotEqual(
            result.return_code,
            0,
            "Product should not be found")
        self.assertGreater(
            len(result.stderr), 0, "Error was expected")
コード例 #17
0
ファイル: test_product.py プロジェクト: cswiii/robottelo
    def test_positive_update_1(self, test_data):
        """@Test: Update the description of a product

        @Feature: Product

        @Assert: Product description is updated

        """

        new_product = make_product(
            {
                u'organization-id': self.org['id']
            }
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")

        # Update the Descriptions
        result = Product.update(
            {u'id': new_product['id'],
             u'description': test_data['description']}
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")
        self.assertEqual(
            result.stdout['description'],
            test_data['description'],
            "Description was not updated"
        )
        self.assertNotEqual(
            result.stdout['description'],
            new_product['description'],
            "Descriptions should not match"
        )
コード例 #18
0
def test_positive_delete_key_for_product_with_repo(module_org):
    """Create gpg key with valid name and valid gpg key via file
    import then associate it with custom product that has one repository
    then delete it

    :id: 1e98e588-8b5d-475c-ad84-5d566df5619c

    :expectedresults: gpg key is associated with product but and its
        repository during creation but removed from product and repository
        after deletion

    :CaseLevel: Integration
    """
    # Create product, repository and gpg key
    product = make_product({'organization-id': module_org.id})
    repo = make_repository({'product-id': product['id']})
    gpg_key = make_content_credential({'organization-id': module_org.id})
    # Associate gpg key with a product
    Product.update({
        'gpg-key': gpg_key['name'],
        'id': product['id'],
        'organization-id': module_org.id
    })
    # Verify gpg key was associated both with product and its repository
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    repo = Repository.info({'id': repo['id']})
    assert product['gpg']['gpg-key'] == gpg_key['name']
    assert repo['gpg-key'].get('name') == gpg_key['name']
    # Delete the gpg key
    ContentCredential.delete({
        'name': gpg_key['name'],
        'organization-id': module_org.id
    })
    # Verify gpg key was actually deleted
    with pytest.raises(CLIReturnCodeError):
        ContentCredential.info({
            'id': gpg_key['id'],
            'organization-id': module_org.id
        })
    # Verify gpg key was disassociated from the product and its repository
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    repo = Repository.info({'id': repo['id']})
    assert product['gpg']['gpg-key'] != gpg_key['name']
    assert repo['gpg-key'].get('name') != gpg_key['name']
コード例 #19
0
ファイル: test_gpgkey.py プロジェクト: elyezer/robottelo
    def test_positive_delete_key_for_product_with_repo(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has one repository
        then delete it

        :id: a5d4ea02-f015-4026-b4dc-7365eaf00049

        :expectedresults: gpg key is associated with product but and its
            repository during creation but removed from product and repository
            after deletion

        :CaseLevel: Integration
        """
        # Create product, repository and gpg key
        product = make_product({'organization-id': self.org['id']})
        repo = make_repository({'product-id': product['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated both with product and its repository
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        self.assertEqual(repo['gpg-key'].get('name'), gpg_key['name'])
        # Delete the gpg key
        GPGKey.delete({
            'name': gpg_key['name'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was actually deleted
        with self.assertRaises(CLIReturnCodeError):
            GPGKey.info({
                'id': gpg_key['id'],
                'organization-id': self.org['id'],
            })
        # Verify gpg key was disassociated from the product and its repository
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertNotEqual(product['gpg']['gpg-key'], gpg_key['name'])
        self.assertNotEqual(repo['gpg-key'].get('name'), gpg_key['name'])
コード例 #20
0
ファイル: test_gpgkey.py プロジェクト: vikask18/robottelo
    def test_positive_delete_key_for_product_with_repo(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has one repository
        then delete it

        :id: a5d4ea02-f015-4026-b4dc-7365eaf00049

        :expectedresults: gpg key is associated with product but and its
            repository during creation but removed from product and repository
            after deletion

        :CaseLevel: Integration
        """
        # Create product, repository and gpg key
        product = make_product({'organization-id': self.org['id']})
        repo = make_repository({'product-id': product['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated both with product and its repository
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        self.assertEqual(repo['gpg-key'].get('name'), gpg_key['name'])
        # Delete the gpg key
        GPGKey.delete({
            'name': gpg_key['name'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was actually deleted
        with self.assertRaises(CLIReturnCodeError):
            GPGKey.info({
                'id': gpg_key['id'],
                'organization-id': self.org['id'],
            })
        # Verify gpg key was disassociated from the product and its repository
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertNotEqual(product['gpg']['gpg-key'], gpg_key['name'])
        self.assertNotEqual(repo['gpg-key'].get('name'), gpg_key['name'])
コード例 #21
0
ファイル: test_product.py プロジェクト: cswiii/robottelo
    def test_positive_delete_1(self, test_name):
        """@Test: Check if product can be deleted

        @Feature: Product

        @Assert: Product is deleted

        """

        new_product = make_product(
            {
                u'name': test_name['name'],
                u'organization-id': self.org['id']
            }
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")
        self.assertEqual(
            result.stdout['name'], new_product['name'], "Names don't match")
        self.assertGreater(
            len(result.stdout['label']), 0, "Label not automatically created"
        )

        # Delete it
        result = Product.delete({u'id': new_product['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not deleted")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertNotEqual(
            result.return_code,
            0,
            "Product should not be found")
        self.assertGreater(
            len(result.stderr), 0, "Error was expected")
コード例 #22
0
ファイル: test_product.py プロジェクト: cpeters/robottelo
    def test_remove_syncplan_1(self):
        """@Test: Check if product can be assigned a syncplan

        @Feature: Product

        @Assert: Product has syncplan
        """
        product = make_product({u"organization-id": self.org["id"]})
        sync_plan = make_sync_plan({"organization-id": self.org["id"]})
        Product.set_sync_plan({"id": product["id"], "sync-plan-id": sync_plan["id"]})
        product = Product.info({"id": product["id"], "organization-id": self.org["id"]})
        self.assertEqual(product["sync-plan-id"], sync_plan["id"])
        Product.remove_sync_plan({"id": product["id"]})
        product = Product.info({"id": product["id"], "organization-id": self.org["id"]})
        self.assertEqual(len(product["sync-plan-id"]), 0)
コード例 #23
0
ファイル: test_product.py プロジェクト: cpeters/robottelo
    def test_positive_delete_1(self):
        """@Test: Check if product can be deleted

        @Feature: Product

        @Assert: Product is deleted
        """
        new_product = make_product({u"organization-id": self.org["id"]})
        Product.delete({u"id": new_product["id"]})
        with self.assertRaises(CLIReturnCodeError):
            Product.info({u"id": new_product["id"], u"organization-id": self.org["id"]})
            if bz_bug_is_open(1219490):
                for _ in range(5):
                    time.sleep(5)
                    Product.info({u"id": new_product["id"], u"organization-id": self.org["id"]})
コード例 #24
0
def test_positive_product_sync_state(module_org):
    """hammer product info shows correct sync state.

    :id: 58af6239-85d7-4b8b-bd2d-ab4cd4f29840

    :BZ: 1803207,1999541

    :customerscenario: true

    :Steps:
        1. Sync a custom repository that fails.
        2. Run `hammer product info --product-id <id>`.
        3. Successfully sync another repository under the same product.
        4. Run `hammer product info --product-id <id>` again.


    :expectedresults: hammer should show 'Sync Incomplete' in both cases.
    """
    product = make_product({'organization-id': module_org.id})
    repo_a1 = make_repository(
        {
            'organization-id': module_org.id,
            'product-id': product['id'],
            'name': gen_string('alpha'),
            'url': f'{gen_url(scheme="https")}:{gen_integer(min_value=10, max_value=9999)}',
        }
    )

    with pytest.raises(CLIReturnCodeError):
        Repository.synchronize({'id': repo_a1['id']})

    product_info = Product.info({'id': product['id'], 'organization-id': module_org.id})
    product_list = Product.list({'organization-id': module_org.id})
    assert product_info['sync-state-(last)'] in [p.get('sync-state') for p in product_list]

    repo_a2 = make_repository(
        {
            'organization-id': module_org.id,
            'product-id': product['id'],
            'name': gen_string('alpha'),
            'url': settings.repos.yum_0.url,
        },
    )

    Repository.synchronize({'id': repo_a2['id']})
    product_info = Product.info({'id': product['id'], 'organization-id': module_org.id})
    product_list = Product.list({'organization-id': module_org.id})
    assert product_info['sync-state-(last)'] in [p.get('sync-state') for p in product_list]
コード例 #25
0
ファイル: test_product.py プロジェクト: Ichimonji10/robottelo
    def test_positive_update_sync_plan(self):
        """Update product's sync plan

        @id: 78cbde49-b6c8-41ab-8991-fcb4b648e79b

        @Assert: Product sync plan is updated
        """
        first_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        second_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        product = make_product({
            u'organization-id': self.org['id'],
            u'sync-plan-id': first_sync_plan['id'],
        })
        # Update the Descriptions
        Product.update({
            u'id': product['id'],
            u'sync-plan-id': second_sync_plan['id'],
        })
        # Fetch it
        product = Product.info({
            u'id': product['id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(product['sync-plan-id'], second_sync_plan['id'])
        self.assertNotEqual(product['sync-plan-id'], first_sync_plan['id'])
コード例 #26
0
ファイル: test_product.py プロジェクト: Ichimonji10/robottelo
    def test_positive_update_gpg_key(self):
        """Update product's gpg keys

        @id: e7febd14-ac8b-424e-9ddf-bf0f63ebe430

        @Assert: Product gpg key is updated
        """
        first_gpg_key = make_gpg_key({u'organization-id': self.org['id']})
        second_gpg_key = make_gpg_key({u'organization-id': self.org['id']})
        product = make_product({
            u'gpg-key-id': first_gpg_key['id'],
            u'organization-id': self.org['id'],
        })
        # Update the Descriptions
        Product.update({
            u'gpg-key-id': second_gpg_key['id'],
            u'id': product['id'],
        })
        # Fetch it
        product = Product.info({
            u'id': product['id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key-id'], second_gpg_key['id'])
        self.assertNotEqual(product['gpg']['gpg-key-id'], first_gpg_key['id'])
コード例 #27
0
def test_positive_add_product_with_repo(module_org):
    """Create gpg key with valid name and valid gpg key via file
    import then associate it with custom product that has one repository

    :id: f315eadd-e65b-4952-912f-f640867ad656

    :expectedresults: gpg key is associated with product as well as with
        the repository

    :CaseLevel: Integration
    """
    product = make_product({'organization-id': module_org.id})
    repo = make_repository({'product-id': product['id']})
    gpg_key = make_content_credential({'organization-id': module_org.id})
    Product.update({
        'gpg-key': gpg_key['name'],
        'id': product['id'],
        'organization-id': module_org.id
    })
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    repo = Repository.info({'id': repo['id']})
    assert product['gpg']['gpg-key-id'] == gpg_key['id']
    assert repo['gpg-key']['id'] == gpg_key['id']
コード例 #28
0
ファイル: test_gpgkey.py プロジェクト: elyezer/robottelo
    def test_positive_add_product_with_repos(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has more than one
        repository

        :id: b05c5223-44d5-4a48-9d99-18ca351c84a5

        :expectedresults: gpg key is associated with product as well as with
            the repositories

        :CaseLevel: Integration
        """
        product = make_product({'organization-id': self.org['id']})
        repos = [
            make_repository({'product-id': product['id']})
            for _ in range(gen_integer(2, 5))
        ]
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key-id'], gpg_key['id'])
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertEqual(repo['gpg-key']['id'], gpg_key['id'])
コード例 #29
0
def test_positive_add_repo_from_product_with_repo(module_org):
    """Create gpg key with valid name and valid gpg key via file
    import then associate it to repository from custom product that has
    one repository

    :id: da568a0e-69b1-498e-a747-6881aac7409e

    :expectedresults: gpg key is associated with the repository but not
        with the product

    :CaseLevel: Integration
    """
    product = make_product({'organization-id': module_org.id})
    repo = make_repository({'product-id': product['id']})
    gpg_key = make_content_credential({'organization-id': module_org.id})
    Repository.update({
        'gpg-key-id': gpg_key['id'],
        'id': repo['id'],
        'organization-id': module_org.id
    })
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    repo = Repository.info({'id': repo['id']})
    assert repo['gpg-key']['id'] == gpg_key['id']
    assert product['gpg'].get('gpg-key-id') != gpg_key['id']
コード例 #30
0
    def test_positive_create_5(self, test_name):
        """
        @Test: Check if product can be created with sync plan
        @Feature: Product
        @Assert: Product is created and has random sync plan
        @BZ: 1096320
        """

        new_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        new_product = make_product({
            u'name': test_name['name'],
            u'organization-id': self.org['id'],
            u'sync-plan-id': new_sync_plan['id'],
        })

        # Fetch it
        result = Product.info({
            u'id': new_product['id'],
            u'organization-id': self.org['id']
        })
        self.assertEqual(result.return_code, 0, "Product was not found")
        self.assertEqual(len(result.stderr), 0, "No error was expected")
        self.assertEqual(result.stdout['name'], new_product['name'],
                         "Names don't match")
        self.assertEqual(result.stdout['sync-plan-id'], new_sync_plan['id'],
                         "Sync plans don't match")
コード例 #31
0
ファイル: test_gpgkey.py プロジェクト: SatelliteQE/robottelo
    def test_positive_add_product_with_repo(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has one repository

        @id: 5529a852-9ef6-48f8-b2bc-2bbf463657dd

        @assert: gpg key is associated with product as well as with
        the repository

        @CaseLevel: Integration
        """
        product = make_product({'organization-id': self.org['id']})
        repo = make_repository({'product-id': product['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(product['gpg']['gpg-key-id'], gpg_key['id'])
        self.assertEqual(repo['gpg-key']['id'], gpg_key['id'])
コード例 #32
0
ファイル: test_product.py プロジェクト: cswiii/robottelo
    def test_positive_create_4(self, test_name):
        """@Test: Check if product can be created with gpg key

        @Feature: Product

        @Assert: Product is created and has gpg key

        """

        new_gpg_key = make_gpg_key(
            {u'organization-id': self.org['id']}
        )
        new_product = make_product(
            {
                u'name': test_name['name'],
                u'organization-id': self.org['id'],
                u'gpg-key-id': new_gpg_key['id'],
            }
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")
        self.assertEqual(
            result.stdout['name'], new_product['name'], "Names don't match")
        self.assertEqual(
            result.stdout['gpg']['gpg-key-id'],
            new_gpg_key['id'],
            "GPG Keys don't match")
コード例 #33
0
ファイル: test_product.py プロジェクト: lpramuk/robottelo
    def test_positive_update_3(self):
        """@Test: Update product's sync plan

        @Feature: Product

        @Assert: Product sync plan is updated

        """
        first_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        second_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        product = make_product({
            u'organization-id': self.org['id'],
            u'sync-plan-id': first_sync_plan['id'],
        })
        # Update the Descriptions
        Product.update({
            u'id': product['id'],
            u'sync-plan-id': second_sync_plan['id'],
        })
        # Fetch it
        product = Product.info({
            u'id': product['id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(product['sync-plan-id'], second_sync_plan['id'])
        self.assertNotEqual(product['sync-plan-id'], first_sync_plan['id'])
コード例 #34
0
ファイル: test_product.py プロジェクト: lpramuk/robottelo
    def test_positive_update_2(self):
        """@Test: Update product's gpg keys

        @Feature: Product

        @Assert: Product gpg key is updated

        """
        first_gpg_key = make_gpg_key({u'organization-id': self.org['id']})
        second_gpg_key = make_gpg_key({u'organization-id': self.org['id']})
        product = make_product({
            u'gpg-key-id': first_gpg_key['id'],
            u'organization-id': self.org['id'],
        })
        # Update the Descriptions
        Product.update({
            u'gpg-key-id': second_gpg_key['id'],
            u'id': product['id'],
        })
        # Fetch it
        product = Product.info({
            u'id': product['id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key-id'], second_gpg_key['id'])
        self.assertNotEqual(product['gpg']['gpg-key-id'], first_gpg_key['id'])
コード例 #35
0
ファイル: test_product.py プロジェクト: cswiii/robottelo
    def test_positive_create_2(self, test_name):
        """@Test: Check if product can be created with random labels

        @Feature: Product

        @Assert: Product is created and has random label

        """

        new_product = make_product(
            {
                u'name': test_name['name'],
                u'label': test_name['label'],
                u'organization-id': self.org['id']
            }
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")
        self.assertEqual(
            result.stdout['name'], new_product['name'], "Names don't match")
        self.assertEqual(
            result.stdout['label'], new_product['label'], "Labels don't match"
        )
コード例 #36
0
ファイル: test_gpgkey.py プロジェクト: vikask18/robottelo
    def test_positive_add_product_with_repos(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has more than one
        repository

        :id: b05c5223-44d5-4a48-9d99-18ca351c84a5

        :expectedresults: gpg key is associated with product as well as with
            the repositories

        :CaseLevel: Integration
        """
        product = make_product({'organization-id': self.org['id']})
        repos = [
            make_repository({'product-id': product['id']})
            for _ in range(gen_integer(2, 5))
        ]
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key-id'], gpg_key['id'])
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertEqual(repo['gpg-key']['id'], gpg_key['id'])
コード例 #37
0
ファイル: test_syncplan.py プロジェクト: chbrown13/robottelo
    def test_positive_synchronize_rh_product_future_sync_date(self):
        """Create a sync plan with sync date in a future and sync one RH
        product with it automatically.

        :id: 6ce2f777-f230-4bb8-9822-2cf3580c21aa

        :expectedresults: Product is synchronized successfully.

        :CaseLevel: System
        """
        delay = 10 * 60  # delay for sync date in seconds
        org = make_org()
        with manifests.clone() as manifest:
            upload_file(manifest.content, manifest.filename)
        Subscription.upload({
            'file': manifest.filename,
            'organization-id': org['id'],
        })
        sync_plan = self._make_sync_plan({
            'enabled':
            'true',
            'organization-id':
            org['id'],
            'sync-date':
            (datetime.utcnow() +
             timedelta(seconds=delay)).strftime("%Y-%m-%d %H:%M:%S"),
        })
        RepositorySet.enable({
            'name': REPOSET['rhva6'],
            'organization-id': org['id'],
            'product': PRDS['rhel'],
            'releasever': '6Server',
            'basearch': 'x86_64',
        })
        product = Product.info({
            'name': PRDS['rhel'],
            'organization-id': org['id'],
        })
        repo = Repository.info({
            'name': REPOS['rhva6']['name'],
            'product': product['name'],
            'organization-id': org['id'],
        })
        # Verify product is not synced and doesn't have any content
        self.validate_repo_content(repo, ['errata', 'packages'],
                                   after_sync=False)
        # Associate sync plan with product
        Product.set_sync_plan({
            'id': product['id'],
            'sync-plan-id': sync_plan['id'],
        })
        # Wait half of expected time
        sleep(delay / 2)
        # Verify product has not been synced yet
        self.validate_repo_content(repo, ['errata', 'packages'],
                                   after_sync=False)
        # Wait the rest of expected time
        sleep(delay / 2)
        # Verify product was synced successfully
        self.validate_repo_content(repo, ['errata', 'packages'])
コード例 #38
0
ファイル: test_product.py プロジェクト: ares/robottelo
    def test_positive_update_1(self, test_data):
        """@Test: Update the description of a product

        @Feature: Product

        @Assert: Product description is updated

        """
        product = make_product({
            u'organization-id': self.org['id'],
        })

        # Update the Descriptions
        result = Product.update({
            u'id': product['id'],
            u'description': test_data['description'],
        })

        # Fetch it
        result = Product.info({
            u'id': product['id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(result.return_code, 0)
        self.assertEqual(len(result.stderr), 0)
        self.assertEqual(
            result.stdout['description'], test_data['description'])
        self.assertNotEqual(
            product['description'], result.stdout['description'])
コード例 #39
0
ファイル: test_gpgkey.py プロジェクト: SatelliteQE/robottelo
    def test_positive_add_repo_from_product_with_repo(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it to repository from custom product that has
        one repository

        @id: 1427f145-9faf-41ef-ae42-dc91d61ce1f6

        @assert: gpg key is associated with the repository but not with
        the product

        @CaseLevel: Integration
        """
        product = make_product({'organization-id': self.org['id']})
        repo = make_repository({'product-id': product['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        Repository.update({
            'gpg-key-id': gpg_key['id'],
            'id': repo['id'],
            'organization-id': self.org['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(repo['gpg-key']['id'], gpg_key['id'])
        self.assertNotEqual(product['gpg'].get('gpg-key-id'), gpg_key['id'])
コード例 #40
0
ファイル: test_product.py プロジェクト: oshtaier/robottelo
    def test_positive_create_5(self, test_name):
        """@Test: Check if product can be created with sync plan

        @Feature: Product

        @Assert: Product is created and has random sync plan

        """

        new_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        new_product = make_product(
            {
                u'name': test_name['name'],
                u'organization-id': self.org['id'],
                u'sync-plan-id': new_sync_plan['id'],
            }
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")
        self.assertEqual(
            result.stdout['name'], new_product['name'], "Names don't match")
        self.assertEqual(
            result.stdout['sync-plan-id'],
            new_sync_plan['id'],
            "Sync plans don't match")
コード例 #41
0
    def test_positive_update_sync_plan(self):
        """Update product's sync plan

        @Feature: Product

        @Assert: Product sync plan is updated
        """
        first_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        second_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        product = make_product({
            u'organization-id': self.org['id'],
            u'sync-plan-id': first_sync_plan['id'],
        })
        # Update the Descriptions
        Product.update({
            u'id': product['id'],
            u'sync-plan-id': second_sync_plan['id'],
        })
        # Fetch it
        product = Product.info({
            u'id': product['id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(product['sync-plan-id'], second_sync_plan['id'])
        self.assertNotEqual(product['sync-plan-id'], first_sync_plan['id'])
コード例 #42
0
ファイル: test_product.py プロジェクト: ares/robottelo
    def test_product_synchronize_by_label(self):
        """@Test: Check if product can be synchronized.
        Searches for organization by its label

        @Feature: Product

        @Assert: Product was synchronized

        """
        try:
            org = make_org()
            product = make_product({'organization-id': org['id']})
            make_repository({'product-id': product['id']})
        except CLIFactoryError as err:
            self.fail(err)

        result = Product.synchronize({
            'id': product['id'],
            'organization-label': org['label'],
        })
        self.assertEqual(result.return_code, 0)

        result = Product.info({
            'id': product['id'],
            'organization-id': org['id'],
        })
        self.assertEqual(result.return_code, 0)
        self.assertEqual(u'Syncing Complete.', result.stdout['sync-state'])
コード例 #43
0
ファイル: test_gpgkey.py プロジェクト: vikask18/robottelo
    def test_positive_add_product_with_repo(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has one repository

        :id: 5529a852-9ef6-48f8-b2bc-2bbf463657dd

        :expectedresults: gpg key is associated with product as well as with
            the repository

        :CaseLevel: Integration
        """
        product = make_product({'organization-id': self.org['id']})
        repo = make_repository({'product-id': product['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(product['gpg']['gpg-key-id'], gpg_key['id'])
        self.assertEqual(repo['gpg-key']['id'], gpg_key['id'])
コード例 #44
0
def test_positive_add_product_with_repos(module_org):
    """Create gpg key with valid name and valid gpg key via file
    import then associate it with custom product that has more than one
    repository

    :id: 76683f3e-7705-4719-996e-c026839053bb

    :expectedresults: gpg key is associated with product as well as with
        the repositories

    :CaseLevel: Integration
    """
    product = make_product({'organization-id': module_org.id})
    repos = [
        make_repository({'product-id': product['id']})
        for _ in range(gen_integer(2, 5))
    ]
    gpg_key = make_content_credential({'organization-id': module_org.id})
    Product.update({
        'gpg-key': gpg_key['name'],
        'id': product['id'],
        'organization-id': module_org.id
    })
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    assert product['gpg']['gpg-key-id'] == gpg_key['id']
    for repo in repos:
        repo = Repository.info({'id': repo['id']})
        assert repo['gpg-key']['id'] == gpg_key['id']
コード例 #45
0
ファイル: test_gpgkey.py プロジェクト: vikask18/robottelo
    def test_positive_add_repo_from_product_with_repo(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it to repository from custom product that has
        one repository

        :id: 1427f145-9faf-41ef-ae42-dc91d61ce1f6

        :expectedresults: gpg key is associated with the repository but not
            with the product

        :CaseLevel: Integration
        """
        product = make_product({'organization-id': self.org['id']})
        repo = make_repository({'product-id': product['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        Repository.update({
            'gpg-key-id': gpg_key['id'],
            'id': repo['id'],
            'organization-id': self.org['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(repo['gpg-key']['id'], gpg_key['id'])
        self.assertNotEqual(product['gpg'].get('gpg-key-id'), gpg_key['id'])
コード例 #46
0
ファイル: test_product.py プロジェクト: ares/robottelo
    def test_add_syncplan_1(self):
        """@Test: Check if product can be assigned a syncplan

        @Feature: Product

        @Assert: Product has syncplan

        """
        try:
            new_product = make_product({
                u'organization-id': self.org['id']
            })
            sync_plan = make_sync_plan({'organization-id': self.org['id']})
        except CLIFactoryError as err:
            self.fail(err)

        result = Product.set_sync_plan({
            'sync-plan-id': sync_plan['id'],
            'id': new_product['id'],
        })
        self.assertEqual(result.return_code, 0)
        self.assertEqual(len(result.stderr), 0)
        result = Product.info({
            'id': new_product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(result.return_code, 0)
        self.assertEqual(len(result.stderr), 0)
        self.assertEqual(result.stdout['sync-plan-id'], sync_plan['id'])
コード例 #47
0
    def test_positive_update_sync_plan(self):
        """Update product's sync plan

        :id: 78cbde49-b6c8-41ab-8991-fcb4b648e79b

        :expectedresults: Product sync plan is updated

        :CaseImportance: Critical
        """
        first_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        second_sync_plan = make_sync_plan({u'organization-id': self.org['id']})
        product = make_product({
            u'organization-id': self.org['id'],
            u'sync-plan-id': first_sync_plan['id'],
        })
        # Update the Descriptions
        Product.update({
            u'id': product['id'],
            u'sync-plan-id': second_sync_plan['id'],
        })
        # Fetch it
        product = Product.info({
            u'id': product['id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(product['sync-plan-id'], second_sync_plan['id'])
        self.assertNotEqual(product['sync-plan-id'], first_sync_plan['id'])
コード例 #48
0
    def test_positive_update_gpg_key(self):
        """Update product's gpg keys

        :id: e7febd14-ac8b-424e-9ddf-bf0f63ebe430

        :expectedresults: Product gpg key is updated

        :CaseImportance: Critical
        """
        first_gpg_key = make_gpg_key({u'organization-id': self.org['id']})
        second_gpg_key = make_gpg_key({u'organization-id': self.org['id']})
        product = make_product({
            u'gpg-key-id': first_gpg_key['id'],
            u'organization-id': self.org['id'],
        })
        # Update the Descriptions
        Product.update({
            u'gpg-key-id': second_gpg_key['id'],
            u'id': product['id'],
        })
        # Fetch it
        product = Product.info({
            u'id': product['id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key-id'], second_gpg_key['id'])
        self.assertNotEqual(product['gpg']['gpg-key-id'], first_gpg_key['id'])
コード例 #49
0
    def test_positive_update_gpg_key(self):
        """Update product's gpg keys

        @Feature: Product

        @Assert: Product gpg key is updated
        """
        first_gpg_key = make_gpg_key({u'organization-id': self.org['id']})
        second_gpg_key = make_gpg_key({u'organization-id': self.org['id']})
        product = make_product({
            u'gpg-key-id': first_gpg_key['id'],
            u'organization-id': self.org['id'],
        })
        # Update the Descriptions
        Product.update({
            u'gpg-key-id': second_gpg_key['id'],
            u'id': product['id'],
        })
        # Fetch it
        product = Product.info({
            u'id': product['id'],
            u'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key-id'], second_gpg_key['id'])
        self.assertNotEqual(product['gpg']['gpg-key-id'], first_gpg_key['id'])
コード例 #50
0
    def test_positive_create_4(self, test_name):
        """
        @Test: Check if product can be created with gpg key
        @Feature: Product
        @Assert: Product is created and has gpg key
        @BZ: 1096320
        """

        new_gpg_key = make_gpg_key(
            {u'organization-id': self.org['id']}
        )
        new_product = make_product(
            {
                u'name': test_name['name'],
                u'organization-id': self.org['id'],
                u'gpg-key-id': new_gpg_key['id'],
            }
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")
        self.assertEqual(
            result.stdout['name'], new_product['name'], "Names don't match")
        self.assertEqual(
            result.stdout['gpg']['gpg-key-id'],
            new_gpg_key['id'],
            "GPG Keys don't match")
コード例 #51
0
    def test_positive_create_2(self, test_name):
        """
        @Test: Check if product can be created with random labels
        @Feature: Product
        @Assert: Product is created and has random label
        @BZ: 1096320
        """

        new_product = make_product(
            {
                u'name': test_name['name'],
                u'label': test_name['label'],
                u'organization-id': self.org['id']
            }
        )

        # Fetch it
        result = Product.info(
            {u'id': new_product['id'], u'organization-id': self.org['id']})
        self.assertEqual(
            result.return_code,
            0,
            "Product was not found")
        self.assertEqual(
            len(result.stderr), 0, "No error was expected")
        self.assertEqual(
            result.stdout['name'], new_product['name'], "Names don't match")
        self.assertEqual(
            result.stdout['label'], new_product['label'], "Labels don't match"
        )
コード例 #52
0
ファイル: test_gpgkey.py プロジェクト: tkolhar/robottelo
    def test_positive_add_repo_from_product_with_repos(self):
        """@test: Create gpg key via file import and associate with custom repo

        GPGKey should contain valid name and valid key and should be associated
        to one repository from custom product. Make sure custom product should
        have more than one repository.

        @feature: GPG Keys

        @assert: gpg key is associated with the repository
        """
        product = make_product({'organization-id': self.org['id']})
        repos = [
            make_repository({'product-id': product['id']})
            for _ in range(gen_integer(2, 5))
        ]
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        Repository.update({
            'gpg-key': gpg_key['name'],
            'id': repos[0]['id'],
            'organization-id': self.org['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertNotEqual(product['gpg'].get('gpg-key-id'), gpg_key['id'])
        # First repo should have a valid gpg key assigned
        repo = Repository.info({'id': repos.pop(0)['id']})
        self.assertEqual(repo['gpg-key']['id'], gpg_key['id'])
        # The rest of repos should not
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertNotEqual(repo['gpg-key'].get('id'), gpg_key['id'])
コード例 #53
0
ファイル: test_gpgkey.py プロジェクト: tkolhar/robottelo
    def test_positive_delete_key_for_empty_product(self):
        """@test: Create gpg key with valid name and valid gpg key via file
        import then associate it with empty (no repos) custom product
        then delete it

        @feature: GPG Keys

        @assert: gpg key is associated with product during creation but removed
        from product after deletion
        """
        # Create a product and a gpg key
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        product = make_product({
            'gpg-key-id': gpg_key['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        # Delete the gpg key
        GPGKey.delete({
            'name': gpg_key['name'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was actually deleted
        with self.assertRaises(CLIReturnCodeError):
            GPGKey.info({
                'id': gpg_key['id'],
                'organization-id': self.org['id'],
            })
        # Verify gpg key was disassociated from the product
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertNotEqual(product['gpg']['gpg-key'], gpg_key['name'])
コード例 #54
0
ファイル: test_gpgkey.py プロジェクト: tkolhar/robottelo
    def test_positive_add_product_with_repos(self):
        """@test: Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has more than one
        repository

        @feature: GPG Keys

        @assert: gpg key is associated with product as well as with
        the repositories
        """
        product = make_product({'organization-id': self.org['id']})
        repos = [
            make_repository({'product-id': product['id']})
            for _ in range(gen_integer(2, 5))
        ]
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key-id'], gpg_key['id'])
        for repo in repos:
            repo = Repository.info({'id': repo['id']})
            self.assertEqual(repo['gpg-key']['id'], gpg_key['id'])
コード例 #55
0
ファイル: test_gpgkey.py プロジェクト: tkolhar/robottelo
    def test_positive_add_repo_from_product_with_repo(self):
        """@test: Create gpg key with valid name and valid gpg key via file
        import then associate it to repository from custom product that has
        one repository

        @feature: GPG Keys

        @assert: gpg key is associated with the repository but not with
        the product
        """
        product = make_product({'organization-id': self.org['id']})
        repo = make_repository({'product-id': product['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        Repository.update({
            'gpg-key-id': gpg_key['id'],
            'id': repo['id'],
            'organization-id': self.org['id'],
        })
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(repo['gpg-key']['id'], gpg_key['id'])
        self.assertNotEqual(product['gpg'].get('gpg-key-id'), gpg_key['id'])
コード例 #56
0
ファイル: test_gpgkey.py プロジェクト: cpeters/robottelo
    def test_key_associate_16(self):
        """@test: Create gpg key with valid name and valid gpg key via file
        import then associate it with custom product that has one repository
        then delete it

        @feature: GPG Keys

        @assert: gpg key is associated with product but and its repository
        during creation but removed from product and repository after deletion
        """
        # Create product, repository and gpg key
        product = make_product({'organization-id': self.org['id']})
        repo = make_repository({'product-id': product['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated both with product and its repository
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        self.assertEqual(repo['gpg-key'].get('name'), gpg_key['name'])
        # Delete the gpg key
        GPGKey.delete({
            'name': gpg_key['name'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was actually deleted
        with self.assertRaises(CLIReturnCodeError):
            GPGKey.info({
                'id': gpg_key['id'],
                'organization-id': self.org['id'],
            })
        # Verify gpg key was disassociated from the product and its repository
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        repo = Repository.info({'id': repo['id']})
        self.assertNotEqual(product['gpg']['gpg-key'], gpg_key['name'])
        self.assertNotEqual(repo['gpg-key'].get('name'), gpg_key['name'])
コード例 #57
0
    def test_positive_synchronize_rh_product_current_sync_date(self):
        """Create a sync plan with current datetime as a sync date, add a
        RH product and verify the product gets synchronized on the next sync
        occurrence

        @Assert: Product is synchronized successfully.

        @Feature: SyncPlan

        @BZ: 1279539
        """
        interval = 60 * 60  # 'hourly' sync interval in seconds
        org = make_org()
        with manifests.clone() as manifest:
            upload_file(manifest.content, manifest.filename)
        Subscription.upload({
            'file': manifest.filename,
            'organization-id': org['id'],
        })
        sync_plan = self._make_sync_plan({
            'enabled':
            'true',
            'interval':
            'hourly',
            'organization-id':
            org['id'],
            'sync-date':
            datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S"),
        })
        RepositorySet.enable({
            'name': REPOSET['rhva6'],
            'organization-id': org['id'],
            'product': PRDS['rhel'],
            'releasever': '6Server',
            'basearch': 'x86_64',
        })
        product = Product.info({
            'name': PRDS['rhel'],
            'organization-id': org['id'],
        })
        repo = Repository.info({
            'name': REPOS['rhva6']['name'],
            'product': product['name'],
            'organization-id': org['id'],
        })
        # Associate sync plan with product
        Product.set_sync_plan({
            'id': product['id'],
            'sync-plan-id': sync_plan['id'],
        })
        # Wait half of expected time
        sleep(interval / 2)
        # Verify product has not been synced yet
        self.validate_repo_content(repo, ['errata', 'packages'],
                                   after_sync=False)
        # Wait the rest of expected time
        sleep(interval / 2)
        # Verify product was synced successfully
        self.validate_repo_content(repo, ['errata', 'packages'])
コード例 #58
0
def test_positive_update_key_for_empty_product(module_org):
    """Create gpg key with valid name and valid gpg key via file
    import then associate it with empty (no repos) custom product then
    update the key

    :id: 13aa6e0c-4255-483a-af33-ea7e82ee7766

    :expectedresults: gpg key is associated with product before/after
        update

    :CaseLevel: Integration
    """
    # Create a product and a gpg key
    product = make_product({'organization-id': module_org.id})
    gpg_key = make_content_credential({'organization-id': module_org.id})
    # Associate gpg key with a product
    Product.update({
        'gpg-key': gpg_key['name'],
        'id': product['id'],
        'organization-id': module_org.id
    })
    # Verify gpg key was associated
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    assert product['gpg']['gpg-key'] == gpg_key['name']
    # Update the gpg key
    new_name = gen_choice(list(valid_data_list().values()))
    ContentCredential.update({
        'name': gpg_key['name'],
        'new-name': new_name,
        'organization-id': module_org.id
    })
    # Verify changes are reflected in the gpg key
    gpg_key = ContentCredential.info({
        'id': gpg_key['id'],
        'organization-id': module_org.id
    })
    assert gpg_key['name'] == new_name
    # Verify changes are reflected in the product
    product = Product.info({
        'id': product['id'],
        'organization-id': module_org.id
    })
    assert product['gpg']['gpg-key'] == new_name
コード例 #59
0
ファイル: test_gpgkey.py プロジェクト: vikask18/robottelo
    def test_positive_update_key_for_empty_product(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it with empty (no repos) custom product then
        update the key

        :id: c0c84c45-21fc-4940-9d52-00babb807ec7

        :expectedresults: gpg key is associated with product before/after
            update

        :CaseLevel: Integration
        """
        # Create a product and a gpg key
        product = make_product({'organization-id': self.org['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Associate gpg key with a product
        Product.update({
            'gpg-key': gpg_key['name'],
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key'], gpg_key['name'])
        # Update the gpg key
        new_name = gen_choice(valid_data_list())
        GPGKey.update({
            'name': gpg_key['name'],
            'new-name': new_name,
            'organization-id': self.org['id'],
        })
        # Verify changes are reflected in the gpg key
        gpg_key = GPGKey.info({
            'id': gpg_key['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(gpg_key['name'], new_name)
        # Verify changes are reflected in the product
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(product['gpg']['gpg-key'], new_name)
コード例 #60
0
ファイル: test_gpgkey.py プロジェクト: vikask18/robottelo
    def test_positive_update_key_for_repo_from_product_with_repos(self):
        """Create gpg key with valid name and valid gpg key via file
        import then associate it to repository from custom product that has
        more than one repository then update the key

        :id: 773a9141-9f04-40ba-b3df-4b6d80db25a6

        :expectedresults: gpg key is associated with a single repository
            before/after update and not associated with product or other
            repositories

        :CaseLevel: Integration
        """
        # Create a product and a gpg key
        product = make_product({'organization-id': self.org['id']})
        gpg_key = make_gpg_key({'organization-id': self.org['id']})
        # Create repositories and assign them to the product
        repos = [
            make_repository({'product-id': product['id']})
            for _ in range(gen_integer(2, 5))
        ]
        # Associate gpg key with a single repository
        Repository.update({
            'gpg-key': gpg_key['name'],
            'id': repos[0]['id'],
            'organization-id': self.org['id'],
        })
        # Verify gpg key was associated
        repos[0] = Repository.info({'id': repos[0]['id']})
        self.assertEqual(repos[0]['gpg-key']['name'], gpg_key['name'])
        # Update the gpg key
        new_name = gen_choice(valid_data_list())
        GPGKey.update({
            'name': gpg_key['name'],
            'new-name': new_name,
            'organization-id': self.org['id'],
        })
        # Verify changes are reflected in the gpg key
        gpg_key = GPGKey.info({
            'id': gpg_key['id'],
            'organization-id': self.org['id'],
        })
        self.assertEqual(gpg_key['name'], new_name)
        # Verify changes are reflected in the associated repository
        repos[0] = Repository.info({'id': repos[0]['id']})
        self.assertEqual(repos[0]['gpg-key'].get('name'), new_name)
        # Verify changes are not reflected in the product
        product = Product.info({
            'id': product['id'],
            'organization-id': self.org['id'],
        })
        self.assertNotEqual(product['gpg']['gpg-key'], new_name)
        # Verify changes are not reflected in the rest of repositories
        for repo in repos[1:]:
            repo = Repository.info({'id': repo['id']})
            self.assertNotEqual(repo['gpg-key'].get('name'), new_name)