mqtt-tools / pytest-mqtt

pytest-mqtt supports testing systems based on MQTT.
MIT License
9 stars 2 forks source link

[paho-mqtt] DeprecationWarning: Callback API version 1 is deprecated, update to latest version #24

Open parrotrueper opened 5 days ago

parrotrueper commented 5 days ago

Given the following test

import pytest
from pytest_mqtt.model import MqttMessage

@pytest.fixture
def configure_capmqtt_decode_utf8(pytestconfig):
    pytestconfig.option.capmqtt_decode_utf8 = True

def test_basic_submit_text_receive_text_config(configure_capmqtt_decode_utf8,  capmqtt):
    """
    Basic submit/receive roundtrip, with text payload (`str`).

    By using the global `capmqtt_decode_utf8` config option, the payloads
    will be received as `str`, after decoding them from `utf-8`.
    """

    # Submit two MQTT messages.
    capmqtt.publish(topic="foo", payload="bar")
    capmqtt.publish(topic="baz", payload="qux")

    # Demonstrate the `messages` property.
    assert capmqtt.messages == [
        MqttMessage(topic="foo", payload="bar", userdata=None),
        MqttMessage(topic="baz", payload="qux", userdata=None),
    ]

    # Demonstrate the `records` property.
    assert capmqtt.records == [
        ("foo", "bar", None),
        ("baz", "qux", None),

running with:

python -m pytest -x --full-trace --junitxml=./report.xml --mqtt-host=192.168.1.123 --mqtt-port=1883

The test passes but I get the following warning:

/usr/local/lib/python3.11/site-packages/pytest_mqtt/capmqtt.py:38: DeprecationWarning: Callback API version 1 is deprecated, update to latest version 
self.client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)

Sorry if this is a silly question, but how do I tell capmqtt to use the paho-mqtt Version 2 for the tests?

amotl commented 6 hours ago

Hi. It looks like compatibility with paho-mqtt version 2 has been addressed already.

However, support for version 2 might be incomplete, or not thorough, yet.

amotl commented 6 hours ago

However, support for version 2 might be incomplete, or not thorough, yet.

/usr/local/lib/python3.11/site-packages/pytest_mqtt/capmqtt.py:38: DeprecationWarning: Callback API version 1 is deprecated, update to latest version 
self.client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION1)

I see. Line 38 instructs the library to use mqtt.CallbackAPIVersion.VERSION1.

https://github.com/mqtt-tools/pytest-mqtt/blob/7a9ebb8c0ee0a745bec59b2a1ba71f5193491f74/pytest_mqtt/capmqtt.py#L37-L38

Sorry if this is a silly question, but how do I tell capmqtt to use the paho-mqtt Version 2 for the tests?

So, I guess you are already using paho-mqtt version 2, but still the "Callback API version 1". I think you can do nothing about the situation, other than silencing the warning messages. This, on the other hand, may also be conducted on behalf of pytest-mqtt already.

In the mid-term, pytest-mqtt must update how it uses the callback api of paho-mqtt, in order to adhere to the convention/specification of the "Callback API version 2".

amotl commented 4 hours ago

Hi again. bea0d52be78f makes the procedure ignore the deprecation warning, until the transition to Callback API v2 has been concluded. Do you think this will help you already?

pytest-mqtt 0.4.3 has just been released and published to PyPI.