system-config/testinfra/test_grafana.py
Clark Boylan cf05201b70 Take screenshots of all grafana dashboards
In our system-config-run-grafana job we were not taking screenshots of
the dashboard pages. The project-config job does do this. Port over the
listing of dashboards and screenshots of each dashboard into
system-config so that we can be more confident in updating the grafana
container image.

In particular we are concerned about CORS issues and this should help us
confirm that data loads from external sources (graphite) properly.

Change-Id: Ib9b597fd724219bd8d3155515d954a44589b0b07
2025-01-24 09:26:51 -08:00

55 lines
2.0 KiB
Python

# Copyright 2020 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from util import take_screenshots
import json
testinfra_hosts = ['grafana01.opendev.org']
def test_grafana_container_listening(host):
grafana = host.socket("tcp://127.0.0.1:3000")
assert grafana.is_listening
def test_grafana_proxy(host):
cmd = host.run('curl --insecure '
'--resolve grafana.opendev.org:443:127.0.0.1 '
'https://grafana.opendev.org')
assert '<title>Grafana</title>' in cmd.stdout
def test_grafana_api_denial(host):
cmd = host.run('curl -s --insecure '
'--resolve grafana.opendev.org:443:127.0.0.1 '
'-XPOST -H "Accept: application/json" '
'-H "Content-Type: application/json" '
'-d \'{"dashboard": {}}\' '
'https://grafana.opendev.org/api/snapshots')
assert '403 Forbidden' in cmd.stdout
def test_grafana_screenshots(host):
shots = [
('https://localhost/', None, 'grafana-main-page.png'),
('https://localhost/dashboards', None, 'grafana-dashboards-page.png')
]
cmd = host.run("curl -s --insecure "
"--resolve grafana.opendev.org:443:127.0.0.1 "
"https://grafana.opendev.org/api/search")
j = json.loads(cmd.stdout)
for dashboard in j:
url = dashboard["url"]
name = dashboard["uri"].split("/")[-1]
shots.append(("https://localhost" + url, None, name + '.png'))
take_screenshots(host, shots)