Commit 0922e15c by Csók Tamás

solved countless issues and made tests more reliable

parent d27ab5b9
......@@ -23,16 +23,18 @@ import urlparse
import re
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.by import By
from datetime import datetime
from selenium.common.exceptions import NoSuchElementException
random_pass = "".join([random.choice(
'0123456789abcdefghijklmnopqrstvwxyz') for n in xrange(10)])
random_accents = random_pass + "".join([random.choice(
u"áéíöóúűÁÉÍÖÓÜÚŰ") for n in xrange(5)])
wait_max_sec = 10
host = 'https:127.0.0.1'
client_name = 'test_%s' % random_accents
class UtilityMixin(object):
......@@ -67,7 +69,7 @@ class UtilityMixin(object):
# If selenium runs only in a small (virtual) screen
driver.find_element_by_class_name('navbar-toggle').click()
WebDriverWait(self.driver, wait_max_sec).until(
EC.element_to_be_clickable((
ec.element_to_be_clickable((
By.CSS_SELECTOR,
"a[href*='/dashboard/profile/']")))
except:
......@@ -89,6 +91,11 @@ class UtilityMixin(object):
'Selenium cannot list the select possibilities')
def select_option(self, select, what=None):
"""
From an HTML select imput type try to choose the specified one.
Select is a selenium web element type. What represent both the
text of the option and it's ID.
"""
try:
my_choice = None
options = self.list_options(select)
......@@ -141,7 +148,7 @@ class UtilityMixin(object):
Fires a click event via javascript injection.
"""
try:
# Javascript function to simulate a click on a link
# Javascript function to simulate a click on a link
javascript = (
"var link = arguments[0];"
"var cancelled = false;"
......@@ -156,16 +163,20 @@ class UtilityMixin(object):
"} if (!cancelled) {"
" window.location = link.href;"
"}")
self.driver.execute_script("%s" % javascript, link)
self.driver.execute_script(javascript, link)
except:
raise Exception(
'Selenium cannot inject javascript to the page')
def wait_and_accept_operation(self, argument=None):
# try:
"""
Accepts the operation confirmation pop up window.
Fills out the text inputs before accepting if argument is given.
"""
try:
accept = WebDriverWait(self.driver, wait_max_sec).until(
EC.element_to_be_clickable((
By.ID, "op-form-send")))
ec.element_to_be_clickable((
By.CLASS_NAME, "modal-accept")))
if argument is not None:
possible = self.driver.find_elements_by_css_selector(
"div.controls > input[type='text']")
......@@ -178,17 +189,52 @@ class UtilityMixin(object):
form.clear()
form.send_keys(argument)
accept.click()
# except:
# raise Exception("Selenium cannot accept the"
# " operation confirmation")
except:
raise Exception("Selenium cannot accept the"
" operation confirmation")
def save_template_from_vm(self, name):
try:
WebDriverWait(self.driver, wait_max_sec).until(
ec.element_to_be_clickable((
By.CSS_SELECTOR,
"a[href$='/op/deploy/']")))
self.click_on_link(self.get_link_by_href("/op/deploy/"))
self.wait_and_accept_operation()
recent_deploy = self.recently(self.get_timeline_elements(
"vm.Instance.deploy"))
if not self.check_operation_result(recent_deploy):
print ("Selenium cannot deploy the "
"chosen template virtual machine")
raise Exception('Cannot deploy the virtual machine')
self.click_on_link(WebDriverWait(self.driver, wait_max_sec).until(
ec.element_to_be_clickable((
By.CSS_SELECTOR,
"a[href$='/op/shut_off/']"))))
self.wait_and_accept_operation()
recent_shut_off = self.recently(self.get_timeline_elements(
"vm.Instance.shut_off"))
if not self.check_operation_result(recent_shut_off):
print ("Selenium cannot shut off the "
"chosen template virtual machine")
raise Exception('Cannot shut off the virtual machine')
self.click_on_link(WebDriverWait(self.driver, wait_max_sec).until(
ec.element_to_be_clickable((
By.CSS_SELECTOR,
"a[href$='/op/save_as_template/']"))))
self.wait_and_accept_operation(name)
return name
except:
raise Exception(
'Selenium cannot save a vm as a template')
def create_base_template(self, name=None, architecture="x86-64",
method=None, op_system=None, lease=None,
network="vm"):
if name is None:
name = "template_%s" % random_accents
name = "template_new_%s" % client_name
if op_system is None:
op_system = "!os %s" % random_accents
op_system = "!os %s" % client_name
try:
self.driver.get('%s/dashboard/template/choose/' % host)
self.driver.find_element_by_css_selector(
......@@ -196,7 +242,7 @@ class UtilityMixin(object):
self.driver.find_element_by_id(
"template-choose-next-button").click()
template_name = WebDriverWait(self.driver, wait_max_sec).until(
EC.visibility_of_element_located((
ec.visibility_of_element_located((
By.ID, 'id_name')))
template_name.clear()
template_name.send_keys(name)
......@@ -213,37 +259,53 @@ class UtilityMixin(object):
"id_networks"), network)
self.driver.find_element_by_css_selector(
"input.btn[type='submit']").click()
WebDriverWait(self.driver, wait_max_sec).until(
EC.visibility_of_element_located((
By.ID, 'ops')))
self.click_on_link(self.get_link_by_href('/op/deploy/'))
self.wait_and_accept_operation()
self.click_on_link(WebDriverWait(self.driver, wait_max_sec).until(
EC.element_to_be_clickable((
By.CSS_SELECTOR, "a[href$='/op/shut_off/']"))))
self.wait_and_accept_operation()
WebDriverWait(self.driver, wait_max_sec).until(
EC.element_to_be_clickable((
By.CSS_SELECTOR, "a[href$='/op/deploy/']")))
self.click_on_link(self.get_link_by_href('/op/save_as_template/'))
self.wait_and_accept_operation(name)
return name
return self.save_template_from_vm(name)
except:
raise Exception(
'Selenium cannot create a base template virtual machine')
def get_template_id(self, name=None):
def get_template_id(self, name=None, from_all=False):
"""
In default settings find all templates ID in the template list.
If name is specified searches that specific template's ID
from_all sets whether to use owned templates or all of them
Returns list of the templates ID
"""
try:
self.driver.get('%s/dashboard/template/list/' % host)
templates = self.driver.find_elements_by_css_selector("td.name")
css_selector_of_a_template = ("a[data-original-title]"
"[href*='/dashboard/template/']")
if from_all:
self.select_option(self.driver.find_element_by_id(
'id_stype'), "all")
self.driver.find_element_by_css_selector(
"button[type='submit']").click()
try:
WebDriverWait(self.driver, wait_max_sec).until(
ec.presence_of_element_located((
By.CSS_SELECTOR, css_selector_of_a_template)))
except:
print "Selenium could not locate any templates"
template_table = self.driver.find_element_by_css_selector(
"table[class*='template-list-table']")
templates = template_table.find_elements_by_css_selector("td.name")
found_template_ids = []
for template in templates:
if name in template.text or name is None:
template_link = template.find_element_by_css_selector(
"a[data-original-title]")
found_template_ids.append(
re.search(r'\d+', template_link.get_attribute(
'innerHTML')).group())
if name is None or name in template.text:
try:
template_link = template.find_element_by_css_selector(
css_selector_of_a_template)
template_id = re.search(
r'\d+',
template_link.get_attribute("outerHTML")).group()
found_template_ids.append(template_id)
print ("Found '%(name)s' template's ID as %(id)s" % {
'name': template.text,
'id': template_id})
except NoSuchElementException:
pass
except:
raise
if not found_template_ids and name is not None:
print ("Selenium could not find the specified "
"%(name)s template in the list" % {
......@@ -253,20 +315,39 @@ class UtilityMixin(object):
raise Exception(
'Selenium cannot found the template\'s id')
def check_operation_result(self, operation_id):
def check_operation_result(self, operation_id, restore=True):
"""
Returns wheter the operation_id result is success (returns: boolean)
"""
try:
url_save = self.driver.current_url
if restore:
url_base = urlparse.urlparse(self.driver.current_url)
url_save = ("%(host)s%(url)s" % {
'host': host,
'url': urlparse.urljoin(url_base.path, url_base.query)})
if url_base.fragment:
url_save = ("%(url)s#%(fragment)s" % {
'url': url_save,
'fragment': url_base.fragment})
self.driver.get('%(host)s/dashboard/vm/activity/%(id)s/' % {
'host': host,
'id': operation_id})
result = WebDriverWait(self.driver, wait_max_sec).until(
EC.visibility_of_element_located((
ec.visibility_of_element_located((
By.ID, "activity_status")))
print ("%(id)s result text is '%(result)s'" % {
'id': operation_id,
'result': result.text})
if (result.text == "success"):
out = True
elif (result.text == "wait"):
time.sleep(2)
out = self.check_operation_result(operation_id, False)
else:
out = False
self.driver.get(url_save)
if restore:
print "Restoring to %s url" % url_save
self.driver.get(url_save)
return out
except:
raise Exception(
......@@ -284,15 +365,24 @@ class UtilityMixin(object):
raise Exception(
'Selenium cannot filter timeline activities to recent')
def get_timeline_elements(self, code):
def get_timeline_elements(self, code=None):
try:
self.get_link_by_href("#activity").click()
if code is None:
css_activity_selector = "div[data-activity-code]"
code = "all activity"
else:
css_activity_selector = ("div[data-activity-code="
"'%(code)s']" % {
'code': code})
WebDriverWait(self.driver, wait_max_sec).until(
ec.element_to_be_clickable((
By.CSS_SELECTOR, "a[href*='#activity']"))).click()
activity_dict = {}
timeline = WebDriverWait(self.driver, wait_max_sec).until(
EC.visibility_of_element_located((
ec.visibility_of_element_located((
By.ID, "activity-timeline")))
searched_activity = timeline.find_elements_by_css_selector(
"div[data-activity-code='%s']" % code)
css_activity_selector)
print "Found activity list for %s:" % code
for activity in searched_activity:
activity_id = activity.get_attribute('data-activity-id')
......@@ -310,7 +400,7 @@ class UtilityMixin(object):
def create_template_from_base(self, delete_disk=True, name=None):
try:
if name is None:
name = "template_from_base_%s" % random_accents
name = "template_from_base_%s" % client_name
self.driver.get('%s/dashboard/template/choose/' % host)
choice_list = []
choices = self.driver.find_elements_by_css_selector(
......@@ -326,7 +416,7 @@ class UtilityMixin(object):
self.click_on_link(
self.get_link_by_href("#resources"))
disks = WebDriverWait(self.driver, wait_max_sec).until(
EC.visibility_of_element_located((
ec.visibility_of_element_located((
By.ID, 'vm-details-resources-disk')))
disk_list = disks.find_elements_by_css_selector(
"h4[class*='list-group-item-heading']")
......@@ -335,7 +425,7 @@ class UtilityMixin(object):
self.get_link_by_href("/op/remove_disk/"))
self.wait_and_accept_operation()
WebDriverWait(self.driver, wait_max_sec).until(
EC.visibility_of_element_located((
ec.visibility_of_element_located((
By.ID, "_activity")))
recent_remove_disk = self.recently(
self.get_timeline_elements(
......@@ -344,49 +434,20 @@ class UtilityMixin(object):
print ("Selenium cannot delete disk "
"of the chosen template")
raise Exception('Cannot delete disk')
WebDriverWait(self.driver, wait_max_sec).until(
EC.element_to_be_clickable((
By.CSS_SELECTOR,
"a[href$='/op/deploy/']")))
self.click_on_link(self.get_link_by_href("/op/deploy/"))
self.wait_and_accept_operation()
time.sleep(5)
recent_deploy = self.recently(self.get_timeline_elements(
"vm.Instance.deploy"))
if not self.check_operation_result(recent_deploy):
print ("Selenium cannot deploy the "
"chosen template virtual machine")
raise Exception('Cannot deploy the virtual machine')
self.click_on_link(WebDriverWait(self.driver, wait_max_sec).until(
EC.element_to_be_clickable((
By.CSS_SELECTOR,
"a[href$='/op/shut_off/']"))))
self.wait_and_accept_operation()
time.sleep(2)
recent_shut_off = self.recently(self.get_timeline_elements(
"vm.Instance.shut_off"))
if not self.check_operation_result(recent_shut_off):
print ("Selenium cannot shut off the "
"chosen template virtual machine")
raise Exception('Cannot shut off the virtual machine')
self.click_on_link(WebDriverWait(self.driver, wait_max_sec).until(
EC.element_to_be_clickable((
By.CSS_SELECTOR,
"a[href$='/op/save_as_template/']"))))
self.wait_and_accept_operation(name)
return name
return self.save_template_from_vm(name)
except:
raise Exception('Selenium cannot start a template from a base one')
def delete_template(self, template_id):
try:
self.driver.get('%s/dashboard/template/%s/' % (host, template_id))
url = urlparse.urlparse(self.driver.current_url)
self.click_on_link(
self.get_link_by_href(
"/dashboard/template/delete/%s/" % template_id))
self.wait_and_accept_operation()
WebDriverWait(self.driver, wait_max_sec).until(
EC.visibility_of_element_located((
ec.visibility_of_element_located((
By.CLASS_NAME, 'alert-success')))
url = urlparse.urlparse(self.driver.current_url)
if "/template/list/" not in url.path:
......@@ -404,10 +465,10 @@ class UtilityMixin(object):
choice = random.randint(0, len(vm_list) - 1)
vm_list[choice].click()
WebDriverWait(self.driver, wait_max_sec).until(
EC.element_to_be_clickable((
ec.element_to_be_clickable((
By.CLASS_NAME, 'vm-create-start'))).click()
WebDriverWait(self.driver, wait_max_sec).until(
EC.visibility_of_element_located((
ec.visibility_of_element_located((
By.CLASS_NAME, 'alert-success')))
url = urlparse.urlparse(self.driver.current_url)
pk = re.search(r'\d+', url.path).group()
......@@ -415,7 +476,7 @@ class UtilityMixin(object):
except:
raise Exception('Selenium cannot start a VM')
def viewChange(self, target_box):
def view_change(self, target_box):
driver = self.driver
driver.get('%s/dashboard/' % host)
list_view = driver.find_element_by_id('%s-list-view' % target_box)
......@@ -429,39 +490,59 @@ class UtilityMixin(object):
'#index-list-view',
required_attributes).find_element_by_tag_name('i')
self.click_on_link(list_view_link)
states = [driver.execute_script("%s" % js_script, list_view),
driver.execute_script("%s" % js_script, graph_view)]
states = [driver.execute_script(js_script, list_view),
driver.execute_script(js_script, graph_view)]
self.click_on_link(graph_view_link)
states.extend([driver.execute_script("%s" % js_script, list_view),
driver.execute_script("%s" % js_script, graph_view)])
states.extend([driver.execute_script(js_script, list_view),
driver.execute_script(js_script, graph_view)])
self.click_on_link(list_view_link)
states.extend([driver.execute_script("%s" % js_script, list_view),
driver.execute_script("%s" % js_script, graph_view)])
states.extend([driver.execute_script(js_script, list_view),
driver.execute_script(js_script, graph_view)])
return states
def delete_vm(self, pk):
try:
driver = self.driver
driver.get('%s/dashboard/vm/%s/' % (host, pk))
status_span = driver.find_element_by_id('vm-details-state')
self.get_link_by_href(
"/dashboard/vm/%s/op/destroy/" % pk).click()
WebDriverWait(self.driver, wait_max_sec).until(
EC.element_to_be_clickable((By.ID, 'op-form-send'))).click()
WebDriverWait(status_span, wait_max_sec).until(
EC.visibility_of_element_located((
By.CLASS_NAME, 'fa-trash-o')))
return True
# For relability reasons instead of using the JS operatation
self.driver.get("%(host)s/dashboard/vm/%(id)s/op/destroy/" % {
'host': host,
'id': pk})
self.wait_and_accept_operation()
try:
status_span = WebDriverWait(self.driver, wait_max_sec).until(
ec.visibility_of_element_located((
By.ID, 'vm-details-state')))
WebDriverWait(status_span, wait_max_sec).until(
ec.visibility_of_element_located((
By.CLASS_NAME, 'fa-trash-o')))
except:
# Selenium can time-out by not realising the JS refresh
recent_destroy_vm = self.recently(
self.get_timeline_elements("vm.Instance.destroy"))
if not self.check_operation_result(recent_destroy_vm):
print ("Selenium cannot destroy "
"the chosen %(id)s vm" % {
'id': pk})
raise Exception('Cannot destroy the specified vm')
self.driver.get('%s/dashboard/vm/%s/' % (host, pk))
try:
WebDriverWait(self.driver, wait_max_sec).until(
ec.visibility_of_element_located((
By.CSS_SELECTOR,
"span[data-status*='DESTROYED']")))
return True
except:
return False
except:
raise Exception("Selenium can not destroy a VM")
class VmDetailTest(UtilityMixin, SeleniumTestCase):
template_ids = []
vm_ids = []
@classmethod
def setup_class(cls):
cls._user = User.objects.create(username='test_%s' % random_accents,
cls._user = User.objects.create(username=client_name,
is_superuser=True)
cls._user.set_password(random_accents)
cls._user.save()
......@@ -470,50 +551,85 @@ class VmDetailTest(UtilityMixin, SeleniumTestCase):
def teardown_class(cls):
cls._user.delete()
# def test_01_login(self):
# title = 'Dashboard | CIRCLE'
# location = '/dashboard/'
# self.login('test_%s' % random_accents, random_accents)
# self.driver.get('%s/dashboard/' % host)
# url = urlparse.urlparse(self.driver.current_url)
# (self.assertIn('%s' % title, self.driver.title,
# '%s is not found in the title' % title) or
# self.assertEqual(url.path, '%s' % location,
# 'URL path is not equal with %s' % location))
# def test_02_able_to_create_template(self):
# self.login('test_%s' % random_accents, random_accents)
# template_list = None
# create_template = self.get_link_by_href('/dashboard/template/choose/')
# self.click_on_link(create_template)
# WebDriverWait(self.driver, wait_max_sec).until(
# EC.visibility_of_element_located((
# By.ID, 'create-modal')))
# template_list = self.driver.find_elements_by_class_name(
# 'template-choose-list-element')
# print 'Selenium found %s template possibilities' % len(template_list)
# (self.assertIsNotNone(
# template_list, "Selenium can not find the create template list") or
# self.assertGreater(len(template_list), 0,
# "The create template list is empty"))
# def test_03_create_base_template(self):
# self.login('test_%s' % random_accents, random_accents)
# template_name = self.create_base_template()
# self.driver.get('%s/dashboard/template/list/' % host)
# templates = self.driver.find_elements_by_css_selector("td.name")
# found = False
# for template in templates:
# if template_name in template.text:
# found = True
# self.template_ids.append(
# re.search(r'\d+', template.text).group())
# self.assertTrue(
# found,
# "Coud not found the created template in the template list")
def test_04_create_template_from_base(self):
self.login('test_%s' % random_accents, random_accents)
def test_01_login(self):
title = 'Dashboard | CIRCLE'
location = '/dashboard/'
self.login(client_name, random_accents)
self.driver.get('%s/dashboard/' % host)
url = urlparse.urlparse(self.driver.current_url)
(self.assertIn('%s' % title, self.driver.title,
'%s is not found in the title' % title) or
self.assertEqual(url.path, '%s' % location,
'URL path is not equal with %s' % location))
def test_02_add_template_rights(self):
self.login(client_name, random_accents)
template_pool = self.get_template_id(from_all=True)
if len(template_pool) > 1:
chosen = template_pool[random.randint(0, len(template_pool) - 1)]
elif len(template_pool) == 1:
chosen = template_pool[0]
else:
print "Selenium did not found any templates"
raise Exception(
"System did not meet required conditions to continue")
self.driver.get('%s/dashboard/template/%s/' % (host, chosen))
acces_form = self.driver.find_element_by_css_selector(
"form[action*='/dashboard/template/%(template_id)s/acl/']"
"[method='post']" % {
'template_id': chosen})
user_name = acces_form.find_element_by_css_selector(
"input[type='text'][id='id_name']")
user_status = acces_form.find_element_by_css_selector(
"select[name='level']")
user_name.clear()
user_name.send_keys(client_name)
self.select_option(user_status)
acces_form.find_element_by_css_selector(
"button[type='submit']").click()
found_users = []
acl_users = self.driver.find_elements_by_css_selector(
"a[href*='/dashboard/profile/']")
for user in acl_users:
user_text = re.split(r':[ ]?', user.text)
if len(user_text) == 2:
found_name = re.search(r'[\w\W]+(?=\))', user_text[1]).group()
print ("'%(user)s' found in ACL list for template %(id)s" % {
'user': found_name,
'id': chosen})
found_users.append(found_name)
self.assertIn(client_name, found_users,
"Could not add user to template's ACL")
def test_03_able_to_create_template(self):
self.login(client_name, random_accents)
template_list = None
create_template = self.get_link_by_href('/dashboard/template/choose/')
self.click_on_link(create_template)
WebDriverWait(self.driver, wait_max_sec).until(
ec.visibility_of_element_located((
By.ID, 'confirmation-modal')))
template_list = self.driver.find_elements_by_class_name(
'template-choose-list-element')
print 'Selenium found %s template possibilities' % len(template_list)
(self.assertIsNotNone(
template_list, "Selenium can not find the create template list") or
self.assertGreater(len(template_list), 0,
"The create template list is empty"))
def test_04_create_base_template(self):
self.login(client_name, random_accents)
created_template_id = self.get_template_id(
self.create_base_template())
found = created_template_id is not None
if found:
self.template_ids.extend(created_template_id)
self.assertTrue(
found,
"Coud not found the created template in the template list")
def test_05_create_template_from_base(self):
self.login(client_name, random_accents)
created_template_id = self.get_template_id(
self.create_template_from_base())
found = created_template_id is not None
......@@ -523,63 +639,75 @@ class VmDetailTest(UtilityMixin, SeleniumTestCase):
found,
"Coud not found the created template in the template list")
def test_05_delete_templates(self):
self.login('test_%s' % random_accents, random_accents)
def test_06_delete_templates(self):
success = False
self.login(client_name, random_accents)
for template_id in self.template_ids:
print "Deleting template %s" % template_id
self.delete_template(template_id)
existing_templates = self.get_template_id()
existing_templates = self.get_template_id()
if len(existing_templates) == 0:
success = True
else:
for template_id in self.template_ids:
if template_id not in existing_templates:
self.template_ids.remove(template_id)
self.assertListEqual([], self.template_ids,
"Could not delete (all) the test template(s)")
# def test_10_able_to_create_vm(self):
# self.login('test_%s' % random_accents, random_accents)
# vm_list = None
# create_vm_link = self.get_link_by_href('/dashboard/vm/create/')
# create_vm_link.click()
# WebDriverWait(self.driver, wait_max_sec).until(
# EC.visibility_of_element_located((
# By.ID, 'create-modal')))
# vm_list = self.driver.find_elements_by_class_name(
# 'vm-create-template-summary')
# print ("Selenium found %(vm_number)s virtual machine template "
# " possibilities" % {
# 'vm_number': len(vm_list)})
# (self.assertIsNotNone(
# vm_list, "Selenium can not find the VM list") or
# self.assertGreater(len(vm_list), 0, "The create VM list is empty"))
# def test_11_create_vm(self):
# self.login('test_%s' % random_accents, random_accents)
# pk = self.create_random_vm()
# self.assertIsNotNone(pk, "Can not create a VM")
# def test_12_vm_view_change(self):
# self.login('test_%s' % random_accents, random_accents)
# expected_states = ["", "none",
# "none", "",
# "block", "none"]
# states = self.viewChange("vm")
# print 'states: [%s]' % ', '.join(map(str, states))
# print 'expected: [%s]' % ', '.join(map(str, expected_states))
# self.assertListEqual(states, expected_states,
# "The view mode does not change for VM listing")
# def test_13_node_view_change(self):
# self.login('test_%s' % random_accents, random_accents)
# expected_states = ["", "none",
# "none", "",
# "block", "none"]
# states = self.viewChange("node")
# print 'states: [%s]' % ', '.join(map(str, states))
# print 'expected: [%s]' % ', '.join(map(str, expected_states))
# self.assertListEqual(states, expected_states,
# "The view mode does not change for NODE listing")
# def test_14_delete_vm(self):
# self.login('test_%s' % random_accents, random_accents)
# pk = self.create_random_vm()
# self.assertTrue(self.delete_vm(pk), "Can not delete a VM")
if len(self.template_ids) == 0:
success = True
self.assertTrue(
success, "Could not delete (all) the test template(s)")
def test_07_able_to_create_vm(self):
self.login(client_name, random_accents)
vm_list = None
create_vm_link = self.get_link_by_href('/dashboard/vm/create/')
create_vm_link.click()
WebDriverWait(self.driver, wait_max_sec).until(
ec.visibility_of_element_located((
By.ID, 'confirmation-modal')))
vm_list = self.driver.find_elements_by_class_name(
'vm-create-template-summary')
print ("Selenium found %(vm_number)s virtual machine template "
" possibilities" % {
'vm_number': len(vm_list)})
(self.assertIsNotNone(
vm_list, "Selenium can not find the VM list") or
self.assertGreater(len(vm_list), 0, "The create VM list is empty"))
def test_08_create_vm(self):
self.login(client_name, random_accents)
pk = self.create_random_vm()
self.vm_ids.append(pk)
self.assertIsNotNone(pk, "Can not create a VM")
def test_09_vm_view_change(self):
self.login(client_name, random_accents)
expected_states = ["", "none",
"none", "",
"block", "none"]
states = self.view_change("vm")
print 'states: [%s]' % ', '.join(map(str, states))
print 'expected: [%s]' % ', '.join(map(str, expected_states))
self.assertListEqual(states, expected_states,
"The view mode does not change for VM listing")
def test_10_node_view_change(self):
self.login(client_name, random_accents)
expected_states = ["", "none",
"none", "",
"block", "none"]
states = self.view_change("node")
print 'states: [%s]' % ', '.join(map(str, states))
print 'expected: [%s]' % ', '.join(map(str, expected_states))
self.assertListEqual(states, expected_states,
"The view mode does not change for NODE listing")
def test_11_delete_vm(self):
self.login(client_name, random_accents)
succes = True
for vm in self.vm_ids:
if not self.delete_vm(vm):
succes = False
else:
self.vm_ids.remove(vm)
self.assertTrue(succes, "Can not delete all VM")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment