]>
Commit | Line | Data |
---|---|---|
92f5a8d4 TL |
1 | import json |
2 | import unittest | |
3 | ||
4 | try: | |
5 | from mock import patch | |
6 | except ImportError: | |
7 | from unittest.mock import patch | |
8 | ||
9f95a23c TL |
9 | from requests import RequestException |
10 | ||
11fdf7f2 | 11 | from ..controllers.grafana import Grafana |
92f5a8d4 TL |
12 | from ..grafana import GrafanaRestClient |
13 | from ..settings import Settings | |
a4b75251 | 14 | from ..tests import ControllerTestCase, KVStoreMockMixin |
11fdf7f2 TL |
15 | |
16 | ||
9f95a23c | 17 | class GrafanaTest(ControllerTestCase, KVStoreMockMixin): |
11fdf7f2 TL |
18 | @classmethod |
19 | def setup_server(cls): | |
11fdf7f2 TL |
20 | cls.setup_controllers([Grafana]) |
21 | ||
9f95a23c TL |
22 | def setUp(self): |
23 | self.mock_kv_store() | |
24 | ||
25 | @staticmethod | |
81eedcae | 26 | def server_settings( |
81eedcae TL |
27 | url='http://localhost:3000', |
28 | user='admin', | |
29 | password='admin', | |
30 | ): | |
81eedcae | 31 | if url is not None: |
9f95a23c | 32 | Settings.GRAFANA_API_URL = url |
81eedcae | 33 | if user is not None: |
9f95a23c | 34 | Settings.GRAFANA_API_USERNAME = user |
81eedcae | 35 | if password is not None: |
9f95a23c | 36 | Settings.GRAFANA_API_PASSWORD = password |
81eedcae | 37 | |
11fdf7f2 | 38 | def test_url(self): |
81eedcae | 39 | self.server_settings() |
11fdf7f2 TL |
40 | self._get('/api/grafana/url') |
41 | self.assertStatus(200) | |
42 | self.assertJsonBody({'instance': 'http://localhost:3000'}) | |
43 | ||
9f95a23c TL |
44 | @patch('dashboard.controllers.grafana.GrafanaRestClient.url_validation') |
45 | def test_validation_endpoint_returns(self, url_validation): | |
46 | """ | |
47 | The point of this test is to see that `validation` is an active endpoint that returns a 200 | |
48 | status code. | |
49 | """ | |
50 | url_validation.return_value = b'404' | |
81eedcae | 51 | self.server_settings() |
11fdf7f2 | 52 | self._get('/api/grafana/validation/foo') |
9f95a23c TL |
53 | self.assertStatus(200) |
54 | self.assertBody(b'"404"') | |
81eedcae | 55 | |
33c7a0ef TL |
56 | @patch('dashboard.controllers.grafana.GrafanaRestClient.url_validation') |
57 | def test_validation_endpoint_fails(self, url_validation): | |
58 | url_validation.side_effect = RequestException | |
59 | self.server_settings() | |
60 | self._get('/api/grafana/validation/bar') | |
61 | self.assertStatus(400) | |
62 | self.assertJsonBody({'detail': '', 'code': 'Error', 'component': 'grafana'}) | |
63 | ||
9f95a23c TL |
64 | def test_dashboards_unavailable_no_url(self): |
65 | self.server_settings(url="") | |
81eedcae TL |
66 | self._post('/api/grafana/dashboards') |
67 | self.assertStatus(500) | |
9f95a23c TL |
68 | |
69 | @patch('dashboard.controllers.grafana.GrafanaRestClient.push_dashboard') | |
70 | def test_dashboards_unavailable_no_user(self, pd): | |
71 | pd.side_effect = RequestException | |
72 | self.server_settings(user="") | |
81eedcae TL |
73 | self._post('/api/grafana/dashboards') |
74 | self.assertStatus(500) | |
9f95a23c TL |
75 | |
76 | def test_dashboards_unavailable_no_password(self): | |
77 | self.server_settings(password="") | |
81eedcae TL |
78 | self._post('/api/grafana/dashboards') |
79 | self.assertStatus(500) | |
92f5a8d4 TL |
80 | |
81 | ||
82 | class GrafanaRestClientTest(unittest.TestCase, KVStoreMockMixin): | |
83 | headers = { | |
84 | 'Accept': 'application/json', | |
85 | 'Content-Type': 'application/json', | |
86 | } | |
87 | payload = json.dumps({ | |
88 | 'dashboard': 'foo', | |
89 | 'overwrite': True | |
90 | }) | |
91 | ||
92 | def setUp(self): | |
93 | self.mock_kv_store() | |
94 | Settings.GRAFANA_API_URL = 'https://foo/bar' | |
95 | Settings.GRAFANA_API_USERNAME = 'xyz' | |
96 | Settings.GRAFANA_API_PASSWORD = 'abc' | |
97 | Settings.GRAFANA_API_SSL_VERIFY = True | |
98 | ||
99 | def test_ssl_verify_url_validation(self): | |
100 | with patch('requests.request') as mock_request: | |
101 | rest_client = GrafanaRestClient() | |
102 | rest_client.url_validation('FOO', Settings.GRAFANA_API_URL) | |
103 | mock_request.assert_called_with('FOO', Settings.GRAFANA_API_URL, | |
104 | verify=True) | |
105 | ||
106 | def test_no_ssl_verify_url_validation(self): | |
107 | Settings.GRAFANA_API_SSL_VERIFY = False | |
108 | with patch('requests.request') as mock_request: | |
109 | rest_client = GrafanaRestClient() | |
110 | rest_client.url_validation('BAR', Settings.GRAFANA_API_URL) | |
111 | mock_request.assert_called_with('BAR', Settings.GRAFANA_API_URL, | |
112 | verify=False) | |
113 | ||
114 | def test_ssl_verify_push_dashboard(self): | |
115 | with patch('requests.post') as mock_request: | |
116 | rest_client = GrafanaRestClient() | |
117 | rest_client.push_dashboard('foo') | |
118 | mock_request.assert_called_with( | |
119 | Settings.GRAFANA_API_URL + '/api/dashboards/db', | |
120 | auth=(Settings.GRAFANA_API_USERNAME, | |
121 | Settings.GRAFANA_API_PASSWORD), | |
122 | data=self.payload, headers=self.headers, verify=True) | |
123 | ||
124 | def test_no_ssl_verify_push_dashboard(self): | |
125 | Settings.GRAFANA_API_SSL_VERIFY = False | |
126 | with patch('requests.post') as mock_request: | |
127 | rest_client = GrafanaRestClient() | |
128 | rest_client.push_dashboard('foo') | |
129 | mock_request.assert_called_with( | |
130 | Settings.GRAFANA_API_URL + '/api/dashboards/db', | |
131 | auth=(Settings.GRAFANA_API_USERNAME, | |
132 | Settings.GRAFANA_API_PASSWORD), | |
133 | data=self.payload, headers=self.headers, verify=False) |