Update Nagios Helm test to use python3

This change updates the selenium_tests container image
to one which installs python3.

The selenium-test.py template file has been refactored
to match the structure of the selenium tests in
/tools/gate/selenium

Depends On: https://review.opendev.org/688436
Change-Id: I49e0cfd05f27f868864a98e8e68ffe79e28c0f03
This commit is contained in:
Steven Fitzpatrick 2019-10-14 09:56:07 -05:00 committed by diwakar thyagaraj
parent b661ce95df
commit b3d2a178ad
2 changed files with 87 additions and 91 deletions

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
{{/*
Copyright 2019 The Openstack-Helm Authors.
@ -24,118 +24,114 @@ from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import ScreenshotException
# Create logger, console handler and formatter
logger = logging.getLogger('Nagios Selenium Tests')
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Set the formatter and add the handler
ch.setFormatter(formatter)
logger.addHandler(ch)
if "NAGIOS_USER" in os.environ:
nagios_user = os.environ['NAGIOS_USER']
logger.info('Found Nagios username')
else:
logger.critical('Nagios username environment variable not set')
sys.exit(1)
def get_variable(env_var):
if env_var in os.environ:
logger.info('Found "{}"'.format(env_var))
return os.environ[env_var]
else:
logger.critical('Variable "{}" is not defined!'.format(env_var))
sys.exit(1)
if "NAGIOS_PASSWORD" in os.environ:
nagios_password = os.environ['NAGIOS_PASSWORD']
logger.info('Found Nagios password')
else:
logger.critical('Nagios password environment variable not set')
sys.exit(1)
def click_link_by_name(link_name):
try:
logger.info("Clicking '{}' link".format(link_name))
link = browser.find_element_by_link_text(link_name)
link.click()
except NoSuchElementException:
logger.error("Failed clicking '{}' link".format(link_name))
browser.quit()
sys.exit(1)
if "NAGIOS_URI" in os.environ:
nagios_uri = os.environ['NAGIOS_URI']
logger.info('Found Nagios URI')
else:
logger.critical('Nagios URI environment variable not set')
sys.exit(1)
def take_screenshot(page_name, artifacts_dir='/tmp/artifacts/'):
file_name = page_name.replace(' ', '_')
try:
el = WebDriverWait(browser, 15)
browser.save_screenshot('{}{}.png'.format(artifacts_dir, file_name))
logger.info("Successfully captured {} screenshot".format(page_name))
except ScreenshotException:
logger.error("Failed to capture {} screenshot".format(page_name))
browser.quit()
sys.exit(1)
username = get_variable('NAGIOS_USER')
password = get_variable('NAGIOS_PASSWORD')
nagios_uri = get_variable('NAGIOS_URI')
nagios_url = 'http://{0}:{1}@{2}'.format(username, password, nagios_uri)
chrome_driver = '/etc/selenium/chromedriver'
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920x1080')
browser = webdriver.Chrome(chrome_driver, chrome_options=options)
logger.info("Attempting to open Chrome webdriver")
try:
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options)
logger.info("Successfully opened Chrome webdriver")
except:
logger.error("Unable to open Chrome webdriver")
browser.close()
sys.exit(1)
logger.info('Attempting to connect to Nagios')
browser.get(nagios_url)
el = WebDriverWait(browser, 15).until(
EC.title_contains('Nagios')
)
logger.info('Connected to Nagios')
except TimeoutException:
logger.critical('Timed out waiting for Nagios')
browser.quit()
sys.exit(1)
logger.info("Attempting to login to Nagios dashboard")
try:
browser.get('http://'+nagios_user+':'+nagios_password+'@'+nagios_uri)
logger.info("Successfully logged in to Nagios dashboard")
sideFrame = browser.switch_to.frame('side')
try:
logger.info("Attempting to access Nagios services link")
services = browser.find_element_by_link_text('Services')
services.click()
logger.info("Successfully accessed Nagios services link")
try:
logger.info("Attempting to capture Nagios services screen")
el = WebDriverWait(browser, 15)
browser.save_screenshot('/tmp/artifacts/Nagios_Services.png')
logger.info("Successfully captured Nagios services screen")
except:
logger.error("Unable to capture Nagios services screen")
browser.close()
sys.exit(1)
except:
logger.error("Unable to access Nagios services link")
browser.close()
logger.info('Switching Focus to Navigation side frame')
sideFrame = browser.switch_to.frame('side')
except NoSuchElementException:
logger.error('Failed selecting side frame')
browser.quit()
sys.exit(1)
try:
logger.info("Attempting to access Nagios host groups link")
host_groups = browser.find_element_by_link_text('Host Groups')
host_groups.click()
logger.info("Successfully accessed Nagios host groups link")
try:
logger.info("Attempting to capture Nagios host groups screen")
el = WebDriverWait(browser, 15)
browser.save_screenshot('/tmp/artifacts/Nagios_Host_Groups.png')
logger.info("Successfully captured Nagios host groups screen")
except:
logger.error("Unable to capture Nagios host groups screen")
browser.close()
sys.exit(1)
except:
logger.error("Unable to access Nagios host groups link")
browser.close()
try:
logger.info('Attempting to visit Services page')
click_link_by_name('Services')
take_screenshot('Nagios Services')
except TimeoutException:
logger.error('Failed to load Services page')
browser.quit()
sys.exit(1)
try:
logger.info("Attempting to access Nagios hosts link")
hosts = browser.find_element_by_link_text('Hosts')
hosts.click()
logger.info("Successfully accessed Nagios hosts link")
try:
logger.info("Attempting to capture Nagios hosts screen")
el = WebDriverWait(browser, 15)
browser.save_screenshot('/tmp/artifacts/Nagios_Hosts.png')
logger.info("Successfully captured Nagios hosts screen")
except:
logger.error("Unable to capture Nagios hosts screen")
browser.close()
sys.exit(1)
except:
logger.error("Unable to access Nagios hosts link")
browser.close()
try:
logger.info('Attempting to visit Host Groups page')
click_link_by_name('Host Groups')
take_screenshot('Nagios Host Groups')
except TimeoutException:
logger.error('Failed to load Host Groups page')
browser.quit()
sys.exit(1)
browser.close()
logger.info("The following screenshots were captured:")
for root, dirs, files in os.walk("/tmp/artifacts/"):
try:
logger.info('Attempting to visit Hosts page')
click_link_by_name('Hosts')
take_screenshot('Nagios Hosts')
except TimeoutException:
logger.error('Failed to load Hosts page')
browser.quit()
sys.exit(1)
logger.info("The following screenshots were captured:")
for root, dirs, files in os.walk("/tmp/artifacts/"):
for name in files:
logger.info(os.path.join(root, name))
except:
logger.error("Unable to log in to Nagios dashbaord")
browser.close()
sys.exit(1)
logger.info(os.path.join(root, name))
browser.quit()

View File

@ -21,7 +21,7 @@ images:
apache_proxy: docker.io/httpd:2.4
nagios: docker.io/openstackhelm/nagios:latest-ubuntu_xenial
dep_check: quay.io/stackanetes/kubernetes-entrypoint:v0.2.1
selenium_tests: docker.io/openstackhelm/osh-selenium:latest-ubuntu_xenial
selenium_tests: docker.io/openstackhelm/osh-selenium:latest-ubuntu_bionic
image_repo_sync: docker.io/docker:17.07.0
pull_policy: IfNotPresent
local_registry: