mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-22 11:13:34 +00:00
Run tests with caplog in a single worker (#1304)
This commit is contained in:
parent
2bda54fcb1
commit
412c65c428
@ -107,7 +107,9 @@ markers = [
|
|||||||
asyncio_mode = "auto"
|
asyncio_mode = "auto"
|
||||||
asyncio_default_fixture_loop_scope = "function"
|
asyncio_default_fixture_loop_scope = "function"
|
||||||
timeout = 10
|
timeout = 10
|
||||||
addopts = "--disable-socket --allow-unix-socket"
|
# dist=loadgroup enables grouping of tests into single worker.
|
||||||
|
# required as caplog doesn't play nicely with multiple workers.
|
||||||
|
addopts = "--disable-socket --allow-unix-socket --dist=loadgroup"
|
||||||
|
|
||||||
[tool.doc8]
|
[tool.doc8]
|
||||||
paths = ["docs"]
|
paths = ["docs"]
|
||||||
|
@ -7,6 +7,7 @@ from ...device_fixtures import device_iot
|
|||||||
|
|
||||||
|
|
||||||
@device_iot
|
@device_iot
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
def test_schedule(dev: Device, caplog: pytest.LogCaptureFixture):
|
def test_schedule(dev: Device, caplog: pytest.LogCaptureFixture):
|
||||||
schedule = dev.modules.get(Module.IotSchedule)
|
schedule = dev.modules.get(Module.IotSchedule)
|
||||||
assert schedule
|
assert schedule
|
||||||
|
@ -90,6 +90,7 @@ async def test_update_available_without_cloud(dev: SmartDevice):
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
@pytest.mark.requires_dummy
|
@pytest.mark.requires_dummy
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_firmware_update(
|
async def test_firmware_update(
|
||||||
dev: SmartDevice,
|
dev: SmartDevice,
|
||||||
mocker: MockerFixture,
|
mocker: MockerFixture,
|
||||||
|
@ -137,6 +137,7 @@ async def test_thermostat_mode(dev, mode, states, frost_protection):
|
|||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_thermostat_mode_warnings(dev, mode, states, msg, caplog):
|
async def test_thermostat_mode_warnings(dev, mode, states, msg, caplog):
|
||||||
"""Test thermostat modes that should log a warning."""
|
"""Test thermostat modes that should log a warning."""
|
||||||
temp_module: TemperatureControl = dev.modules["TemperatureControl"]
|
temp_module: TemperatureControl = dev.modules["TemperatureControl"]
|
||||||
|
@ -216,6 +216,7 @@ async def test_send(mocker, status_code, error_code, inner_error_code, expectati
|
|||||||
assert "result" in res
|
assert "result" in res
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_unencrypted_response(mocker, caplog):
|
async def test_unencrypted_response(mocker, caplog):
|
||||||
host = "127.0.0.1"
|
host = "127.0.0.1"
|
||||||
mock_aes_device = MockAesDevice(host, 200, 0, 0, do_not_encrypt_response=True)
|
mock_aes_device = MockAesDevice(host, 200, 0, 0, do_not_encrypt_response=True)
|
||||||
|
@ -232,6 +232,7 @@ async def test_set_color_temp_transition(dev: IotBulb, mocker):
|
|||||||
|
|
||||||
|
|
||||||
@variable_temp_iot
|
@variable_temp_iot
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_unknown_temp_range(dev: IotBulb, monkeypatch, caplog):
|
async def test_unknown_temp_range(dev: IotBulb, monkeypatch, caplog):
|
||||||
monkeypatch.setitem(dev._sys_info, "model", "unknown bulb")
|
monkeypatch.setitem(dev._sys_info, "model", "unknown bulb")
|
||||||
light = dev.modules.get(Module.Light)
|
light = dev.modules.get(Module.Light)
|
||||||
|
@ -136,6 +136,7 @@ async def test_child_time(dev: Device, freezer: FrozenDateTimeFactory):
|
|||||||
assert child.time != fallback_time
|
assert child.time != fallback_time
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_child_device_type_unknown(caplog):
|
async def test_child_device_type_unknown(caplog):
|
||||||
"""Test for device type when category is unknown."""
|
"""Test for device type when category is unknown."""
|
||||||
|
|
||||||
|
@ -109,6 +109,7 @@ async def test_connect_custom_port(discovery_mock, mocker, custom_port):
|
|||||||
assert dev.port == custom_port or dev.port == default_port
|
assert dev.port == custom_port or dev.port == default_port
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_connect_logs_connect_time(
|
async def test_connect_logs_connect_time(
|
||||||
discovery_mock,
|
discovery_mock,
|
||||||
caplog: pytest.LogCaptureFixture,
|
caplog: pytest.LogCaptureFixture,
|
||||||
@ -192,6 +193,7 @@ async def test_device_types(dev: Device):
|
|||||||
assert dev.device_type == res
|
assert dev.device_type == res
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_device_class_from_unknown_family(caplog):
|
async def test_device_class_from_unknown_family(caplog):
|
||||||
"""Verify that unknown SMART devices yield a warning and fallback to SmartDevice."""
|
"""Verify that unknown SMART devices yield a warning and fallback to SmartDevice."""
|
||||||
dummy_name = "SMART.foo"
|
dummy_name = "SMART.foo"
|
||||||
|
@ -119,6 +119,7 @@ async def test_type_detection_lightstrip(dev: Device):
|
|||||||
assert d.device_type == DeviceType.LightStrip
|
assert d.device_type == DeviceType.LightStrip
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_type_unknown(caplog):
|
async def test_type_unknown(caplog):
|
||||||
invalid_info = {"system": {"get_sysinfo": {"type": "nosuchtype"}}}
|
invalid_info = {"system": {"get_sysinfo": {"type": "nosuchtype"}}}
|
||||||
assert Discover._get_device_class(invalid_info) is IotPlug
|
assert Discover._get_device_class(invalid_info) is IotPlug
|
||||||
@ -586,6 +587,7 @@ async def test_do_discover_external_cancel(mocker):
|
|||||||
await dp.wait_for_discovery_to_complete()
|
await dp.wait_for_discovery_to_complete()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_discovery_redaction(discovery_mock, caplog: pytest.LogCaptureFixture):
|
async def test_discovery_redaction(discovery_mock, caplog: pytest.LogCaptureFixture):
|
||||||
"""Test query sensitive info redaction."""
|
"""Test query sensitive info redaction."""
|
||||||
mac = "12:34:56:78:9A:BC"
|
mac = "12:34:56:78:9A:BC"
|
||||||
|
@ -127,6 +127,7 @@ async def test_feature_action(mocker):
|
|||||||
mock_call_action.assert_called()
|
mock_call_action.assert_called()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_feature_choice_list(dummy_feature, caplog, mocker: MockerFixture):
|
async def test_feature_choice_list(dummy_feature, caplog, mocker: MockerFixture):
|
||||||
"""Test the choice feature type."""
|
"""Test the choice feature type."""
|
||||||
dummy_feature.type = Feature.Type.Choice
|
dummy_feature.type = Feature.Type.Choice
|
||||||
|
@ -184,6 +184,7 @@ async def test_protocol_reconnect(mocker, retry_count, protocol_class, transport
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("log_level", [logging.WARNING, logging.DEBUG])
|
@pytest.mark.parametrize("log_level", [logging.WARNING, logging.DEBUG])
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_protocol_logging(mocker, caplog, log_level):
|
async def test_protocol_logging(mocker, caplog, log_level):
|
||||||
caplog.set_level(log_level)
|
caplog.set_level(log_level)
|
||||||
logging.getLogger("kasa").setLevel(log_level)
|
logging.getLogger("kasa").setLevel(log_level)
|
||||||
|
@ -307,6 +307,7 @@ async def test_protocol_handles_cancellation_during_connection(
|
|||||||
ids=("_deprecated_TPLinkSmartHomeProtocol", "IotProtocol-XorTransport"),
|
ids=("_deprecated_TPLinkSmartHomeProtocol", "IotProtocol-XorTransport"),
|
||||||
)
|
)
|
||||||
@pytest.mark.parametrize("log_level", [logging.WARNING, logging.DEBUG])
|
@pytest.mark.parametrize("log_level", [logging.WARNING, logging.DEBUG])
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_protocol_logging(
|
async def test_protocol_logging(
|
||||||
mocker, caplog, log_level, protocol_class, transport_class, encryption_class
|
mocker, caplog, log_level, protocol_class, transport_class, encryption_class
|
||||||
):
|
):
|
||||||
@ -685,6 +686,7 @@ def test_deprecated_protocol():
|
|||||||
|
|
||||||
|
|
||||||
@device_iot
|
@device_iot
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_iot_queries_redaction(dev: IotDevice, caplog: pytest.LogCaptureFixture):
|
async def test_iot_queries_redaction(dev: IotDevice, caplog: pytest.LogCaptureFixture):
|
||||||
"""Test query sensitive info redaction."""
|
"""Test query sensitive info redaction."""
|
||||||
if isinstance(dev.protocol._transport, FakeIotTransport):
|
if isinstance(dev.protocol._transport, FakeIotTransport):
|
||||||
|
@ -27,6 +27,7 @@ from .conftest import (
|
|||||||
|
|
||||||
@device_smart
|
@device_smart
|
||||||
@pytest.mark.requires_dummy
|
@pytest.mark.requires_dummy
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_try_get_response(dev: SmartDevice, caplog):
|
async def test_try_get_response(dev: SmartDevice, caplog):
|
||||||
mock_response: dict = {
|
mock_response: dict = {
|
||||||
"get_device_info": SmartErrorCode.PARAMS_ERROR,
|
"get_device_info": SmartErrorCode.PARAMS_ERROR,
|
||||||
@ -143,6 +144,7 @@ async def test_update_module_queries(dev: SmartDevice, mocker: MockerFixture):
|
|||||||
|
|
||||||
|
|
||||||
@device_smart
|
@device_smart
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_update_module_update_delays(
|
async def test_update_module_update_delays(
|
||||||
dev: SmartDevice,
|
dev: SmartDevice,
|
||||||
mocker: MockerFixture,
|
mocker: MockerFixture,
|
||||||
@ -203,6 +205,7 @@ async def test_update_module_update_delays(
|
|||||||
],
|
],
|
||||||
)
|
)
|
||||||
@device_smart
|
@device_smart
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_update_module_query_errors(
|
async def test_update_module_query_errors(
|
||||||
dev: SmartDevice,
|
dev: SmartDevice,
|
||||||
mocker: MockerFixture,
|
mocker: MockerFixture,
|
||||||
|
@ -54,6 +54,7 @@ async def test_smart_device_errors(dummy_protocol, mocker, error_code):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("error_code", [-13333, 13333])
|
@pytest.mark.parametrize("error_code", [-13333, 13333])
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_smart_device_unknown_errors(
|
async def test_smart_device_unknown_errors(
|
||||||
dummy_protocol, mocker, error_code, caplog: pytest.LogCaptureFixture
|
dummy_protocol, mocker, error_code, caplog: pytest.LogCaptureFixture
|
||||||
):
|
):
|
||||||
@ -417,6 +418,7 @@ async def test_incomplete_list(mocker, caplog):
|
|||||||
|
|
||||||
|
|
||||||
@device_smart
|
@device_smart
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_smart_queries_redaction(
|
async def test_smart_queries_redaction(
|
||||||
dev: SmartDevice, caplog: pytest.LogCaptureFixture
|
dev: SmartDevice, caplog: pytest.LogCaptureFixture
|
||||||
):
|
):
|
||||||
|
@ -175,6 +175,7 @@ async def test_send(mocker):
|
|||||||
assert "result" in res
|
assert "result" in res
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.xdist_group(name="caplog")
|
||||||
async def test_unencrypted_response(mocker, caplog):
|
async def test_unencrypted_response(mocker, caplog):
|
||||||
host = "127.0.0.1"
|
host = "127.0.0.1"
|
||||||
mock_ssl_aes_device = MockSslAesDevice(host, do_not_encrypt_response=True)
|
mock_ssl_aes_device = MockSslAesDevice(host, do_not_encrypt_response=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user