zigpy / zigpy-xbee

A library which communicates with XBee radios for zigpy
GNU General Public License v3.0
22 stars 18 forks source link

Test failures with zigpy==0.59.0 #165

Closed mweinelt closed 8 months ago

mweinelt commented 8 months ago

We're seeing a few test fail on zigpy-xbee==0.19.0 starting with zigpy==0.59.0, which is required by home-assistant==2023.11.0.

zigpy-xbee> FAILED tests/test_application.py::test_rx - AssertionError: Expected 'mock' to be called once. Called 0 times.
zigpy-xbee> FAILED tests/test_application.py::test_rx_nwk_0000 - AssertionError: assert 0 == 1
zigpy-xbee> FAILED tests/test_application.py::test_device_join_new - RuntimeError: no running event loop
zigpy-xbee> FAILED tests/test_application.py::test_device_join_inconsistent_nwk - RuntimeError: no running event loop
zigpy-xbee> FAILED tests/test_application.py::test_device_join_inconsistent_ieee - RuntimeError: no running event loop
zigpy-xbee> FAILED tests/test_application.py::test_rx_device_annce - AssertionError: assert 0 == 1
Full log
zigpy-xbee> ============================= test session starts ==============================
zigpy-xbee> platform linux -- Python 3.11.5, pytest-7.4.2, pluggy-1.2.0
zigpy-xbee> rootdir: /build/source
zigpy-xbee> configfile: pyproject.toml
zigpy-xbee> plugins: asyncio-0.21.1
zigpy-xbee> asyncio: mode=Mode.AUTO
zigpy-xbee> collected 110 items / 1 deselected / 109 selected                              
zigpy-xbee> 
zigpy-xbee> tests/test_api.py ...........................................            [ 39%]
zigpy-xbee> tests/test_application.py .FF..FFF..................F.........           [ 72%]
zigpy-xbee> tests/test_types.py .......                                              [ 78%]
zigpy-xbee> tests/test_uart.py .......................                               [100%]
zigpy-xbee> 
zigpy-xbee> =================================== FAILURES ===================================
zigpy-xbee> ___________________________________ test_rx ____________________________________
zigpy-xbee> 
zigpy-xbee> app = 
zigpy-xbee> 
zigpy-xbee>     def test_rx(app):
zigpy-xbee>         """Test message receiving."""
zigpy-xbee>         device = mock.MagicMock()
zigpy-xbee>         app.handle_message = mock.MagicMock()
zigpy-xbee>         _test_rx(app, device, 0x1234, data=b"\x01\x02\x03\x04")
zigpy-xbee> >       app.handle_message.assert_called_once_with(
zigpy-xbee>             sender=device,
zigpy-xbee>             profile=mock.sentinel.profile_id,
zigpy-xbee>             cluster=mock.sentinel.cluster_id,
zigpy-xbee>             src_ep=mock.sentinel.src_ep,
zigpy-xbee>             dst_ep=mock.sentinel.dst_ep,
zigpy-xbee>             message=b"\x01\x02\x03\x04",
zigpy-xbee>             dst_addressing=t.AddrMode.NWK,
zigpy-xbee>         )
zigpy-xbee> 
zigpy-xbee> tests/test_application.py:118: 
zigpy-xbee> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zigpy-xbee> 
zigpy-xbee> self = , args = ()
zigpy-xbee> kwargs = {'cluster': sentinel.cluster_id, 'dst_addressing': , 'dst_ep': sentinel.dst_ep, 'message': b'\x01\x02\x03\x04', ...}
zigpy-xbee> msg = "Expected 'mock' to be called once. Called 0 times."
zigpy-xbee> 
zigpy-xbee>     def assert_called_once_with(self, /, *args, **kwargs):
zigpy-xbee>         """assert that the mock was called exactly once and that that call was
zigpy-xbee>         with the specified arguments."""
zigpy-xbee>         if not self.call_count == 1:
zigpy-xbee>             msg = ("Expected '%s' to be called once. Called %s times.%s"
zigpy-xbee>                    % (self._mock_name or 'mock',
zigpy-xbee>                       self.call_count,
zigpy-xbee>                       self._calls_repr()))
zigpy-xbee> >           raise AssertionError(msg)
zigpy-xbee> E           AssertionError: Expected 'mock' to be called once. Called 0 times.
zigpy-xbee> 
zigpy-xbee> /nix/store/ffll6glz3gwx342z0ch8wx30p5cnqz1z-python3-3.11.5/lib/python3.11/unittest/mock.py:950: AssertionError
zigpy-xbee> _______________________________ test_rx_nwk_0000 _______________________________
zigpy-xbee> 
zigpy-xbee> app = 
zigpy-xbee> 
zigpy-xbee>     def test_rx_nwk_0000(app):
zigpy-xbee>         """Test receiving self-addressed message."""
zigpy-xbee>         app._handle_reply = mock.MagicMock()
zigpy-xbee>         app.handle_message = mock.MagicMock()
zigpy-xbee>         app.get_device = mock.MagicMock()
zigpy-xbee>         app.handle_rx(
zigpy-xbee>             b"\x01\x02\x03\x04\x05\x06\x07\x08",
zigpy-xbee>             0x0000,
zigpy-xbee>             mock.sentinel.src_ep,
zigpy-xbee>             mock.sentinel.dst_ep,
zigpy-xbee>             mock.sentinel.cluster_id,
zigpy-xbee>             mock.sentinel.profile_id,
zigpy-xbee>             mock.sentinel.rxopts,
zigpy-xbee>             b"",
zigpy-xbee>         )
zigpy-xbee> >       assert app.handle_message.call_count == 1
zigpy-xbee> E       AssertionError: assert 0 == 1
zigpy-xbee> E        +  where 0 = .call_count
zigpy-xbee> E        +    where  = .handle_message
zigpy-xbee> 
zigpy-xbee> tests/test_application.py:144: AssertionError
zigpy-xbee> _____________________________ test_device_join_new _____________________________
zigpy-xbee> 
zigpy-xbee> app = 
zigpy-xbee> device = ._device at 0x7ffff4cd9bc0>
zigpy-xbee> 
zigpy-xbee>     def test_device_join_new(app, device):
zigpy-xbee>         """Test device join."""
zigpy-xbee>         dev = device()
zigpy-xbee>         data = b"\xee" + dev.nwk.serialize() + dev.ieee.serialize() + b"\x40"
zigpy-xbee>     
zigpy-xbee> >       _device_join(app, dev, data)
zigpy-xbee> 
zigpy-xbee> tests/test_application.py:238: 
zigpy-xbee> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zigpy-xbee> tests/test_application.py:228: in _device_join
zigpy-xbee>     _test_rx(app, dev, dev.nwk, dst_ep, cluster_id, data)
zigpy-xbee> tests/test_application.py:101: in _test_rx
zigpy-xbee>     app.handle_rx(
zigpy-xbee> zigpy_xbee/zigbee/application.py:375: in handle_rx
zigpy-xbee>     self.packet_received(
zigpy-xbee> /nix/store/1ivd9cbi5i2d3p5abq2kxyswnpjbbkl9-python3.11-zigpy-0.59.0/lib/python3.11/site-packages/zigpy/application.py:985: in packet_received
zigpy-xbee>     device.schedule_initialize()
zigpy-xbee> /nix/store/1ivd9cbi5i2d3p5abq2kxyswnpjbbkl9-python3.11-zigpy-0.59.0/lib/python3.11/site-packages/zigpy/device.py:162: in schedule_initialize
zigpy-xbee>     self._initialize_task = asyncio.create_task(self.initialize())
zigpy-xbee> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zigpy-xbee> 
zigpy-xbee> coro = 
zigpy-xbee> 
zigpy-xbee>     def create_task(coro, *, name=None, context=None):
zigpy-xbee>         """Schedule the execution of a coroutine object in a spawn task.
zigpy-xbee>     
zigpy-xbee>         Return a Task object.
zigpy-xbee>         """
zigpy-xbee> >       loop = events.get_running_loop()
zigpy-xbee> E       RuntimeError: no running event loop
zigpy-xbee> 
zigpy-xbee> /nix/store/ffll6glz3gwx342z0ch8wx30p5cnqz1z-python3-3.11.5/lib/python3.11/asyncio/tasks.py:371: RuntimeError
zigpy-xbee> ______________________ test_device_join_inconsistent_nwk _______________________
zigpy-xbee> 
zigpy-xbee> app = 
zigpy-xbee> device = ._device at 0x7ffff4cd93a0>
zigpy-xbee> 
zigpy-xbee>     def test_device_join_inconsistent_nwk(app, device):
zigpy-xbee>         """Test device join inconsistent NWK."""
zigpy-xbee>         dev = device()
zigpy-xbee>         data = b"\xee" + b"\x01\x02" + dev.ieee.serialize() + b"\x40"
zigpy-xbee>     
zigpy-xbee> >       _device_join(app, dev, data)
zigpy-xbee> 
zigpy-xbee> tests/test_application.py:246: 
zigpy-xbee> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zigpy-xbee> tests/test_application.py:228: in _device_join
zigpy-xbee>     _test_rx(app, dev, dev.nwk, dst_ep, cluster_id, data)
zigpy-xbee> tests/test_application.py:101: in _test_rx
zigpy-xbee>     app.handle_rx(
zigpy-xbee> zigpy_xbee/zigbee/application.py:375: in handle_rx
zigpy-xbee>     self.packet_received(
zigpy-xbee> /nix/store/1ivd9cbi5i2d3p5abq2kxyswnpjbbkl9-python3.11-zigpy-0.59.0/lib/python3.11/site-packages/zigpy/application.py:985: in packet_received
zigpy-xbee>     device.schedule_initialize()
zigpy-xbee> /nix/store/1ivd9cbi5i2d3p5abq2kxyswnpjbbkl9-python3.11-zigpy-0.59.0/lib/python3.11/site-packages/zigpy/device.py:162: in schedule_initialize
zigpy-xbee>     self._initialize_task = asyncio.create_task(self.initialize())
zigpy-xbee> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zigpy-xbee> 
zigpy-xbee> coro = 
zigpy-xbee> 
zigpy-xbee>     def create_task(coro, *, name=None, context=None):
zigpy-xbee>         """Schedule the execution of a coroutine object in a spawn task.
zigpy-xbee>     
zigpy-xbee>         Return a Task object.
zigpy-xbee>         """
zigpy-xbee> >       loop = events.get_running_loop()
zigpy-xbee> E       RuntimeError: no running event loop
zigpy-xbee> 
zigpy-xbee> /nix/store/ffll6glz3gwx342z0ch8wx30p5cnqz1z-python3-3.11.5/lib/python3.11/asyncio/tasks.py:371: RuntimeError
zigpy-xbee> ______________________ test_device_join_inconsistent_ieee ______________________
zigpy-xbee> 
zigpy-xbee> app = 
zigpy-xbee> device = ._device at 0x7ffff4cd9a80>
zigpy-xbee> 
zigpy-xbee>     def test_device_join_inconsistent_ieee(app, device):
zigpy-xbee>         """Test device join inconsistent IEEE."""
zigpy-xbee>         dev = device()
zigpy-xbee>         data = b"\xee" + dev.nwk.serialize() + b"\x01\x02\x03\x04\x05\x06\x07\x08" + b"\x40"
zigpy-xbee>     
zigpy-xbee> >       _device_join(app, dev, data)
zigpy-xbee> 
zigpy-xbee> tests/test_application.py:254: 
zigpy-xbee> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zigpy-xbee> tests/test_application.py:228: in _device_join
zigpy-xbee>     _test_rx(app, dev, dev.nwk, dst_ep, cluster_id, data)
zigpy-xbee> tests/test_application.py:101: in _test_rx
zigpy-xbee>     app.handle_rx(
zigpy-xbee> zigpy_xbee/zigbee/application.py:375: in handle_rx
zigpy-xbee>     self.packet_received(
zigpy-xbee> /nix/store/1ivd9cbi5i2d3p5abq2kxyswnpjbbkl9-python3.11-zigpy-0.59.0/lib/python3.11/site-packages/zigpy/application.py:985: in packet_received
zigpy-xbee>     device.schedule_initialize()
zigpy-xbee> /nix/store/1ivd9cbi5i2d3p5abq2kxyswnpjbbkl9-python3.11-zigpy-0.59.0/lib/python3.11/site-packages/zigpy/device.py:162: in schedule_initialize
zigpy-xbee>     self._initialize_task = asyncio.create_task(self.initialize())
zigpy-xbee> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zigpy-xbee> 
zigpy-xbee> coro = 
zigpy-xbee> 
zigpy-xbee>     def create_task(coro, *, name=None, context=None):
zigpy-xbee>         """Schedule the execution of a coroutine object in a spawn task.
zigpy-xbee>     
zigpy-xbee>         Return a Task object.
zigpy-xbee>         """
zigpy-xbee> >       loop = events.get_running_loop()
zigpy-xbee> E       RuntimeError: no running event loop
zigpy-xbee> 
zigpy-xbee> /nix/store/ffll6glz3gwx342z0ch8wx30p5cnqz1z-python3-3.11.5/lib/python3.11/asyncio/tasks.py:371: RuntimeError
zigpy-xbee> _____________________________ test_rx_device_annce _____________________________
zigpy-xbee> 
zigpy-xbee> app = 
zigpy-xbee> ieee = 07:06:05:04:03:02:01:00, nwk = 256
zigpy-xbee> 
zigpy-xbee>     def test_rx_device_annce(app, ieee, nwk):
zigpy-xbee>         """Test receiving device announce."""
zigpy-xbee>         dst_ep = 0
zigpy-xbee>         cluster_id = zdo_t.ZDOCmd.Device_annce
zigpy-xbee>         device = mock.MagicMock()
zigpy-xbee>         device.status = device.Status.NEW
zigpy-xbee>         device.zdo = zigpy.zdo.ZDO(None)
zigpy-xbee>         app.get_device = mock.MagicMock(return_value=device)
zigpy-xbee>         app.handle_join = mock.MagicMock()
zigpy-xbee>         app.handle_message = mock.MagicMock()
zigpy-xbee>     
zigpy-xbee>         data = t.uint8_t(0xAA).serialize()
zigpy-xbee>         data += nwk.serialize()
zigpy-xbee>         data += ieee.serialize()
zigpy-xbee>         data += t.uint8_t(0x8E).serialize()
zigpy-xbee>     
zigpy-xbee>         app.handle_rx(
zigpy-xbee>             ieee,
zigpy-xbee>             nwk,
zigpy-xbee>             mock.sentinel.src_ep,
zigpy-xbee>             dst_ep,
zigpy-xbee>             cluster_id,
zigpy-xbee>             mock.sentinel.profile_id,
zigpy-xbee>             mock.sentinel.rx_opt,
zigpy-xbee>             data,
zigpy-xbee>         )
zigpy-xbee>     
zigpy-xbee> >       assert app.handle_message.call_count == 1
zigpy-xbee> E       AssertionError: assert 0 == 1
zigpy-xbee> E        +  where 0 = .call_count
zigpy-xbee> E        +    where  = .handle_message
zigpy-xbee> 
zigpy-xbee> tests/test_application.py:639: AssertionError