def test_tenant_quota_max_num_vms_check(provisioner, prov_data, template_name, provider, request, vm_name, set_tenant_vm, bug): """Test Tenant Quota-Max number of vms by UI. Prerequisities: * A provider set up, supporting provisioning in CFME Steps: * Set the tenant quota for storage by UI enforcement * Open the provisioning dialog. * Apart from the usual provisioning settings, set num of vms greater then tenant quota vm. * Submit the provisioning request. * Approve the request and wait for it to finish. * Visit the requests page. The last message should state quota validation message. Metadata: test_flag: provision """ note = ('template {} to vm {} on provider {}'.format( template_name, vm_name, provider.key)) prov_data["num_vms"] = "4" prov_data["vm_name"] = vm_name prov_data["notes"] = note provisioner(template_name, prov_data) # nav to requests page to check quota validation request_description = 'Provision from [{}] to [{}###]'.format( template_name, vm_name) provision_request = Request(request_description) provision_request.approve_request(method='ui', reason="Approved") provision_request.wait_for_request(method='ui') assert provision_request.row.reason.text == "Quota Exceeded"
def test_provision_approval( setup_provider, provider, vm_name, smtp_test, request, edit, provisioning): """ Tests provisioning approval. Tests couple of things. * Approve manually * Approve by editing the request to conform Prerequisities: * A provider that can provision. * Automate role enabled * User with e-mail set so you can receive and view them Steps: * Create a provisioning request that does not get automatically approved (eg. ``num_vms`` bigger than 1) * Wait for an e-mail to come, informing you that the auto-approval was unsuccessful. * Depending on whether you want to do manual approval or edit approval, do: * MANUAL: manually approve the request in UI * EDIT: Edit the request in UI so it conforms the rules for auto-approval. * Wait for an e-mail with approval * Wait until the request finishes * Wait until an email, informing about finished provisioning, comes. Metadata: test_flag: provision suite: infra_provisioning """ # generate_tests makes sure these have values template, host, datastore = map(provisioning.get, ('template', 'host', 'datastore')) # It will provision two of them vm_names = [vm_name + "001", vm_name + "002"] request.addfinalizer( lambda: [cleanup_vm(vmname, provider) for vmname in vm_names]) provisioning_data = { 'catalog': { 'vm_name': vm_name, 'num_vms': '2'}, 'environment': {'host_name': {'name': provisioning['host']}, 'datastore_name': {'name': provisioning['datastore']}}, 'network': {'vlan': provisioning['vlan']}} do_vm_provisioning(template, provider, vm_name, provisioning_data, request, smtp_test, wait=False) wait_for( lambda: len(filter( lambda mail: "your request for a new vms was not autoapproved" in normalize_text(mail["subject"]), smtp_test.get_emails())) > 0, num_sec=90, delay=5) wait_for( lambda: len(filter( lambda mail: "virtual machine request was not approved" in normalize_text(mail["subject"]), smtp_test.get_emails())) > 0, num_sec=90, delay=5) cells = {'Description': 'Provision from [{}] to [{}###]'.format(template, vm_name)} provision_request = Request(cells=cells) navigate_to(provision_request, 'Details') if edit: # Automatic approval after editing the request to conform new_vm_name = vm_name + "-xx" modifications = {'catalog': {'num_vms': "1", 'vm_name': new_vm_name}} provision_request.edit_request(values=modifications) vm_names = [new_vm_name] # Will be just one now request.addfinalizer( lambda: cleanup_vm(new_vm_name, provider)) else: # Manual approval provision_request.approve_request(method='ui', reason="Approved") vm_names = [vm_name + "001", vm_name + "002"] # There will be two VMs request.addfinalizer( lambda: [cleanup_vm(vmname, provider) for vmname in vm_names]) wait_for( lambda: len(filter( lambda mail: "your virtual machine configuration was approved" in normalize_text(mail["subject"]), smtp_test.get_emails())) > 0, num_sec=120, delay=5) # Wait for the VM to appear on the provider backend before proceeding to ensure proper cleanup logger.info('Waiting for vms %s to appear on provider %s', ", ".join(vm_names), provider.key) wait_for( lambda: all(map(provider.mgmt.does_vm_exist, vm_names)), handle_exception=True, num_sec=600) provision_request.wait_for_request(method='ui') assert provision_request.is_succeeded(method='ui') # Wait for e-mails to appear def verify(): return ( len(filter( lambda mail: "your virtual machine request has completed vm {}".format(normalize_text(vm_name)) in normalize_text(mail["subject"]), smtp_test.get_emails())) == len(vm_names) ) wait_for(verify, message="email receive check", delay=5)