1+ import re
12import unittest
23from unittest .mock import patch
34
5+ from pytest_httpserver import HTTPServer
6+
47from influxdb_client_3 import InfluxDBClient3 , WritePrecision , DefaultWriteOptions , Point , WriteOptions , WriteType
58from influxdb_client_3 .exceptions import InfluxDB3ClientQueryError
9+ from influxdb_client_3 .write_client .rest import ApiException
610from tests .util import asyncio_run
711from tests .util .mocks import ConstantFlightServer , ConstantData , ErrorFlightServer
812
913
14+ def http_server ():
15+ httpserver = HTTPServer ()
16+ httpserver .start ()
17+ return httpserver
18+
19+
1020class TestInfluxDBClient3 (unittest .TestCase ):
1121
1222 @patch ('influxdb_client_3._InfluxDBClient' )
@@ -22,6 +32,11 @@ def setUp(self, mock_query_api, mock_write_api, mock_influx_db_client):
2232 database = "my_db" ,
2333 token = "my_token"
2434 )
35+ self .http_server = http_server ()
36+
37+ def tearDown (self ):
38+ if self .http_server is not None :
39+ self .http_server .stop ()
2540
2641 def test_init (self ):
2742 self .assertEqual (self .client ._org , "my_org" )
@@ -226,6 +241,49 @@ async def test_async_query_with_arrow_error(self):
226241 await c .query_async ("SELECT * FROM my_data" )
227242 self .assertIn ("Error while executing query" , str (err .exception ))
228243
244+ def test_get_version_header_success (self ):
245+ server = self .http_server
246+ server .expect_request (re .compile (".*" )).respond_with_json (
247+ headers = {"X-Influxdb-Version" : "1.8.2" },
248+ response_json = {"version" : "3.0" }
249+ )
250+ version = InfluxDBClient3 (
251+ host = f'http://{ server .host } :{ server .port } ' , org = "ORG" , database = "DB" , token = "TOKEN"
252+ ).get_server_version ()
253+ assert version == "1.8.2"
254+
255+ def test_get_version_in_body_success (self ):
256+ server = self .http_server
257+ server .expect_request ('/ping' ).respond_with_json (
258+ response_json = {"version" : "3.0" },
259+ )
260+ version = InfluxDBClient3 (
261+ host = f'http://{ server .host } :{ server .port } ' , org = "ORG" , database = "DB" , token = "TOKEN"
262+ ).get_server_version ()
263+ assert version == "3.0"
264+
265+ def test_get_version_empty (self ):
266+ server = self .http_server
267+ server .expect_request ("/ping" ).respond_with_data (
268+ headers = {"abc" : "1.8.2" },
269+ )
270+
271+ version = InfluxDBClient3 (
272+ host = f'http://{ server .host } :{ server .port } ' , org = "ORG" , database = "DB" , token = "TOKEN"
273+ ).get_server_version ()
274+ assert version is None
275+
276+ def test_get_version_fail (self ):
277+ server = self .http_server
278+ server .expect_request ("/ping" ).respond_with_json (
279+ response_json = {"error" : "error" },
280+ status = 400
281+ )
282+ with self .assertRaises (ApiException ):
283+ InfluxDBClient3 (
284+ host = f'http://{ server .host } :{ server .port } ' , org = "ORG" , database = "DB" , token = "TOKEN"
285+ ).get_server_version ()
286+
229287
230288if __name__ == '__main__' :
231289 unittest .main ()
0 commit comments