Skip to content

Commit 1052363

Browse files
peekjef72amotl
authored andcommitted
test datasource part
1 parent ca00103 commit 1052363

File tree

1 file changed

+143
-0
lines changed

1 file changed

+143
-0
lines changed

test/elements/test_datasource.py

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
import json
2+
import unittest
3+
4+
import requests_mock
5+
6+
from grafana_client import GrafanaApi
7+
from grafana_client.client import (
8+
GrafanaBadInputError,
9+
GrafanaClientError,
10+
GrafanaServerError,
11+
GrafanaUnauthorizedError,
12+
)
13+
14+
15+
class DatasourceTestCase(unittest.TestCase):
16+
def setUp(self):
17+
self.grafana = GrafanaApi(("admin", "admin"), host="localhost", url_path_prefix="", protocol="http")
18+
19+
20+
@requests_mock.Mocker()
21+
def test_find_datasource(self, m):
22+
m.get(
23+
"http://localhost/api/datasources/name/Prometheus",
24+
json={
25+
"id":1,
26+
"uid":"h8KkCLt7z",
27+
"orgId":1,
28+
"name":"Prometheus",
29+
"type":"prometheus",
30+
"typeName":"Prometheus",
31+
"typeLogoUrl":"public/app/plugins/datasource/prometheus/img/prometheus_logo.svg",
32+
"access":"proxy",
33+
"url":"http://localhost:9090",
34+
"password":"",
35+
"user":"",
36+
"database":"",
37+
"basicAuth": False,
38+
"isDefault": True,
39+
"jsonData":{
40+
"httpMethod":"POST"
41+
},
42+
"readOnly": False
43+
}
44+
)
45+
46+
result = self.grafana.datasource.find_datasource('Prometheus')
47+
self.assertEqual(result["type"], 'prometheus')
48+
49+
@requests_mock.Mocker()
50+
def test_find_datasource_not_existing(self, m):
51+
m.get(
52+
"http://localhost/api/datasources/name/it_doesnot_exist",
53+
json= {"message": "Data source not found"},
54+
status_code=400
55+
)
56+
57+
with self.assertRaises(GrafanaBadInputError):
58+
result = self.grafana.datasource.find_datasource('it_doesnot_exist')
59+
60+
61+
@requests_mock.Mocker()
62+
def test_get_datasource_id_by_name(self, m):
63+
m.get(
64+
"http://localhost/api/datasources/id/Prometheus",
65+
json={"id": 1}
66+
)
67+
68+
result = self.grafana.datasource.get_datasource_id_by_name('Prometheus')
69+
self.assertEqual(result["id"], 1)
70+
71+
72+
@requests_mock.Mocker()
73+
def test_list_datasources(self, m):
74+
m.get(
75+
"http://localhost/api/datasources",
76+
json=[
77+
{
78+
"id":1,
79+
"uid":"h8KkCLt7z",
80+
"orgId":1,
81+
"name":"Prometheus",
82+
"type":"prometheus",
83+
"typeName":"Prometheus",
84+
"typeLogoUrl":"public/app/plugins/datasource/prometheus/img/prometheus_logo.svg",
85+
"access":"proxy",
86+
"url":"http://localhost:9090",
87+
"password":"",
88+
"user":"",
89+
"database":"",
90+
"basicAuth": False,
91+
"isDefault": True,
92+
"jsonData":{
93+
"httpMethod":"POST"
94+
},
95+
"readOnly": False
96+
}
97+
],
98+
)
99+
100+
result = self.grafana.datasource.list_datasources()
101+
self.assertEqual(result[0]["type"], 'prometheus')
102+
self.assertEqual(len(result), 1)
103+
104+
@requests_mock.Mocker()
105+
def test_get_datasource_proxy_data(self, m):
106+
# http://localhost:3000/api/datasources/proxy/1/api/v1/query_range?query=up%7binstance%3d%22localhost:9090%22%7d&start=1644164339&end=1644164639&step=60
107+
m.get(
108+
"http://localhost/api/datasources/proxy/1/api/v1/query_range",
109+
json={
110+
"status": "success",
111+
"data": {
112+
"resultType": "matrix",
113+
"result":[
114+
{
115+
"metric":{
116+
"__name__":"up",
117+
"instance":"localhost:9090",
118+
"job":"prometheus"
119+
},
120+
"values":[
121+
[1644164339,"1"],
122+
[1644164399,"1"],
123+
[1644164459,"1"],
124+
[1644164519,"1"],
125+
[1644164579,"1"],
126+
[1644164639,"1"]
127+
]
128+
}
129+
]
130+
}
131+
}
132+
)
133+
result = self.grafana.datasource.get_datasource_proxy_data(
134+
1, # datasource_id
135+
query_type='query_range',
136+
expr="up{instance=\"localhost:9090\"}",
137+
start=1644164339,
138+
end=1644164639,
139+
step=60,
140+
)
141+
self.assertEqual(result["status"], 'success')
142+
self.assertEqual(result["data"]["result"][0]["metric"]["job"], 'prometheus')
143+
self.assertEqual(len(result["data"]["result"][0]["values"]), 6)

0 commit comments

Comments
 (0)