Add more public url tests for UIs
Related-PROD: PROD-28323
Related-PROD: PROD-28324
Change-Id: Ie680d0d934cf36f4147b9d9a079f53469d26eccc
diff --git a/cvp-sanity/cvp_checks/fixtures/base.py b/cvp-sanity/cvp_checks/fixtures/base.py
index f6ad22a..ff7e860 100644
--- a/cvp-sanity/cvp_checks/fixtures/base.py
+++ b/cvp-sanity/cvp_checks/fixtures/base.py
@@ -14,6 +14,59 @@
def nodes_in_group(request):
return request.param
+@pytest.fixture(scope='session')
+def check_alerta(local_salt_client):
+ salt_output = local_salt_client.cmd(
+ 'prometheus:alerta',
+ 'test.ping',
+ expr_form='pillar')
+ if not salt_output:
+ pytest.skip("Alerta service or prometheus:alerta pillar \
+ are not found on this environment.")
+
+@pytest.fixture(scope='session')
+def ctl_nodes_pillar(local_salt_client):
+ '''Return controller node pillars (OS or k8s ctls).
+ This will help to identify nodes to use for UI curl tests.
+ If no platform is installed (no OS or k8s) we need to skip
+ the test (product team use case).
+ '''
+ salt_output = local_salt_client.cmd(
+ 'keystone:server',
+ 'test.ping',
+ expr_form='pillar')
+ if salt_output:
+ return "keystone:server"
+ else:
+ salt_output = local_salt_client.cmd(
+ 'etcd:server',
+ 'test.ping',
+ expr_form='pillar')
+ return "etcd:server" if salt_output else pytest.skip("Neither \
+ Openstack nor k8s is found. Skipping test")
+
+
+@pytest.fixture(scope='session')
+def check_openstack(local_salt_client):
+ salt_output = local_salt_client.cmd(
+ 'keystone:server',
+ 'test.ping',
+ expr_form='pillar')
+ if not salt_output:
+ pytest.skip("Openstack not found or keystone:server pillar \
+ are not found on this environment.")
+
+
+@pytest.fixture(scope='session')
+def check_drivetrain(local_salt_client):
+ salt_output = local_salt_client.cmd(
+ 'I@jenkins:client and not I@salt:master',
+ 'test.ping',
+ expr_form='compound')
+ if not salt_output:
+ pytest.skip("Drivetrain service or jenkins:client pillar \
+ are not found on this environment.")
+
@pytest.fixture(scope='session')
def check_prometheus(local_salt_client):
diff --git a/cvp-sanity/cvp_checks/tests/test_contrail.py b/cvp-sanity/cvp_checks/tests/test_contrail.py
index 5e7e108..1c1ad13 100644
--- a/cvp-sanity/cvp_checks/tests/test_contrail.py
+++ b/cvp-sanity/cvp_checks/tests/test_contrail.py
@@ -1,5 +1,6 @@
import pytest
import json
+from cvp_checks import utils
pytestmark = pytest.mark.usefixtures("contrail")
@@ -85,3 +86,18 @@
'The length of vRouters {} differs' \
' from the length of compute nodes {}'.format(actual_vrouter_count,
len(cs.keys()))
+
+
+def test_public_ui_contrail(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('cluster_public_host')
+ protocol = 'https'
+ port = '8143'
+ url = "{}://{}:{}".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl -k {}/ 2>&1 | \
+ grep Contrail'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Public Contrail UI is not reachable on {} from ctl nodes'.format(url)
diff --git a/cvp-sanity/cvp_checks/tests/test_stacklight.py b/cvp-sanity/cvp_checks/tests/test_stacklight.py
index ec6ed40..e748f61 100644
--- a/cvp-sanity/cvp_checks/tests/test_stacklight.py
+++ b/cvp-sanity/cvp_checks/tests/test_stacklight.py
@@ -121,13 +121,13 @@
@pytest.mark.usefixtures('check_prometheus')
-def test_prometheus_alert_count(local_salt_client):
+def test_prometheus_alert_count(local_salt_client, ctl_nodes_pillar):
IP = utils.get_monitoring_ip('cluster_public_host')
# keystone:server can return 3 nodes instead of 1
# this will be fixed later
# TODO
nodes_info = local_salt_client.cmd(
- 'keystone:server',
+ ctl_nodes_pillar,
'cmd.run',
['curl -s http://{}:15010/alerts | grep icon-chevron-down | '
'grep -v "0 active"'.format(IP)],
diff --git a/cvp-sanity/cvp_checks/tests/test_ui_addresses.py b/cvp-sanity/cvp_checks/tests/test_ui_addresses.py
index 82bcae1..95565ee 100644
--- a/cvp-sanity/cvp_checks/tests/test_ui_addresses.py
+++ b/cvp-sanity/cvp_checks/tests/test_ui_addresses.py
@@ -2,7 +2,8 @@
import pytest
-def test_ui_horizon(local_salt_client):
+@pytest.mark.usefixtures('check_openstack')
+def test_ui_horizon(local_salt_client, ctl_nodes_pillar):
salt_output = local_salt_client.cmd(
'horizon:server',
'pillar.get',
@@ -13,7 +14,7 @@
IP = [salt_output[node] for node in salt_output
if salt_output[node]]
result = local_salt_client.cmd(
- 'keystone:server',
+ ctl_nodes_pillar,
'cmd.run',
['curl --insecure https://{}/auth/login/ 2>&1 | \
grep Login'.format(IP[0])],
@@ -23,51 +24,212 @@
IP[0])
+@pytest.mark.usefixtures('check_openstack')
+def test_public_openstack(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('cluster_public_host')
+ protocol = 'https'
+ port = '5000'
+ url = "{}://{}:{}/v3".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl -k {}/ 2>&1 | \
+ grep stable'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Public Openstack url is not reachable on {} from ctl nodes'.format(url)
+
+
@pytest.mark.usefixtures('check_kibana')
-def test_ui_kibana(local_salt_client):
+def test_internal_ui_kibana(local_salt_client, ctl_nodes_pillar):
IP = utils.get_monitoring_ip('stacklight_log_address')
+ protocol = 'http'
+ port = '5601'
+ url = "{}://{}:{}".format(protocol, IP, port)
result = local_salt_client.cmd(
- 'keystone:server',
+ ctl_nodes_pillar,
'cmd.run',
- ['curl http://{}:5601/app/kibana 2>&1 | \
- grep loading'.format(IP)],
+ ['curl {}/app/kibana 2>&1 | \
+ grep loading'.format(url)],
expr_form='pillar')
assert len(result[result.keys()[0]]) != 0, \
- 'Kibana login page is not reachable on {} from ctl nodes'.format(IP)
+ 'Internal Kibana login page is not reachable on {} ' \
+ 'from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_kibana')
+def test_public_ui_kibana(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('cluster_public_host')
+ protocol = 'https'
+ port = '5601'
+ url = "{}://{}:{}".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl {}/app/kibana 2>&1 | \
+ grep loading'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Public Kibana login page is not reachable on {} ' \
+ 'from ctl nodes'.format(url)
@pytest.mark.usefixtures('check_prometheus')
-def test_ui_prometheus(local_salt_client):
+def test_internal_ui_prometheus(local_salt_client, ctl_nodes_pillar):
IP = utils.get_monitoring_ip('stacklight_monitor_address')
+ protocol = 'http'
+ port = '15010'
+ url = "{}://{}:{}".format(protocol, IP, port)
result = local_salt_client.cmd(
- 'keystone:server',
+ ctl_nodes_pillar,
'cmd.run',
- ['curl http://{}:15010/graph 2>&1 | \
- grep Prometheus'.format(IP)],
+ ['curl {}/graph 2>&1 | \
+ grep Prometheus'.format(url)],
expr_form='pillar')
assert len(result[result.keys()[0]]) != 0, \
- 'Prometheus page is not reachable on {} from ctl nodes'.format(IP)
+ 'Internal Prometheus page is not reachable on {} ' \
+ 'from ctl nodes'.format(url)
@pytest.mark.usefixtures('check_prometheus')
-def test_ui_alert_manager(local_salt_client):
- IP = utils.get_monitoring_ip('stacklight_monitor_address')
+def test_public_ui_prometheus(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('cluster_public_host')
+ protocol = 'https'
+ port = '15010'
+ url = "{}://{}:{}".format(protocol, IP, port)
result = local_salt_client.cmd(
- 'keystone:server',
+ ctl_nodes_pillar,
'cmd.run',
- ['curl -s http://{}:15011/ | grep Alertmanager'.format(IP)],
+ ['curl {}/graph 2>&1 | \
+ grep Prometheus'.format(url)],
expr_form='pillar')
assert len(result[result.keys()[0]]) != 0, \
- 'AlertManager page is not reachable on {} from ctl nodes'.format(IP)
+ 'Public Prometheus page is not reachable on {} ' \
+ 'from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_prometheus')
+def test_internal_ui_alert_manager(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('stacklight_monitor_address')
+ protocol = 'http'
+ port = '15011'
+ url = "{}://{}:{}".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl -s {}/ | grep Alertmanager'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Internal AlertManager page is not reachable on {} ' \
+ 'from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_prometheus')
+def test_public_ui_alert_manager(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('cluster_public_host')
+ protocol = 'https'
+ port = '15011'
+ url = "{}://{}:{}".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl -s {}/ | grep Alertmanager'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Public AlertManager page is not reachable on {} ' \
+ 'from ctl nodes'.format(url)
@pytest.mark.usefixtures('check_grafana')
-def test_ui_grafana(local_salt_client):
+def test_internal_ui_grafana(local_salt_client, ctl_nodes_pillar):
IP = utils.get_monitoring_ip('stacklight_monitor_address')
+ protocol = 'http'
+ port = '15013'
+ url = "{}://{}:{}".format(protocol, IP, port)
result = local_salt_client.cmd(
- 'keystone:server',
+ ctl_nodes_pillar,
'cmd.run',
- ['curl http://{}:15013/login 2>&1 | grep Grafana'.format(IP)],
+ ['curl {}/login 2>&1 | grep Grafana'.format(url)],
expr_form='pillar')
assert len(result[result.keys()[0]]) != 0, \
- 'Grafana page is not reachable on {} from ctl nodes'.format(IP)
+ 'Internal Grafana page is not reachable on {} ' \
+ 'from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_grafana')
+def test_public_ui_grafana(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('cluster_public_host')
+ protocol = 'https'
+ port = '8084'
+ url = "{}://{}:{}".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl {}/login 2>&1 | grep Grafana'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Public Grafana page is not reachable on {} from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_alerta')
+def test_internal_ui_alerta(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('stacklight_monitor_address')
+ protocol = 'http'
+ port = '15017'
+ url = "{}://{}:{}".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl {}/ 2>&1 | \
+ grep Alerta'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Internal Alerta page is not reachable on {} from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_alerta')
+def test_public_ui_alerta(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('cluster_public_host')
+ protocol = 'https'
+ port = '15017'
+ url = "{}://{}:{}".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl {}/ 2>&1 | \
+ grep Alerta'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Public Alerta page is not reachable on {} from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_drivetrain')
+def test_public_ui_jenkins(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('cluster_public_host')
+ protocol = 'https'
+ port = '8081'
+ url = "{}://{}:{}".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl -k {}/ 2>&1 | \
+ grep Authentication'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Public Jenkins page is not reachable on {} from ctl nodes'.format(url)
+
+
+@pytest.mark.usefixtures('check_drivetrain')
+def test_public_ui_gerrit(local_salt_client, ctl_nodes_pillar):
+ IP = utils.get_monitoring_ip('cluster_public_host')
+ protocol = 'https'
+ port = '8070'
+ url = "{}://{}:{}".format(protocol, IP, port)
+ result = local_salt_client.cmd(
+ ctl_nodes_pillar,
+ 'cmd.run',
+ ['curl -k {}/ 2>&1 | \
+ grep "Gerrit Code Review"'.format(url)],
+ expr_form='pillar')
+ assert len(result[result.keys()[0]]) != 0, \
+ 'Public Gerrit page is not reachable on {} from ctl nodes'.format(url)