Merge "Selenium Tests for OSH Infra"

This commit is contained in:
Zuul
2019-01-08 18:03:17 +00:00
committed by Gerrit Code Review
16 changed files with 374 additions and 3 deletions

View File

@@ -0,0 +1,6 @@
#!/bin/bash
export GRAFANA_USER="admin"
export GRAFANA_PASSWORD="password"
export GRAFANA_URI="http://grafana.osh-infra.svc.cluster.local"
python tools/gate/selenium/grafanaSelenium.py

View File

@@ -0,0 +1,6 @@
#!/bin/bash
export NAGIOS_USER="nagiosadmin"
export NAGIOS_PASSWORD="password"
export NAGIOS_URI="nagios.osh-infra.svc.cluster.local"
python tools/gate/selenium/nagiosSelenium.py

View File

@@ -0,0 +1,6 @@
#!/bin/bash
export PROMETHEUS_USER="admin"
export PROMETHEUS_PASSWORD="changeme"
export PROMETHEUS_URI="prometheus.osh-infra.svc.cluster.local"
python tools/gate/selenium/prometheusSelenium.py

View File

@@ -0,0 +1 @@
../common/grafana-selenium.sh

View File

@@ -0,0 +1 @@
../common/nagios-selenium.sh

View File

@@ -0,0 +1 @@
../common/prometheus-selenium.sh

View File

@@ -0,0 +1 @@
../common/grafana-selenium.sh

View File

@@ -0,0 +1 @@
../common/nagios-selenium.sh

View File

@@ -0,0 +1 @@
../common/prometheus-selenium.sh

View File

@@ -0,0 +1,95 @@
import logging
import os
import sys
from selenium import webdriver
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
# Create logger, console handler and formatter
logger = logging.getLogger('Grafana Selenium Tests')
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# Set the formatter and add the handler
ch.setFormatter(formatter)
logger.addHandler(ch)
# Get Grafana admin user name
if "GRAFANA_USER" in os.environ:
grafana_user = os.environ['GRAFANA_USER']
logger.info('Found Grafana username')
else:
logger.critical('Grafana username environment variable not set')
sys.exit(1)
if "GRAFANA_PASSWORD" in os.environ:
grafana_password = os.environ['GRAFANA_PASSWORD']
logger.info('Found Grafana password')
else:
logger.critical('Grafana password environment variable not set')
sys.exit(1)
if "GRAFANA_URI" in os.environ:
grafana_uri = os.environ['GRAFANA_URI']
logger.info('Found Grafana URI')
else:
logger.critical('Grafana URI environment variable not set')
sys.exit(1)
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920x1080')
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options)
browser.get(grafana_uri)
username = browser.find_element_by_name('username')
username.send_keys(grafana_user)
password = browser.find_element_by_name('password')
password.send_keys(grafana_password)
login = browser.find_element_by_css_selector('body > grafana-app > div.main-view > div > div:nth-child(1) > div > div > div.login-inner-box > form > div.login-button-group > button')
login.click()
el = WebDriverWait(browser, 15).until(
EC.presence_of_element_located((By.LINK_TEXT, 'Home'))
)
homeBtn = browser.find_element_by_link_text('Home')
homeBtn.click()
el = WebDriverWait(browser, 15).until(
EC.presence_of_element_located((By.LINK_TEXT, 'Nodes'))
)
nodeBtn = browser.find_element_by_link_text('Nodes')
nodeBtn.click()
el = WebDriverWait(browser, 15).until(
EC.presence_of_element_located((By.XPATH, '/html/body/grafana-app/div[2]/div/div[1]/div/div/div[1]/dashboard-grid/div/div[1]/div/plugin-component/panel-plugin-graph/grafana-panel/div/div[2]'))
)
browser.save_screenshot('/tmp/artifacts/Grafana_Nodes.png')
nodeBtn = browser.find_element_by_link_text('Nodes')
nodeBtn.click()
el = WebDriverWait(browser, 15).until(
EC.presence_of_element_located((By.LINK_TEXT, 'Kubernetes Cluster Status'))
)
healthBtn = browser.find_element_by_link_text('Kubernetes Cluster Status')
healthBtn.click()
el = WebDriverWait(browser, 15).until(
EC.presence_of_element_located((By.XPATH, '/html/body/grafana-app/div[2]/div/div[1]/div/div/div[1]/dashboard-grid/div/div[5]/div/plugin-component/panel-plugin-singlestat/grafana-panel/div'))
)
browser.save_screenshot('/tmp/artifacts/Grafana_ClusterStatus.png')

