Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
Core
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
mirrored_repos
HomeAssistant
Core
Commits
91799e2b
Unverified
Commit
91799e2b
authored
4 years ago
by
mdegat01
Committed by
GitHub
4 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Modified Influx tests to mock test queries with accurate output (#37315)
parent
98bcf4f2
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
tests/components/influxdb/test_sensor.py
+56
-40
56 additions, 40 deletions
tests/components/influxdb/test_sensor.py
with
56 additions
and
40 deletions
tests/components/influxdb/test_sensor.py
+
56
−
40
View file @
91799e2b
...
@@ -11,6 +11,8 @@ from voluptuous import Invalid
...
@@ -11,6 +11,8 @@ from voluptuous import Invalid
from
homeassistant.components.influxdb.const
import
(
from
homeassistant.components.influxdb.const
import
(
API_VERSION_2
,
API_VERSION_2
,
DEFAULT_API_VERSION
,
DEFAULT_API_VERSION
,
DEFAULT_BUCKET
,
DEFAULT_DATABASE
,
DOMAIN
,
DOMAIN
,
TEST_QUERY_V1
,
TEST_QUERY_V1
,
TEST_QUERY_V2
,
TEST_QUERY_V2
,
...
@@ -75,24 +77,6 @@ def mock_client_fixture(request):
...
@@ -75,24 +77,6 @@ def mock_client_fixture(request):
yield
client
yield
client
@pytest.fixture
(
autouse
=
True
)
def
mock_influx_platform
():
"""
Mock the influx client and queue in the main platform.
Successful sensor setup is really independent of the main platform.
But since its one integration there is an internal dependency.
Mocking the client library there prevents failures and mocking the queue
to return `None` on get makes the listener shutdown immediately after initialization.
"""
with
patch
(
f
"
{
INFLUXDB_PATH
}
.InfluxDBClient
"
)
as
mock_v1_client
,
patch
(
f
"
{
INFLUXDB_PATH
}
.InfluxDBClientV2
"
)
as
mock_v2_client
,
patch
(
f
"
{
INFLUXDB_PATH
}
.queue.Queue.get
"
,
return_value
=
None
)
as
queue_get
:
yield
(
mock_v1_client
,
mock_v2_client
,
queue_get
)
@pytest.fixture
(
autouse
=
True
,
scope
=
"
module
"
)
@pytest.fixture
(
autouse
=
True
,
scope
=
"
module
"
)
def
mock_client_close
():
def
mock_client_close
():
"""
Mock close method of clients at module scope.
"""
"""
Mock close method of clients at module scope.
"""
...
@@ -108,6 +92,12 @@ def _make_v1_resultset(*args):
...
@@ -108,6 +92,12 @@ def _make_v1_resultset(*args):
yield
{
"
value
"
:
arg
}
yield
{
"
value
"
:
arg
}
def
_make_v1_databases_resultset
():
"""
Create a mock V1
'
show databases
'
resultset.
"""
for
name
in
[
DEFAULT_DATABASE
,
"
db2
"
]:
yield
{
"
name
"
:
name
}
def
_make_v2_resultset
(
*
args
):
def
_make_v2_resultset
(
*
args
):
"""
Create a mock V2 resultset.
"""
"""
Create a mock V2 resultset.
"""
tables
=
[]
tables
=
[]
...
@@ -120,7 +110,18 @@ def _make_v2_resultset(*args):
...
@@ -120,7 +110,18 @@ def _make_v2_resultset(*args):
return
tables
return
tables
def
_set_query_mock_v1
(
mock_influx_client
,
return_value
=
None
,
side_effect
=
None
):
def
_make_v2_buckets_resultset
():
"""
Create a mock V2
'
buckets()
'
resultset.
"""
records
=
[]
for
name
in
[
DEFAULT_BUCKET
,
"
bucket2
"
]:
records
.
append
(
Record
({
"
name
"
:
name
}))
return
[
Table
(
records
)]
def
_set_query_mock_v1
(
mock_influx_client
,
return_value
=
None
,
query_exception
=
None
,
side_effect
=
None
):
"""
Set return value or side effect for the V1 client.
"""
"""
Set return value or side effect for the V1 client.
"""
query_api
=
mock_influx_client
.
return_value
.
query
query_api
=
mock_influx_client
.
return_value
.
query
if
side_effect
:
if
side_effect
:
...
@@ -133,10 +134,14 @@ def _set_query_mock_v1(mock_influx_client, return_value=None, side_effect=None):
...
@@ -133,10 +134,14 @@ def _set_query_mock_v1(mock_influx_client, return_value=None, side_effect=None):
def
get_return_value
(
query
,
**
kwargs
):
def
get_return_value
(
query
,
**
kwargs
):
"""
Return mock for test query, return value otherwise.
"""
"""
Return mock for test query, return value otherwise.
"""
if
query
==
TEST_QUERY_V1
:
if
query
==
TEST_QUERY_V1
:
return
MagicMock
()
points
=
_make_v1_databases_resultset
()
else
:
if
query_exception
:
raise
query_exception
points
=
return_value
query_output
=
MagicMock
()
query_output
=
MagicMock
()
query_output
.
get_points
.
return_value
=
return_value
query_output
.
get_points
.
return_value
=
points
return
query_output
return
query_output
query_api
.
side_effect
=
get_return_value
query_api
.
side_effect
=
get_return_value
...
@@ -144,7 +149,9 @@ def _set_query_mock_v1(mock_influx_client, return_value=None, side_effect=None):
...
@@ -144,7 +149,9 @@ def _set_query_mock_v1(mock_influx_client, return_value=None, side_effect=None):
return
query_api
return
query_api
def
_set_query_mock_v2
(
mock_influx_client
,
return_value
=
None
,
side_effect
=
None
):
def
_set_query_mock_v2
(
mock_influx_client
,
return_value
=
None
,
query_exception
=
None
,
side_effect
=
None
):
"""
Set return value or side effect for the V2 client.
"""
"""
Set return value or side effect for the V2 client.
"""
query_api
=
mock_influx_client
.
return_value
.
query_api
.
return_value
.
query
query_api
=
mock_influx_client
.
return_value
.
query_api
.
return_value
.
query
if
side_effect
:
if
side_effect
:
...
@@ -153,7 +160,17 @@ def _set_query_mock_v2(mock_influx_client, return_value=None, side_effect=None):
...
@@ -153,7 +160,17 @@ def _set_query_mock_v2(mock_influx_client, return_value=None, side_effect=None):
if
return_value
is
None
:
if
return_value
is
None
:
return_value
=
[]
return_value
=
[]
query_api
.
return_value
=
return_value
def
get_return_value
(
query
):
"""
Return buckets list for test query, return value otherwise.
"""
if
query
==
TEST_QUERY_V2
:
return
_make_v2_buckets_resultset
()
if
query_exception
:
raise
query_exception
return
return_value
query_api
.
side_effect
=
get_return_value
return
query_api
return
query_api
...
@@ -161,7 +178,7 @@ def _set_query_mock_v2(mock_influx_client, return_value=None, side_effect=None):
...
@@ -161,7 +178,7 @@ def _set_query_mock_v2(mock_influx_client, return_value=None, side_effect=None):
async
def
_setup
(
hass
,
config_ext
,
queries
,
expected_sensors
):
async
def
_setup
(
hass
,
config_ext
,
queries
,
expected_sensors
):
"""
Create client and test expected sensors.
"""
"""
Create client and test expected sensors.
"""
config
=
{
config
=
{
DOMAIN
:
{}
,
DOMAIN
:
config_ext
,
sensor
.
DOMAIN
:
{
"
platform
"
:
DOMAIN
},
sensor
.
DOMAIN
:
{
"
platform
"
:
DOMAIN
},
}
}
influx_config
=
config
[
sensor
.
DOMAIN
]
influx_config
=
config
[
sensor
.
DOMAIN
]
...
@@ -181,20 +198,21 @@ async def _setup(hass, config_ext, queries, expected_sensors):
...
@@ -181,20 +198,21 @@ async def _setup(hass, config_ext, queries, expected_sensors):
@pytest.mark.parametrize
(
@pytest.mark.parametrize
(
"
mock_client, config_ext, queries
"
,
"
mock_client, config_ext, queries
, set_query_mock
"
,
[
[
(
DEFAULT_API_VERSION
,
BASE_V1_CONFIG
,
BASE_V1_QUERY
),
(
DEFAULT_API_VERSION
,
BASE_V1_CONFIG
,
BASE_V1_QUERY
,
_set_query_mock_v1
),
(
API_VERSION_2
,
BASE_V2_CONFIG
,
BASE_V2_QUERY
),
(
API_VERSION_2
,
BASE_V2_CONFIG
,
BASE_V2_QUERY
,
_set_query_mock_v2
),
],
],
indirect
=
[
"
mock_client
"
],
indirect
=
[
"
mock_client
"
],
)
)
async
def
test_minimal_config
(
hass
,
mock_client
,
config_ext
,
queries
):
async
def
test_minimal_config
(
hass
,
mock_client
,
config_ext
,
queries
,
set_query_mock
):
"""
Test the minimal config and defaults.
"""
"""
Test the minimal config and defaults.
"""
set_query_mock
(
mock_client
)
await
_setup
(
hass
,
config_ext
,
queries
,
[
"
sensor.test
"
])
await
_setup
(
hass
,
config_ext
,
queries
,
[
"
sensor.test
"
])
@pytest.mark.parametrize
(
@pytest.mark.parametrize
(
"
mock_client, config_ext, queries
"
,
"
mock_client, config_ext, queries
, set_query_mock
"
,
[
[
(
(
DEFAULT_API_VERSION
,
DEFAULT_API_VERSION
,
...
@@ -207,6 +225,8 @@ async def test_minimal_config(hass, mock_client, config_ext, queries):
...
@@ -207,6 +225,8 @@ async def test_minimal_config(hass, mock_client, config_ext, queries):
"
password
"
:
"
pass
"
,
"
password
"
:
"
pass
"
,
"
database
"
:
"
db
"
,
"
database
"
:
"
db
"
,
"
verify_ssl
"
:
"
true
"
,
"
verify_ssl
"
:
"
true
"
,
},
{
"
queries
"
:
[
"
queries
"
:
[
{
{
"
name
"
:
"
test
"
,
"
name
"
:
"
test
"
,
...
@@ -220,7 +240,7 @@ async def test_minimal_config(hass, mock_client, config_ext, queries):
...
@@ -220,7 +240,7 @@ async def test_minimal_config(hass, mock_client, config_ext, queries):
}
}
],
],
},
},
{}
,
_set_query_mock_v1
,
),
),
(
(
API_VERSION_2
,
API_VERSION_2
,
...
@@ -233,6 +253,8 @@ async def test_minimal_config(hass, mock_client, config_ext, queries):
...
@@ -233,6 +253,8 @@ async def test_minimal_config(hass, mock_client, config_ext, queries):
"
token
"
:
"
token
"
,
"
token
"
:
"
token
"
,
"
organization
"
:
"
org
"
,
"
organization
"
:
"
org
"
,
"
bucket
"
:
"
bucket
"
,
"
bucket
"
:
"
bucket
"
,
},
{
"
queries_flux
"
:
[
"
queries_flux
"
:
[
{
{
"
name
"
:
"
test
"
,
"
name
"
:
"
test
"
,
...
@@ -246,13 +268,14 @@ async def test_minimal_config(hass, mock_client, config_ext, queries):
...
@@ -246,13 +268,14 @@ async def test_minimal_config(hass, mock_client, config_ext, queries):
}
}
],
],
},
},
{}
,
_set_query_mock_v2
,
),
),
],
],
indirect
=
[
"
mock_client
"
],
indirect
=
[
"
mock_client
"
],
)
)
async
def
test_full_config
(
hass
,
mock_client
,
config_ext
,
queries
):
async
def
test_full_config
(
hass
,
mock_client
,
config_ext
,
queries
,
set_query_mock
):
"""
Test the full config.
"""
"""
Test the full config.
"""
set_query_mock
(
mock_client
)
await
_setup
(
hass
,
config_ext
,
queries
,
[
"
sensor.test
"
])
await
_setup
(
hass
,
config_ext
,
queries
,
[
"
sensor.test
"
])
...
@@ -403,14 +426,7 @@ async def test_error_querying_influx(
...
@@ -403,14 +426,7 @@ async def test_error_querying_influx(
hass
,
caplog
,
mock_client
,
config_ext
,
queries
,
set_query_mock
,
query_exception
hass
,
caplog
,
mock_client
,
config_ext
,
queries
,
set_query_mock
,
query_exception
):
):
"""
Test behavior of sensor when influx returns error.
"""
"""
Test behavior of sensor when influx returns error.
"""
set_query_mock
(
mock_client
,
query_exception
=
query_exception
)
def
mock_query_error
(
query
,
**
kwargs
):
"""
Throw error for any query besides test query.
"""
if
query
in
[
TEST_QUERY_V1
,
TEST_QUERY_V2
]:
return
MagicMock
()
raise
query_exception
set_query_mock
(
mock_client
,
side_effect
=
mock_query_error
)
sensors
=
await
_setup
(
hass
,
config_ext
,
queries
,
[
"
sensor.test
"
])
sensors
=
await
_setup
(
hass
,
config_ext
,
queries
,
[
"
sensor.test
"
])
assert
sensors
[
0
].
state
==
STATE_UNKNOWN
assert
sensors
[
0
].
state
==
STATE_UNKNOWN
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment