From 627b056e587dedd041f2fb78314be45ab011eafb Mon Sep 17 00:00:00 2001 From: Parthvi Vala Date: Mon, 7 Sep 2020 14:05:06 +0530 Subject: [PATCH] Automate: test_service_provision_retire_from_global_region_generic --- cfme/services/myservice/rest.py | 11 ++++ .../test_service_catalogs_multi_region.py | 66 +++++++++++++------ 2 files changed, 58 insertions(+), 19 deletions(-) diff --git a/cfme/services/myservice/rest.py b/cfme/services/myservice/rest.py index 16fee2a099..adf404ab4c 100644 --- a/cfme/services/myservice/rest.py +++ b/cfme/services/myservice/rest.py @@ -11,3 +11,14 @@ def add_resource_generic_object(self, gen_obj): name=gen_obj.name )._ref_repr() ) + + +@MiqImplementationContext.external_for(MyService.retire, ViaREST) +def retire(self, wait=True): + retire_request = self.rest_api_entity.action.request_retire() + service_request = self.appliance.collections.requests.instantiate( + description=retire_request.description + ) + if wait: + service_request.wait_for_request() + return service_request diff --git a/cfme/tests/services/test_service_catalogs_multi_region.py b/cfme/tests/services/test_service_catalogs_multi_region.py index 7feb65f713..32fba61c78 100644 --- a/cfme/tests/services/test_service_catalogs_multi_region.py +++ b/cfme/tests/services/test_service_catalogs_multi_region.py @@ -35,6 +35,9 @@ scope='module') ] +# TODO: Define a single fixture to create catalog_item, since there is only a minor difference +# between all the fixtures that create catalog_item. + @pytest.fixture def remote_appliance(replicated_appliances): @@ -105,6 +108,24 @@ def remote_catalog_item(remote_appliance, provider, setup_remote_provider, remot catalog_item.delete_if_exists() +@pytest.fixture +def remote_generic_catalog_item(remote_appliance, remote_catalog, remote_dialog): + with remote_appliance: + catalog_item = remote_appliance.collections.catalog_items.create( + remote_appliance.collections.catalog_items.GENERIC, + name=fauxfactory.gen_alphanumeric(15, start="cat_item_"), + description="my catalog", + display_in=True, + catalog=remote_catalog, + dialog=remote_dialog, + ) + + yield catalog_item + + with remote_appliance: + catalog_item.delete_if_exists() + + @pytest.fixture def remote_ansible_api_version_change(remote_appliance, provider, ansible_api_version): """Update Ansible Tower provider URL to /api/{ansible_api_version} so that all supported API @@ -246,8 +267,7 @@ def provisioning_data(provisioning, provider): } -def _order_retire_service( - request, context, appliance, catalog_item): +def order_retire_service(request, context, appliance, catalog_item): """Common method to order and then retire a service.""" with appliance: # Order the service @@ -256,8 +276,11 @@ def _order_retire_service( ).order() provision_request.wait_for_request(method='ui') assert provision_request.is_succeeded(method='ui') - - service = MyService(appliance, catalog_item.name) + if isinstance(catalog_item, appliance.collections.catalog_items.GENERIC): + service_name = catalog_item.dialog.label + else: + service_name = catalog_item.name + service = MyService(appliance, service_name) @request.addfinalizer def _clear_request_service(): @@ -269,19 +292,9 @@ def _clear_request_service(): assert service.exists # Retire the service via UI or REST, depending on context - if context == ViaUI: + with appliance.context.use(context): retire_request = service.retire() assert retire_request and retire_request.exists() - else: - # TODO: implement retire() via REST using sentaku context - services = appliance.rest_api.collections.services - api_service = services.get(name=service.name) - api_retire_requests = services.action.request_retire(api_service) - assert len(api_retire_requests) == 1 - api_retire_request = api_retire_requests[0] - assert api_retire_request and api_retire_request.exists - retire_request = appliance.collections.requests.instantiate( - f'Service Retire for: {service.name}') @request.addfinalizer def _remove_retire_request(): @@ -306,7 +319,7 @@ def test_service_provision_retire_from_global_region( initialEstimate: 1/3h """ _, global_appliance = replicated_appliances - _order_retire_service(request, context, global_appliance, remote_catalog_item) + order_retire_service(request, context, global_appliance, remote_catalog_item) vm_name = f"{remote_catalog_item.prov_data['catalog']['vm_name']}0001" vm = global_appliance.provider_based_collection(provider).instantiate(vm_name, provider) @@ -331,7 +344,7 @@ def test_service_provision_retire_from_global_region_ansible_tower( initialEstimate: 1/3h """ _, global_appliance = replicated_appliances - _order_retire_service(request, context, global_appliance, remote_ansible_catalog_item) + order_retire_service(request, context, global_appliance, remote_ansible_catalog_item) @pytest.mark.tier(2) @@ -352,17 +365,32 @@ def test_service_provision_retire_from_global_region_embedded_ansible( caseimportance: high """ _, global_appliance = replicated_appliances - _order_retire_service( + order_retire_service( request, context, global_appliance, remote_embedded_ansible_catalog_item) +@pytest.mark.parametrize("context", [ViaREST, ViaUI]) +def test_service_provision_retire_from_global_region_generic( + request, context, replicated_appliances, remote_generic_catalog_item +): + """Order and retire a Generic service from the global appliance. + Polarion: + assignee: tpapaioa + caseimportance: high + casecomponent: Services + initialEstimate: 1/3h + """ + _, global_appliance = replicated_appliances + order_retire_service(request, context, global_appliance, remote_generic_catalog_item) + + @pytest.mark.manual @pytest.mark.tier(2) @test_requirements.multi_region @test_requirements.service @pytest.mark.parametrize('context', [ViaREST, ViaUI]) @pytest.mark.parametrize('catalog_location', ['remote']) # TODO add global -@pytest.mark.parametrize('item_type', ['ansible', 'generic', 'orchestration', 'bundle']) +@pytest.mark.parametrize('item_type', ['ansible', 'orchestration', 'bundle']) def test_service_provision_retire_from_global_region_manual(item_type, catalog_location, context): """ Polarion: