Skip to content
This repository has been archived by the owner on Apr 7, 2022. It is now read-only.

Commit

Permalink
Merge pull request #1476 from dajohnso/fix_scvmm_pwrctl
Browse files Browse the repository at this point in the history
Fix vm discovery and power_control tests
  • Loading branch information
dajohnso committed Jan 9, 2015
2 parents ee90ae6 + 6ef527e commit caa9405
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 87 deletions.
5 changes: 0 additions & 5 deletions cfme/infrastructure/virtual_machines.py
Original file line number Diff line number Diff line change
Expand Up @@ -1017,8 +1017,3 @@ def unassign_policy_profiles(vm_name, *policy_profile_names, **kwargs):
policy_profile_names: :py:class:`str` with Policy Profile names.
"""
return _assign_unassign_policy_profiles(vm_name, False, *policy_profile_names, **kwargs)


def load_archived_vms():
""" Load list of archived vms """
sel.force_navigate("vm_templates_archived_branch")
62 changes: 40 additions & 22 deletions cfme/tests/infrastructure/test_vm_discovery.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import pytest
import time
from cfme.exceptions import CFMEException
from cfme.infrastructure import virtual_machines
from cfme.infrastructure.provider import SCVMMProvider
from utils import testgen
from utils.providers import setup_provider
from utils.randomness import generate_random_string
from utils.wait import wait_for, TimedOutError
from utils.wait import TimedOutError


def pytest_generate_tests(metafunc):
Expand All @@ -12,38 +14,54 @@ def pytest_generate_tests(metafunc):
testgen.parametrize(metafunc, argnames, argvalues, ids=idlist, scope="module")


@pytest.fixture
def provider_init(provider_key):
"""cfme/infrastructure/provider.py provider object."""
try:
setup_provider(provider_key)
except Exception as e:
pytest.skip("It's not possible to set up this provider, therefore skipping. Exception: "
+ str(e))


@pytest.fixture(scope="class")
def vm_name():
return "test_dscvry_" + generate_random_string()


def test_vm_discovery(request, provider_crud, provider_init, provider_mgmt, vm_name):
def if_scvmm_refresh_provider(provider):
# No eventing from SCVMM so force a relationship refresh
if isinstance(provider, SCVMMProvider):
provider.refresh_provider_relationships()


def wait_for_vm_state_changes(vm, timeout=600):

count = 0
while count < timeout:
try:
quadicon = vm.find_quadicon(refresh=True)
if quadicon.state is 'Archived':
return True
elif quadicon.state is 'Orphaned':
raise CFMEException("VM should be Archived but it is Orphaned now.")
except:
pass
time.sleep(15)
count += 15
if count > timeout:
raise CFMEException("VM should be Archived but it is Orphaned now.")


def test_vm_discovery(request, setup_provider, provider_crud, provider_mgmt, vm_name):
"""
Tests whether cfme will discover a vm change
(add/delete) without being manually refreshed.
"""
vm = virtual_machines.Vm(vm_name, provider_crud)
request.addfinalizer(vm.delete_from_provider)
if not provider_mgmt.does_vm_exist(vm_name):
vm.create_on_provider()

def _cleanup():
vm.delete_from_provider()
if_scvmm_refresh_provider(provider_crud)

request.addfinalizer(_cleanup)
vm.create_on_provider()
if_scvmm_refresh_provider(provider_crud)

try:
vm.wait_to_appear(timeout=600, load_details=False)
except TimedOutError:
pytest.fail("VM was not found in CFME")
vm.delete_from_provider()
virtual_machines.load_archived_vms()
try:
wait_for(lambda: vm.find_quadicon(True, False, False),
num_sec=800, delay=30, handle_exception=True)
except TimedOutError:
pytest.fail("VM was not found in Archives")
if_scvmm_refresh_provider(provider_crud)
wait_for_vm_state_changes(vm)

0 comments on commit caa9405

Please sign in to comment.