From 5c6811503ffc1660b79b62a722cbb99a642d9073 Mon Sep 17 00:00:00 2001 From: Steven Fitzpatrick Date: Wed, 16 Oct 2019 15:42:06 -0500 Subject: [PATCH] Update Horizon Helm test to use python3 This change updates the 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 openstack-helm-infra/tools/gate/selenium Change-Id: I568bea8d715ea28b8e750215d166ba1b04e4172d --- horizon/templates/bin/_selenium-test.py.tpl | 90 ++++++++++----------- horizon/values.yaml | 2 +- 2 files changed, 44 insertions(+), 48 deletions(-) diff --git a/horizon/templates/bin/_selenium-test.py.tpl b/horizon/templates/bin/_selenium-test.py.tpl index 8a6739172d..0fb21d6a95 100644 --- a/horizon/templates/bin/_selenium-test.py.tpl +++ b/horizon/templates/bin/_selenium-test.py.tpl @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 {{/* Copyright 2019 The Openstack-Helm Authors. @@ -24,70 +24,66 @@ 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 # Create logger, console handler and formatter logger = logging.getLogger('Horizon 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' +) ch.setFormatter(formatter) logger.addHandler(ch) -# Get keystone admin user name -if "OS_USERNAME" in os.environ: - keystone_user = os.environ['OS_USERNAME'] - logger.info('Found Keystone username') -else: - logger.critical('Keystone username environment variable not set') - sys.exit(1) -if "OS_PASSWORD" in os.environ: - keystone_password = os.environ['OS_PASSWORD'] - logger.info('Found Keystone password') -else: - logger.critical('Keystone password environment variable not set') - sys.exit(1) -if "HORIZON_URI" in os.environ: - horizon_uri = os.environ['HORIZON_URI'] - logger.info('Found Horizon URI') -else: - logger.critical('Horizon URI environment variable not set') - sys.exit(1) -if "OS_USER_DOMAIN_NAME" in os.environ: - user_domain_name = os.environ['OS_USER_DOMAIN_NAME'] - logger.info('Found Keystone user domain') -else: - logger.critical('Keystone user domain 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) + +keystone_user = get_variable('OS_USERNAME') +keystone_password = get_variable('OS_PASSWORD') +horizon_uri = get_variable('HORIZON_URI') +user_domain_name = get_variable('OS_USER_DOMAIN_NAME') # Add options to make chrome browser headless options = Options() options.add_argument('--headless') options.add_argument('--no-sandbox') - -browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options) -browser.get(horizon_uri) +chrome_driver = '/etc/selenium/chromedriver' +browser = webdriver.Chrome(chrome_driver, chrome_options=options) try: - browser.find_element_by_name('domain').send_keys(user_domain_name) - browser.find_element_by_name('username').send_keys(keystone_user) - browser.find_element_by_name('password').send_keys(keystone_password) - logger.info("Successfully reached Horizon dashboard") -except: - logger.error('Unable to reach Horizon') - browser.close() + logger.info('Attempting to connect to Horizon') + browser.get(horizon_uri) + el = WebDriverWait(browser, 15).until( + EC.title_contains('OpenStack Dashboard') + ) + logger.info('Connected to Horizon') +except TimeoutException: + logger.critical('Timed out waiting for Horizon') + browser.quit() sys.exit(1) try: - browser.find_element_by_id('loginBtn').click() - WebDriverWait(browser, 15).until( - EC.presence_of_element_located((By.ID, 'navbar-collapse')) - ) - logger.info("Successfully logged into Horizon") -except: - logger.error("Unable to login to Horizon") - browser.close() - sys.exit(1) + logger.info('Attempting to log into Horizon') + browser.find_element_by_name('domain').send_keys(user_domain_name) + browser.find_element_by_name('username').send_keys(keystone_user) + browser.find_element_by_name('password').send_keys(keystone_password) + browser.find_element_by_id('loginBtn').click() + WebDriverWait(browser, 15).until( + EC.presence_of_element_located((By.ID, 'navbar-collapse')) + ) + logger.info("Successfully logged into Horizon") +except (TimeoutException, NoSuchElementException): + logger.error('Failed to login to Horizon') + browser.quit() + sys.exit(1) -browser.close() +browser.quit() diff --git a/horizon/values.yaml b/horizon/values.yaml index 76cf19d1eb..2f5a49fc47 100644 --- a/horizon/values.yaml +++ b/horizon/values.yaml @@ -23,7 +23,7 @@ images: horizon_db_sync: docker.io/openstackhelm/horizon:ocata-ubuntu_xenial db_drop: docker.io/openstackhelm/heat:ocata-ubuntu_xenial horizon: docker.io/openstackhelm/horizon:ocata-ubuntu_xenial - test: docker.io/openstackhelm/osh-selenium:latest-ubuntu_xenial + test: docker.io/openstackhelm/osh-selenium:latest-ubuntu_bionic dep_check: quay.io/airshipit/kubernetes-entrypoint:v1.0.0 image_repo_sync: docker.io/docker:17.07.0 pull_policy: "IfNotPresent"