View File

@@ -0,0 +1,70 @@
import os
import logging
import sys
from selenium import webdriver
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
# 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')
# Set the formatter and add the handler
ch.setFormatter(formatter)
logger.addHandler(ch)
# Get Grafana admin user name
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)
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)
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)
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920x1080')
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options)
browser.get('http://'+nagios_user+':'+nagios_password+'@'+nagios_uri)
sideFrame = browser.switch_to.frame('side')
services = browser.find_element_by_link_text('Services')
services.click()
el = WebDriverWait(browser, 15)
browser.save_screenshot('/tmp/artifacts/Nagios_Services.png')
hostGroups = browser.find_element_by_link_text('Host Groups')
hostGroups.click()
el = WebDriverWait(browser, 15)
browser.save_screenshot('/tmp/artifacts/Nagios_HostGroups.png')
hosts = browser.find_element_by_link_text('Hosts')
hosts.click()
el = WebDriverWait(browser, 15)
browser.save_screenshot('/tmp/artifacts/Nagios_Hosts.png')

View File

@@ -0,0 +1,79 @@
import os
import logging
import sys
from selenium import webdriver
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
# Create logger, console handler and formatter
logger = logging.getLogger('Prometheus Selenium Tests')
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# Set the formatter and add the handler
ch.setFormatter(formatter)
logger.addHandler(ch)
# Get Grafana admin user name
if "PROMETHEUS_USER" in os.environ:
prometheus_user = os.environ['PROMETHEUS_USER']
logger.info('Found Prometheus username')
else:
logger.critical('Prometheus username environment variable not set')
sys.exit(1)
if "PROMETHEUS_PASSWORD" in os.environ:
prometheus_password = os.environ['PROMETHEUS_PASSWORD']
logger.info('Found Prometheus password')
else:
logger.critical('Prometheus password environment variable not set')
sys.exit(1)
if "PROMETHEUS_URI" in os.environ:
prometheus_uri = os.environ['PROMETHEUS_URI']
logger.info('Found Prometheus URI')
else:
logger.critical('Prometheus URI environment variable not set')
sys.exit(1)
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1920x1080')
browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options)
browser.get("http://"+prometheus_user+":"+prometheus_password+"@"+prometheus_uri)
el = WebDriverWait(browser, 15).until(
EC.presence_of_element_located((By.NAME, 'submit'))
)
browser.save_screenshot('/tmp/artifacts/Prometheus_Dash.png')
statusBtn = browser.find_element_by_link_text('Status')
statusBtn.click()
browser.find_element_by_link_text('Runtime & Build Information').click()
el = WebDriverWait(browser, 15).until(
EC.presence_of_element_located((By.XPATH, '/html/body/div/table[1]'))
)
browser.save_screenshot('/tmp/artifacts/Prometheus_RuntimeInfo.png')
statusBtn = browser.find_element_by_link_text('Status')
statusBtn.click()
browser.find_element_by_link_text('Command-Line Flags').click()
el = WebDriverWait(browser, 15).until(
EC.presence_of_element_located((By.XPATH, '/html/body/div/table'))
)
browser.save_screenshot('/tmp/artifacts/Prometheus_CommandLineFlags.png')