From 9289cd098710420c1963bb61fe81c159eff913c5 Mon Sep 17 00:00:00 2001 From: Meg Heisler Date: Mon, 14 Jan 2019 13:56:35 -0600 Subject: [PATCH] Additional Selenium tests for Kibana dashboard This helps verify Kibana is working properly by using Selenium Webdriver to navigate to different index dashboards and takes screenshot of each one. It also add the scripts to the gates for single and multinode deployments. Change-Id: Ic2c91734d1eaac0ea4e7985bf69082942166715d --- tools/deployment/common/kibana-selenium.sh | 8 ++ tools/deployment/multinode/kibana-selenium.sh | 1 + .../osh-infra-logging/kibana-selenium.sh | 1 + tools/gate/selenium/kibanaSelenium.py | 88 +++++++++++++++++++ zuul.d/jobs.yaml | 2 + 5 files changed, 100 insertions(+) create mode 100755 tools/deployment/common/kibana-selenium.sh create mode 120000 tools/deployment/multinode/kibana-selenium.sh create mode 120000 tools/deployment/osh-infra-logging/kibana-selenium.sh create mode 100644 tools/gate/selenium/kibanaSelenium.py diff --git a/tools/deployment/common/kibana-selenium.sh b/tools/deployment/common/kibana-selenium.sh new file mode 100755 index 000000000..a23115e18 --- /dev/null +++ b/tools/deployment/common/kibana-selenium.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +export KIBANA_USER="admin" +export KIBANA_PASSWORD="changeme" +export KIBANA_LOGSTASH_URI="kibana.osh-infra.svc.cluster.local/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'logstash-*',interval:auto,query:(match_all:()),sort:!('@timestamp',desc))" +export KIBANA_KERNEL_URI="kibana.osh-infra.svc.cluster.local/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'kernel-*',interval:auto,query:(match_all:()),sort:!('@timestamp',desc))" +export KIBANA_JOURNAL_URI="kibana.osh-infra.svc.cluster.local/app/kibana#/discover?_g=()&_a=(columns:!(_source),index:'journal-*',interval:auto,query:(match_all:()),sort:!('@timestamp',desc))" +python tools/gate/selenium/kibanaSelenium.py diff --git a/tools/deployment/multinode/kibana-selenium.sh b/tools/deployment/multinode/kibana-selenium.sh new file mode 120000 index 000000000..d5114e2cc --- /dev/null +++ b/tools/deployment/multinode/kibana-selenium.sh @@ -0,0 +1 @@ +../common/kibana-selenium.sh \ No newline at end of file diff --git a/tools/deployment/osh-infra-logging/kibana-selenium.sh b/tools/deployment/osh-infra-logging/kibana-selenium.sh new file mode 120000 index 000000000..d5114e2cc --- /dev/null +++ b/tools/deployment/osh-infra-logging/kibana-selenium.sh @@ -0,0 +1 @@ +../common/kibana-selenium.sh \ No newline at end of file diff --git a/tools/gate/selenium/kibanaSelenium.py b/tools/gate/selenium/kibanaSelenium.py new file mode 100644 index 000000000..d17527f72 --- /dev/null +++ b/tools/gate/selenium/kibanaSelenium.py @@ -0,0 +1,88 @@ +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 +from selenium.common.exceptions import TimeoutException +from threading import Thread + +logger = logging.getLogger('Kibana Selenium Tests') +logger.setLevel(logging.DEBUG) +ch = logging.StreamHandler() +ch.setLevel(logging.DEBUG) +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + +ch.setFormatter(formatter) +logger.addHandler(ch) + +# Get Grafana admin user name +if "KIBANA_USER" in os.environ: + kibana_user = os.environ['KIBANA_USER'] + logger.info('Found Kibana username') +else: + logger.critical('Kibana username environment variable not set') + sys.exit(1) + +if "KIBANA_PASSWORD" in os.environ: + kibana_password = os.environ['KIBANA_PASSWORD'] + logger.info('Found Kibana password') +else: + logger.critical('Kibana password environment variable not set') + sys.exit(1) + +if "KIBANA_JOURNAL_URI" in os.environ: + kibana_journal_uri = os.environ['KIBANA_JOURNAL_URI'] + logger.info('Found Kibana Journal URI') +else: + logger.critical('Kibana Journal URI environment variable not set') + sys.exit(1) + +if "KIBANA_KERNEL_URI" in os.environ: + kibana_kernel_uri = os.environ['KIBANA_KERNEL_URI'] + logger.info('Found Kibana Kernel URI') +else: + logger.critical('Kibana Kernel URI environment variable not set') + sys.exit(1) + +if "KIBANA_LOGSTASH_URI" in os.environ: + kibana_logstash_uri = os.environ['KIBANA_LOGSTASH_URI'] + logger.info('Found Kibana Logstash URI') +else: + logger.critical('Kibana Logstash 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) +url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_journal_uri) +browser.get(url) + +WebDriverWait(browser, 60).until( + EC.presence_of_element_located((By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/discover-app/div/div[2]/div[2]/div/div[2]/div[2]/doc-table/div/table/tbody/tr[1]/td[2]')) +) +browser.save_screenshot('/tmp/artifacts/Kibana_JournalIndex.png') + +browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options) +url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_kernel_uri) +browser.get(url) + +WebDriverWait(browser, 60).until( + EC.presence_of_element_located((By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/discover-app/div/div[2]/div[2]/div/div[2]/div[2]/doc-table/div/table/tbody/tr[1]/td[2]')) +) +browser.save_screenshot('/tmp/artifacts/Kibana_KernelIndex.png') + +browser = webdriver.Chrome('/etc/selenium/chromedriver', chrome_options=options) +url = "http://{0}:{1}@{2}".format(kibana_user, kibana_password, kibana_logstash_uri) +browser.get(url) + +WebDriverWait(browser, 60).until( + EC.presence_of_element_located((By.XPATH, '//*[@id="kibana-body"]/div[1]/div/div/div[3]/discover-app/div/div[2]/div[2]/div/div[2]/div[2]/doc-table/div/table/tbody/tr[1]/td[2]')) +) + +browser.save_screenshot('/tmp/artifacts/Kibana_LogstashIndex.png') diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml index 7fce1ed3a..38420c4e9 100644 --- a/zuul.d/jobs.yaml +++ b/zuul.d/jobs.yaml @@ -65,6 +65,7 @@ - ./tools/deployment/multinode/grafana-selenium.sh - ./tools/deployment/multinode/nagios-selenium.sh - ./tools/deployment/multinode/prometheus-selenium.sh + - ./tools/deployment/multinode/kibana-selenium.sh - job: name: openstack-helm-infra-tenant-ceph @@ -128,6 +129,7 @@ - ./tools/deployment/osh-infra-logging/055-elasticsearch-ldap.sh - ./tools/deployment/osh-infra-logging/060-fluent-logging.sh - ./tools/deployment/osh-infra-logging/070-kibana.sh + - ./tools/deployment/osh-infra-logging/kibana-selenium.sh - job: name: openstack-helm-infra-aio-monitoring