]>
git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/tests/test_grafana.py
7 from unittest
.mock
import patch
9 from requests
import RequestException
11 from ..controllers
.grafana
import Grafana
12 from ..grafana
import GrafanaRestClient
13 from ..settings
import Settings
14 from ..tests
import ControllerTestCase
, KVStoreMockMixin
17 class GrafanaTest(ControllerTestCase
, KVStoreMockMixin
):
19 def setup_server(cls
):
20 cls
.setup_controllers([Grafana
])
27 url
='http://localhost:3000',
32 Settings
.GRAFANA_API_URL
= url
34 Settings
.GRAFANA_API_USERNAME
= user
35 if password
is not None:
36 Settings
.GRAFANA_API_PASSWORD
= password
39 self
.server_settings()
40 self
._get
('/api/grafana/url')
41 self
.assertStatus(200)
42 self
.assertJsonBody({'instance': 'http://localhost:3000'})
44 @patch('dashboard.controllers.grafana.GrafanaRestClient.url_validation')
45 def test_validation_endpoint_returns(self
, url_validation
):
47 The point of this test is to see that `validation` is an active endpoint that returns a 200
50 url_validation
.return_value
= b
'404'
51 self
.server_settings()
52 self
._get
('/api/grafana/validation/foo')
53 self
.assertStatus(200)
54 self
.assertBody(b
'"404"')
56 def test_dashboards_unavailable_no_url(self
):
57 self
.server_settings(url
="")
58 self
._post
('/api/grafana/dashboards')
59 self
.assertStatus(500)
61 @patch('dashboard.controllers.grafana.GrafanaRestClient.push_dashboard')
62 def test_dashboards_unavailable_no_user(self
, pd
):
63 pd
.side_effect
= RequestException
64 self
.server_settings(user
="")
65 self
._post
('/api/grafana/dashboards')
66 self
.assertStatus(500)
68 def test_dashboards_unavailable_no_password(self
):
69 self
.server_settings(password
="")
70 self
._post
('/api/grafana/dashboards')
71 self
.assertStatus(500)
74 class GrafanaRestClientTest(unittest
.TestCase
, KVStoreMockMixin
):
76 'Accept': 'application/json',
77 'Content-Type': 'application/json',
79 payload
= json
.dumps({
86 Settings
.GRAFANA_API_URL
= 'https://foo/bar'
87 Settings
.GRAFANA_API_USERNAME
= 'xyz'
88 Settings
.GRAFANA_API_PASSWORD
= 'abc'
89 Settings
.GRAFANA_API_SSL_VERIFY
= True
91 def test_ssl_verify_url_validation(self
):
92 with
patch('requests.request') as mock_request
:
93 rest_client
= GrafanaRestClient()
94 rest_client
.url_validation('FOO', Settings
.GRAFANA_API_URL
)
95 mock_request
.assert_called_with('FOO', Settings
.GRAFANA_API_URL
,
98 def test_no_ssl_verify_url_validation(self
):
99 Settings
.GRAFANA_API_SSL_VERIFY
= False
100 with
patch('requests.request') as mock_request
:
101 rest_client
= GrafanaRestClient()
102 rest_client
.url_validation('BAR', Settings
.GRAFANA_API_URL
)
103 mock_request
.assert_called_with('BAR', Settings
.GRAFANA_API_URL
,
106 def test_ssl_verify_push_dashboard(self
):
107 with
patch('requests.post') as mock_request
:
108 rest_client
= GrafanaRestClient()
109 rest_client
.push_dashboard('foo')
110 mock_request
.assert_called_with(
111 Settings
.GRAFANA_API_URL
+ '/api/dashboards/db',
112 auth
=(Settings
.GRAFANA_API_USERNAME
,
113 Settings
.GRAFANA_API_PASSWORD
),
114 data
=self
.payload
, headers
=self
.headers
, verify
=True)
116 def test_no_ssl_verify_push_dashboard(self
):
117 Settings
.GRAFANA_API_SSL_VERIFY
= False
118 with
patch('requests.post') as mock_request
:
119 rest_client
= GrafanaRestClient()
120 rest_client
.push_dashboard('foo')
121 mock_request
.assert_called_with(
122 Settings
.GRAFANA_API_URL
+ '/api/dashboards/db',
123 auth
=(Settings
.GRAFANA_API_USERNAME
,
124 Settings
.GRAFANA_API_PASSWORD
),
125 data
=self
.payload
, headers
=self
.headers
, verify
=False)