mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
* refactor: remove trailing whitespace from Python files * Add the GitHub Super-Linter Add Python flake8 linting for W291 trailing whitespace * Add licenses
614 lines
20 KiB
Python
614 lines
20 KiB
Python
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import sys, os
|
|
sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/'+'../lib'))
|
|
|
|
|
|
|
|
from selenium import webdriver
|
|
from selenium.webdriver.common.by import By
|
|
from selenium.webdriver.support.ui import Select
|
|
from selenium.common.exceptions import NoSuchElementException
|
|
import unittest, time
|
|
import initialize
|
|
import Global_Locators
|
|
|
|
|
|
|
|
class deployVM(unittest.TestCase):
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.driver = initialize.getOrCreateWebdriver()
|
|
self.verificationErrors = []
|
|
|
|
|
|
def test_deployvm(self):
|
|
|
|
|
|
## Action Part
|
|
# VM will be named Auto-VM and this VM will be used in all subsequent tests.
|
|
# Deploy an Instance named Auto-VM Default CentOS no GUI Template
|
|
|
|
driver = self.driver
|
|
self.driver.implicitly_wait(30)
|
|
driver.refresh() ## Most Important step. Failure to do this will change XPATH location and Scripts will fail.
|
|
|
|
|
|
# Click on Instances link
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
|
|
# Click on add Instance on Instances page
|
|
driver.find_element_by_xpath(Global_Locators.add_instance_xpath).click()
|
|
|
|
# Following select template action will fire automatically... ignore it. And leave following commented.
|
|
# driver.find_element_by_xpath("(//input[@name='select-template'])[3]").click()
|
|
#Click on Next button on Instances Wizard.
|
|
driver.find_element_by_xpath(Global_Locators.add_instance_next_xpath).click()
|
|
|
|
# Nothing to do here as we will be using all default settings. (Default CentOS no GUI template should be highlighted here. Click Next
|
|
driver.find_element_by_xpath(Global_Locators.add_instance_next_xpath).click()
|
|
|
|
# Nothing to do here. Medium Instance compute offering should be selected here. Click Next
|
|
driver.find_element_by_xpath(Global_Locators.add_instance_next_xpath).click()
|
|
|
|
# Nothing to do here. Data Disk Offering : No Thanks!!. Click Next
|
|
driver.find_element_by_xpath(Global_Locators.add_instance_next_xpath).click()
|
|
|
|
# Since this is our first instance; we must provide a network name. We will use Test-Network as out network name.
|
|
driver.find_element_by_xpath("(//input[@name='new-network-name'])[2]").click()
|
|
driver.find_element_by_xpath("(//input[@name='new-network-name'])[2]").clear()
|
|
driver.find_element_by_xpath("(//input[@name='new-network-name'])[2]").send_keys("Test-Network")
|
|
|
|
#Click next
|
|
driver.find_element_by_xpath(Global_Locators.add_instance_next_xpath).click()
|
|
|
|
# Give our VM a name here. Use Auto-VM as name
|
|
driver.find_element_by_xpath("(//input[@name='displayname'])[2]").click()
|
|
|
|
driver.find_element_by_xpath("(//input[@name='displayname'])[2]").clear()
|
|
|
|
driver.find_element_by_xpath("(//input[@name='displayname'])[2]").send_keys("Auto-VM")
|
|
|
|
# All data filled. Click Launch VM. (It has the same xpath as Next button. So we will use Next Variable here.
|
|
driver.find_element_by_xpath(Global_Locators.add_instance_next_xpath).click()
|
|
|
|
print '\n' + '\n' + "VM Deployment is complete... wait for 5 mins to check deployment status" + '\n' + '\n'
|
|
|
|
|
|
|
|
## Verification Part
|
|
|
|
|
|
## Now we must wait for some random time (Educated guess based on experience) and check if VM has been deployed and if it is in running state.
|
|
## Should take about 4 min to deploy VM.. but we will wait 5 mins and check the status , we will do this twice. So total 2 check within 10 mins with first check occuring at 5th min.
|
|
|
|
|
|
driver.refresh() # Refresh UI Page; This polls latest status.
|
|
|
|
# Click on Instances link
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
count = 1
|
|
|
|
while (count > 0):
|
|
|
|
time.sleep(300)
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
print "found VM in table .. checking status..." + '\n' + '\n'
|
|
link.click()
|
|
|
|
status = driver.find_element_by_xpath(Global_Locators.state_xpath).text ## get the status of our VM
|
|
|
|
if status == "Running" :
|
|
print "VM is in running state... continuing with other tests."+ '\n' + '\n'
|
|
break
|
|
else:
|
|
print "Need to check one more time after 5 mins"
|
|
continue
|
|
count = count - 1
|
|
|
|
|
|
def is_element_present(self, how, what):
|
|
|
|
try: self.driver.find_element(by=how, value=what)
|
|
except NoSuchElementException, e: return False
|
|
return True
|
|
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
self.assertEqual([], self.verificationErrors)
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################################################################################################################################
|
|
|
|
|
|
|
|
class destroyVM(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.driver = initialize.getOrCreateWebdriver()
|
|
self.verificationErrors = []
|
|
|
|
|
|
def test_destroyvm(self):
|
|
|
|
driver = self.driver
|
|
self.driver.implicitly_wait(100)
|
|
|
|
## Action part
|
|
# Click on Instances link and find our instance
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
time.sleep(2)
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
link.click()
|
|
|
|
# Click on Destroy Instance button and confirm
|
|
time.sleep(2)
|
|
driver.find_element_by_css_selector(Global_Locators.destroyinstance_css).click()
|
|
time.sleep(2)
|
|
|
|
# Click ok on confirmation
|
|
driver.find_element_by_xpath(Global_Locators.yesconfirmation_xapth).click()
|
|
time.sleep(2)
|
|
|
|
# Go to Dashboard
|
|
# driver.find_element_by_xpath(Global_Locators.dashboard_xpath).click()
|
|
driver.refresh()
|
|
|
|
## Verification part
|
|
time.sleep(60)
|
|
|
|
# Click on Instances link and find our instance
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
time.sleep(2)
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
link.click()
|
|
|
|
|
|
status = driver.find_element_by_xpath(Global_Locators.state_xpath).text ## get the status of our VM
|
|
if status == "Destroyed" :
|
|
print "VM is Destroyed...."+ '\n' + '\n'
|
|
else:
|
|
print "Something went wrong"
|
|
|
|
|
|
|
|
def is_element_present(self, how, what):
|
|
|
|
try: self.driver.find_element(by=how, value=what)
|
|
except NoSuchElementException, e: return False
|
|
return True
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
self.assertEqual([], self.verificationErrors)
|
|
|
|
|
|
|
|
|
|
|
|
################################################################################################################################################################################################
|
|
|
|
|
|
|
|
|
|
class rebootVM(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.driver = initialize.getOrCreateWebdriver()
|
|
self.verificationErrors = []
|
|
|
|
|
|
def test_rebootvm(self):
|
|
|
|
driver = self.driver
|
|
self.driver.implicitly_wait(30)
|
|
print "Verify this test manually for now"
|
|
|
|
ssh = paramiko.SSHClient()
|
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
ssh.connect(vmLifeAndNetwork.Server_Ip, username='root', password='password')
|
|
print '\n' + '\n' + "Before Reboot ...Executing command date ... " + '\n' + '\n'
|
|
stdin, stdout, stderr = ssh.exec_command('date')
|
|
print stdout.readlines()
|
|
print '\n' + '\n' + "Before Reboot ...Executing command last reboot | head -1 ..." + '\n' + '\n'
|
|
stdin, stdout, stderr = ssh.exec_command('last reboot | head -1')
|
|
print '\n' + '\n' + "Before Reboot ...Executing command uptime..." + '\n' + '\n'
|
|
stdin, stdout, stderr = ssh.exec_command('uptime')
|
|
print stdout.readlines()
|
|
ssh.close()
|
|
|
|
|
|
driver.refresh()
|
|
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
count = 1
|
|
|
|
while (count > 0):
|
|
|
|
#time.sleep(300)
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
print "found VM in table .. Rebooting now..." + '\n' + '\n'
|
|
link.click()
|
|
|
|
driver.find_element_by_css_selector(Global_Locators.rebootinstance_css).click()
|
|
driver.find_element_by_xpath(Global_Locators.actionconfirm_xpath).click()
|
|
|
|
# Sleep for 5 mins to ensure system gets rebooted.
|
|
time.sleep(300)
|
|
|
|
ssh = paramiko.SSHClient()
|
|
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
ssh.connect(vmLifeAndNetwork.Server_Ip, username='root', password='password')
|
|
print '\n' + '\n' + "After Reboot ...Executing command date ... " + '\n' + '\n'
|
|
stdin, stdout, stderr = ssh.exec_command('date')
|
|
print stdout.readlines()
|
|
print '\n' + '\n' + "After Reboot ...Executing command last reboot | head -1 ..." + '\n' + '\n'
|
|
stdin, stdout, stderr = ssh.exec_command('last reboot | head -1')
|
|
print '\n' + '\n' + "After Reboot ...Executing command uptime..." + '\n' + '\n'
|
|
stdin, stdout, stderr = ssh.exec_command('uptime')
|
|
print stdout.readlines()
|
|
ssh.close()
|
|
|
|
|
|
def is_element_present(self, how, what):
|
|
|
|
try: self.driver.find_element(by=how, value=what)
|
|
except NoSuchElementException, e: return False
|
|
return True
|
|
|
|
|
|
def tearDown(self):
|
|
self.assertEqual([], self.verificationErrors)
|
|
|
|
|
|
#########################################################################################################################################################
|
|
|
|
|
|
|
|
class restoreVM(unittest.TestCase):
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.driver = initialize.getOrCreateWebdriver()
|
|
self.verificationErrors = []
|
|
|
|
|
|
def test_restorevm(self):
|
|
|
|
driver = self.driver
|
|
self.driver.implicitly_wait(100)
|
|
|
|
## Action part
|
|
# Click on Instances link and find our instance
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
|
|
link.click()
|
|
|
|
# Click on Destroy Instance button and confirm
|
|
driver.find_element_by_css_selector(Global_Locators.restoreinstance_css).click()
|
|
|
|
# Click ok on confirmation
|
|
driver.find_element_by_xpath(Global_Locators.yesconfirmation_xapth).click()
|
|
|
|
# Go to Dashboard
|
|
driver.find_element_by_xpath(Global_Locators.dashboard_xpath).click()
|
|
|
|
|
|
## Verification part
|
|
|
|
time.sleep(60)
|
|
|
|
# Click on Instances link and find our instance
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
link.click()
|
|
|
|
|
|
status = driver.find_element_by_xpath(Global_Locators.state_xpath).text ## get the status of our VM
|
|
|
|
if status == "Stopped" :
|
|
print "VM is Restored. but in stopped state.. will start now."+ '\n' + '\n'
|
|
|
|
else:
|
|
print "Something went wrong"
|
|
|
|
|
|
|
|
|
|
#VM will be in stop state so we must start it now
|
|
# Click on Instances link and find our instance
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
link.click()
|
|
|
|
# Click on Start Instance.
|
|
driver.find_element_by_css_selector(Global_Locators.startinstance_css).click()
|
|
time.sleep(2)
|
|
|
|
# Dismiss confirmation by clicking Yes
|
|
driver.find_element_by_xpath(Global_Locators.yesconfirmation_xapth).click()
|
|
time.sleep(2)
|
|
|
|
# Go to Dashboard
|
|
driver.find_element_by_xpath(Global_Locators.dashboard_xpath).click()
|
|
time.sleep(2)
|
|
|
|
print "VM is Started."+ '\n' + '\n'
|
|
|
|
# status = None
|
|
time.sleep(60)
|
|
|
|
# Dismiss the Start Instance information box.
|
|
driver.find_element_by_xpath(Global_Locators.actionconfirm_xpath).click()
|
|
time.sleep(2)
|
|
|
|
|
|
|
|
def is_element_present(self, how, what):
|
|
|
|
try: self.driver.find_element(by=how, value=what)
|
|
except NoSuchElementException, e: return False
|
|
return True
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
self.assertEqual([], self.verificationErrors)
|
|
|
|
|
|
|
|
#########################################################################################################################################################
|
|
|
|
|
|
|
|
class startVM(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
self.driver = initialize.getOrCreateWebdriver()
|
|
self.verificationErrors = []
|
|
|
|
|
|
def test_startvm(self):
|
|
|
|
driver = self.driver
|
|
self.driver.implicitly_wait(100)
|
|
|
|
## Action part
|
|
#driver.refresh() ## Most Important step. Failure to do this will change XPATH location and Scripts will fail.
|
|
# Click on Instances link and find our instance
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
print "found VM in table .. checking status..." + '\n' + '\n'
|
|
link.click()
|
|
|
|
|
|
|
|
# Click on Start Instance.
|
|
driver.find_element_by_css_selector(Global_Locators.startinstance_css).click()
|
|
time.sleep(2)
|
|
|
|
# Dismiss confirmation by clicking Yes
|
|
driver.find_element_by_xpath(Global_Locators.yesconfirmation_xapth).click()
|
|
time.sleep(2)
|
|
|
|
# Go to Dashboard
|
|
#driver.find_element_by_xpath(Global_Locators.dashboard_xpath).click()
|
|
driver.refresh()
|
|
|
|
|
|
## Verification part
|
|
# status = None
|
|
time.sleep(60)
|
|
|
|
# Dismiss the Start Instance information box.
|
|
driver.find_element_by_xpath(Global_Locators.actionconfirm_xpath).click()
|
|
time.sleep(2)
|
|
|
|
# Click on Instances link and find our instance
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
time.sleep(2)
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
link.click()
|
|
|
|
|
|
status = driver.find_element_by_xpath(Global_Locators.state_xpath).text ## get the status of our VM
|
|
|
|
if status == "Running" :
|
|
print "VM is in Running state..."+ '\n' + '\n'
|
|
|
|
else:
|
|
print "Something went wrong"
|
|
|
|
# Go to Dashboard
|
|
driver.refresh()
|
|
|
|
|
|
|
|
def is_element_present(self, how, what):
|
|
|
|
try: self.driver.find_element(by=how, value=what)
|
|
except NoSuchElementException, e: return False
|
|
return True
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
self.assertEqual([], self.verificationErrors)
|
|
|
|
|
|
|
|
|
|
#########################################################################################################################################################
|
|
|
|
|
|
|
|
class stopVM(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.driver = initialize.getOrCreateWebdriver()
|
|
self.verificationErrors = []
|
|
|
|
|
|
def test_stopvm(self):
|
|
|
|
driver = self.driver
|
|
self.driver.implicitly_wait(100)
|
|
|
|
## Action part
|
|
driver.refresh() ## Important step.
|
|
|
|
# Click on Instances link and find our instance
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
print "found VM in table .. checking status..." + '\n' + '\n'
|
|
link.click()
|
|
|
|
|
|
# HWe are on our VM information page.
|
|
driver.find_element_by_css_selector(Global_Locators.stopinstance_css).click()
|
|
time.sleep(2)
|
|
|
|
# a Pop up must appear; below we will check the force stop check box and then we will click ok.
|
|
driver.find_element_by_id(Global_Locators.stopinstanceforce_id).click()
|
|
driver.find_element_by_xpath(Global_Locators.actionconfirm_xpath).click()
|
|
time.sleep(2)
|
|
|
|
# Go to Dahsboard
|
|
#driver.find_element_by_xpath(Global_Locators.dashboard_xpath).click()
|
|
driver.refresh()
|
|
|
|
# Should take less than min to stop the instance. We will check twice at interval of 45 seconds o be safe.
|
|
## Verification part
|
|
time.sleep(60)
|
|
|
|
# Click on Instances link and find our instance
|
|
driver.find_element_by_xpath(Global_Locators.instances_xpath).click()
|
|
|
|
linkclass = None
|
|
linkclass = driver.find_elements_by_xpath(Global_Locators.instances_table_xpath) # This returns a list of all VM names in tables
|
|
|
|
for link in linkclass:
|
|
|
|
if link.text == "Auto-VM": # We will search for our VM in this table
|
|
link.click()
|
|
|
|
|
|
status = driver.find_element_by_xpath(Global_Locators.state_xpath).text ## get the status of our VM
|
|
|
|
if status == "Stopped" :
|
|
print "VM is in Stopped state...."+ '\n' + '\n'
|
|
else:
|
|
print "Something went wrong"
|
|
|
|
|
|
|
|
def is_element_present(self, how, what):
|
|
|
|
try: self.driver.find_element(by=how, value=what)
|
|
except NoSuchElementException, e: return False
|
|
return True
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
self.assertEqual([], self.verificationErrors)
|
|
|
|
|
|
#########################################################################################################################################################
|