Skip to content

Look into test warnings #982

@llucax

Description

@llucax

What happened?

We have quite a few warnings when running the tests. Some seem to be indicating real bugs.

Warnings at the time of writing
$ nox -R -s pytest_max 
...
==================================================================================================================================================== warnings summary =====================================================================================================================================================
tests/actor/test_resampling.py::test_duplicate_request
tests/actor/test_resampling.py::test_duplicate_request
tests/actor/test_resampling.py::test_duplicate_request
tests/actor/test_resampling.py::test_duplicate_request
tests/actor/test_resampling.py::test_duplicate_request
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:452: RuntimeWarning: coroutine '_Sender.send' was never awaited
    async with self._channel._recv_cv:
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /usr/lib/python3.11/inspect.py:3157: RuntimeWarning: coroutine 'LatestValueCache._run' was never awaited
    arg_val = kwargs.pop(param_name)
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /home/luca/devel/sdk/src/frequenz/sdk/actor/_power_managing/_power_managing_actor.py:351: RuntimeWarning: coroutine '_Receiver.ready' was never awaited
    async for selected in select(
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /home/luca/devel/sdk/src/frequenz/sdk/actor/_power_managing/_power_managing_actor.py:351: RuntimeWarning: coroutine 'Timer.ready' was never awaited
    async for selected in select(
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /usr/lib/python3.11/unittest/mock.py:2515: RuntimeWarning: coroutine 'BatteryStatusTracker._run' was never awaited
    return tuple.__new__(cls, (name, args, kwargs))
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /usr/lib/python3.11/unittest/mock.py:2515: RuntimeWarning: coroutine 'LatestValueCache._run' was never awaited
    return tuple.__new__(cls, (name, args, kwargs))
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <coroutine object ComponentPoolStatusTracker._run at 0x7f6223d5e940>
  
  Traceback (most recent call last):
    File "/usr/lib/python3.11/unittest/mock.py", line 2515, in __new__
      return tuple.__new__(cls, (name, args, kwargs))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  RuntimeError: coroutine ignored GeneratorExit
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition
tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition_missing_bat
tests/timeseries/test_consumer.py::TestConsumer::test_consumer_power_no_grid_meter
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <function BackgroundService.__del__ at 0x7f624dbe59e0>
  
  Traceback (most recent call last):
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 235, in __del__
      self.cancel("{self!r} was deleted")
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 130, in cancel
      task.cancel(msg)
    File "/usr/lib/python3.11/asyncio/base_events.py", line 762, in call_soon
      self._check_closed()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 520, in _check_closed
      raise RuntimeError('Event loop is closed')
  RuntimeError: Event loop is closed
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

tests/timeseries/test_frequency_streaming.py::test_grid_frequency_none
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <coroutine object ComponentPoolStatusTracker._run at 0x7f6222991440>
  
  Traceback (most recent call last):
    File "/usr/lib/python3.11/inspect.py", line 2119, in _signature_strip_non_python_syntax
      lines = [l.encode('ascii') for l in signature.split('\n') if l]
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  RuntimeError: coroutine ignored GeneratorExit
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

tests/timeseries/test_logical_meter.py::TestLogicalMeter::test_chp_power
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <coroutine object AsyncExitStack.__aexit__ at 0x7f6223779a80>
  
  Traceback (most recent call last):
    File "/home/luca/devel/sdk/tests/timeseries/mock_resampler.py", line 118, in multi_phase_senders
      Sample[Quantity], p3_name
      ~~~~~~^^^^^^^^^^
  RuntimeError: coroutine ignored GeneratorExit
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

tests/timeseries/test_producer.py::TestProducer::test_producer_power
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <coroutine object ComponentPoolStatusTracker._run at 0x7f6223d5e840>
  
  Traceback (most recent call last):
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_pool_status_tracker.py", line 115, in _run
      await self._update_status()
  GeneratorExit
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File "/usr/lib/python3.11/contextlib.py", line 728, in __aexit__
      cb_suppress = await cb(*exc_details)
                    ^^^^^^^^^^^^^^^^^^^^^^
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 185, in __aexit__
      await self.stop()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 149, in stop
      await self.wait()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 200, in wait
      done, pending = await asyncio.wait(self._tasks)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.11/asyncio/tasks.py", line 427, in wait
      loop = events.get_running_loop()
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  RuntimeError: no running event loop
  
  During handling of the above exception, another exception occurred:
  
  Traceback (most recent call last):
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_pool_status_tracker.py", line 110, in _run
      async with contextlib.AsyncExitStack() as stack:
    File "/usr/lib/python3.11/contextlib.py", line 745, in __aexit__
      raise exc_details[1]
    File "/usr/lib/python3.11/contextlib.py", line 728, in __aexit__
      cb_suppress = await cb(*exc_details)
                    ^^^^^^^^^^^^^^^^^^^^^^
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 185, in __aexit__
      await self.stop()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 149, in stop
      await self.wait()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 200, in wait
      done, pending = await asyncio.wait(self._tasks)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.11/asyncio/tasks.py", line 427, in wait
      loop = events.get_running_loop()
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  RuntimeError: no running event loop
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

tests/timeseries/test_quantities.py::test_to_and_from_string[0-Power]
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <coroutine object AsyncExitStack.__aexit__ at 0x7f622377a840>
  
  Traceback (most recent call last):
    File "/usr/lib/python3.11/contextlib.py", line 745, in __aexit__
      raise exc_details[1]
    File "/usr/lib/python3.11/contextlib.py", line 728, in __aexit__
      cb_suppress = await cb(*exc_details)
                    ^^^^^^^^^^^^^^^^^^^^^^
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 185, in __aexit__
      await self.stop()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 149, in stop
      await self.wait()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 200, in wait
      done, pending = await asyncio.wait(self._tasks)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.11/asyncio/tasks.py", line 427, in wait
      loop = events.get_running_loop()
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  RuntimeError: no running event loop
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

By enabling some Python debug features, more information can be obtained, but it is usually much much slower to run.

Example
$ PYTHONTRACEMALLOC=40 noxl -R -s pytest_max -- tests/timeseries/_formula_engine/test_formula_composition.py 
nox > Running session pytest_max
nox > pytest -W=all -vv tests/timeseries/_formula_engine/test_formula_composition.py
=================================================================================================================================================== test session starts ===================================================================================================================================================
platform linux -- Python 3.11.9, pytest-8.2.0, pluggy-1.5.0 -- /home/luca/devel/sdk/.direnv/python-3.11/bin/python3
cachedir: .pytest_cache
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase(PosixPath('/home/luca/devel/sdk/.hypothesis/examples'))
rootdir: /home/luca/devel/sdk
configfile: pyproject.toml
plugins: anyio-4.4.0, asyncio-0.23.6, mock-3.14.0, time-machine-2.12.0, hypothesis-6.100.2
asyncio: mode=Mode.AUTO
collected 7 items                                                                                                                                                                                                                                                                                                         

tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition PASSED                                                                                                                                                                                               [ 14%]
tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition_missing_pv PASSED                                                                                                                                                                                    [ 28%]
tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition_missing_bat PASSED                                                                                                                                                                                   [ 42%]
tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition_min_max PASSED                                                                                                                                                                                       [ 57%]
tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition_min_max_const PASSED                                                                                                                                                                                 [ 71%]
tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition_constant PASSED                                                                                                                                                                                      [ 85%]
tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_3_phase_formulas PASSED                                                                                                                                                                                                  [100%]

==================================================================================================================================================== warnings summary =====================================================================================================================================================
tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition_constant
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <coroutine object ComponentPoolStatusTracker._run at 0x7f6b17b4c740>
  
  Traceback (most recent call last):
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py", line 391, in __init__
      self._name: str = name if name is not None else f"{id(self):_}"
                                                      ^^^^^^^^^^^^^^^
  RuntimeError: coroutine ignored GeneratorExit
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============================================================================================================================================== 7 passed, 1 warning in 48.60s ==============================================================================================================================================
Task was destroyed but it is pending!
task: <Task pending name='#47' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#37' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#7' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#17' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#57' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='Task-13' coro=<Actor._run_loop() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py:91> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='LatestValueCache«PVManager«0x7f6b17b49150»:inverter«48»»' coro=<LatestValueCache._run() running at /home/luca/devel/sdk/src/frequenz/sdk/_internal/_channels.py:92> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='LatestValueCache«PVManager«0x7f6b17b49150»:inverter«58»»' coro=<LatestValueCache._run() running at /home/luca/devel/sdk/src/frequenz/sdk/_internal/_channels.py:92> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756121018577' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]> cb=[_wait.<locals>._on_completion() at /usr/lib/python3.11/asyncio/tasks.py:519]>
Task was destroyed but it is pending!
task: <Task pending name='8756121018557' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]> cb=[_wait.<locals>._on_completion() at /usr/lib/python3.11/asyncio/tasks.py:519]>
Task was destroyed but it is pending!
task: <Task pending name='8756121018613' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]> cb=[_wait.<locals>._on_completion() at /usr/lib/python3.11/asyncio/tasks.py:519]>
Task was destroyed but it is pending!
task: <Task pending name='8756126486997' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]> cb=[_wait.<locals>._on_completion() at /usr/lib/python3.11/asyncio/tasks.py:519]>
Task was destroyed but it is pending!
task: <Task pending name='8756116085697' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]> cb=[_wait.<locals>._on_completion() at /usr/lib/python3.11/asyncio/tasks.py:519]>
Task was destroyed but it is pending!
task: <Task pending name='0' coro=<Receiver.__anext__() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_receiver.py:159> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='1' coro=<Receiver.__anext__() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_receiver.py:159> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#27' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#18' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#38' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#28' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#48' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='#58' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Actor PowerDistributingActor[140097935939856]: Raised a BaseException.
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py", line 91, in _run_loop
    await self._run()
GeneratorExit
Exception ignored in: <function BackgroundService.__del__ at 0x7f6b3b4e19e0>
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 235, in __del__
    self.cancel("{self!r} was deleted")
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 130, in cancel
    task.cancel(msg)
  File "/usr/lib/python3.11/asyncio/base_events.py", line 762, in call_soon
    self._check_closed()
  File "/usr/lib/python3.11/asyncio/base_events.py", line 520, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Task was destroyed but it is pending!
task: <Task pending name='Task-12' coro=<ComponentPoolStatusTracker._run() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_pool_status_tracker.py:115> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Exception ignored in: <function BackgroundService.__del__ at 0x7f6b3b4e19e0>
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 235, in __del__
    self.cancel("{self!r} was deleted")
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 130, in cancel
    task.cancel(msg)
  File "/usr/lib/python3.11/asyncio/base_events.py", line 762, in call_soon
    self._check_closed()
  File "/usr/lib/python3.11/asyncio/base_events.py", line 520, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function BackgroundService.__del__ at 0x7f6b3b4e19e0>
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 235, in __del__
    self.cancel("{self!r} was deleted")
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 130, in cancel
    task.cancel(msg)
  File "/usr/lib/python3.11/asyncio/base_events.py", line 762, in call_soon
    self._check_closed()
  File "/usr/lib/python3.11/asyncio/base_events.py", line 520, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <coroutine object ComponentPoolStatusTracker._run at 0x7f6b17b4de40>
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_pool_status_tracker.py", line 110, in _run
    async with contextlib.AsyncExitStack() as stack:
  File "/usr/lib/python3.11/contextlib.py", line 745, in __aexit__
    raise exc_details[1]
  File "/usr/lib/python3.11/contextlib.py", line 728, in __aexit__
    cb_suppress = await cb(*exc_details)
                  ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 185, in __aexit__
    await self.stop()
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 149, in stop
    await self.wait()
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 200, in wait
    done, pending = await asyncio.wait(self._tasks)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/tasks.py", line 427, in wait
    loop = events.get_running_loop()
           ^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: no running event loop
Task was destroyed but it is pending!
task: <Task pending name='Task-14' coro=<Actor._run_loop() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py:91> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task cancelling name='Task-33' coro=<PVInverterStatusTracker._run_forever() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_status/_pv_inverter_status_tracker.py:93> wait_for=<Future cancelled>>
Task was destroyed but it is pending!
task: <Task cancelling name='Task-34' coro=<PVInverterStatusTracker._run_forever() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_status/_pv_inverter_status_tracker.py:93> wait_for=<Future cancelled>>
Task was destroyed but it is pending!
task: <Task pending name='1' coro=<Receiver.__anext__() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_receiver.py:159> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='0' coro=<Receiver.__anext__() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_receiver.py:159> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Actor PowerManagingActor[140097936297744]: Raised a BaseException.
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py", line 91, in _run_loop
    await self._run()
GeneratorExit
Exception ignored in: <function BackgroundService.__del__ at 0x7f6b3b4e19e0>
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 235, in __del__
    self.cancel("{self!r} was deleted")
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 130, in cancel
    task.cancel(msg)
  File "/usr/lib/python3.11/asyncio/base_events.py", line 762, in call_soon
    self._check_closed()
  File "/usr/lib/python3.11/asyncio/base_events.py", line 520, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Task was destroyed but it is pending!
task: <Task pending name='8756121018417' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756121018505' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756126487309' coro=<Timer.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/timer.py:667> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756116084969' coro=<Timer.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/timer.py:667> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756116084925' coro=<Timer.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/timer.py:667> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Exception ignored in: <coroutine object AsyncExitStack.__aexit__ at 0x7f6b1cfbafc0>
Traceback (most recent call last):
  File "/usr/lib/python3.11/contextlib.py", line 745, in __aexit__
    raise exc_details[1]
  File "/usr/lib/python3.11/contextlib.py", line 728, in __aexit__
    cb_suppress = await cb(*exc_details)
                  ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 185, in __aexit__
    await self.stop()
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 149, in stop
    await self.wait()
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 200, in wait
    done, pending = await asyncio.wait(self._tasks)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/tasks.py", line 427, in wait
    loop = events.get_running_loop()
           ^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: no running event loop
Task was destroyed but it is pending!
task: <Task pending name='#4' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='grid-power' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='grid-power' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='grid-power' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='grid-power' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='grid-power' coro=<MetricFetcher.fetch_next() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_steps.py:393> wait_for=<Future pending cb=[Task.task_wakeup()]> cb=[_wait.<locals>._on_completion() at /usr/lib/python3.11/asyncio/tasks.py:519]>
Task was destroyed but it is pending!
task: <Task pending name='Task-412' coro=<FormulaEngine._run() running at /home/luca/devel/sdk/src/frequenz/sdk/timeseries/formula_engine/_formula_engine.py:379> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Exception ignored in: <function BackgroundService.__del__ at 0x7f6b3b4e19e0>
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 235, in __del__
    self.cancel("{self!r} was deleted")
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 130, in cancel
    task.cancel(msg)
  File "/usr/lib/python3.11/asyncio/base_events.py", line 762, in call_soon
    self._check_closed()
  File "/usr/lib/python3.11/asyncio/base_events.py", line 520, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Exception ignored in: <function BackgroundService.__del__ at 0x7f6b3b4e19e0>
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 235, in __del__
    self.cancel("{self!r} was deleted")
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 130, in cancel
    task.cancel(msg)
  File "/usr/lib/python3.11/asyncio/base_events.py", line 762, in call_soon
    self._check_closed()
  File "/usr/lib/python3.11/asyncio/base_events.py", line 520, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Task was destroyed but it is pending!
task: <Task pending name='Task-422' coro=<ComponentPoolStatusTracker._run() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_pool_status_tracker.py:115> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task cancelling name='Task-423' coro=<Actor._run_loop() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py:91> wait_for=<Future cancelled>>
Exception ignored in: <function BackgroundService.__del__ at 0x7f6b3b4e19e0>
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 235, in __del__
    self.cancel("{self!r} was deleted")
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 130, in cancel
    task.cancel(msg)
  File "/usr/lib/python3.11/asyncio/base_events.py", line 762, in call_soon
    self._check_closed()
  File "/usr/lib/python3.11/asyncio/base_events.py", line 520, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Task was destroyed but it is pending!
task: <Task cancelling name='Task-424' coro=<Actor._run_loop() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py:91> wait_for=<Future cancelled>>
Exception ignored in: <coroutine object ComponentPoolStatusTracker._run at 0x7f6b17b4ce40>
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_pool_status_tracker.py", line 110, in _run
    async with contextlib.AsyncExitStack() as stack:
  File "/usr/lib/python3.11/contextlib.py", line 745, in __aexit__
    raise exc_details[1]
  File "/usr/lib/python3.11/contextlib.py", line 728, in __aexit__
    cb_suppress = await cb(*exc_details)
                  ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 185, in __aexit__
    await self.stop()
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 149, in stop
    await self.wait()
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 200, in wait
    done, pending = await asyncio.wait(self._tasks)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/asyncio/tasks.py", line 427, in wait
    loop = events.get_running_loop()
           ^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: no running event loop
Actor PowerDistributingActor[140097935796560]: Raised a BaseException.
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py", line 91, in _run_loop
    await self._run()
GeneratorExit
Actor PowerManagingActor[140097935797200]: Raised a BaseException.
Traceback (most recent call last):
  File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py", line 91, in _run_loop
    await self._run()
GeneratorExit
Task was destroyed but it is pending!
task: <Task cancelling name='Task-435' coro=<EVChargerStatusTracker._run_forever() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_status/_ev_charger_status_tracker.py:107> wait_for=<Future cancelled>>
Task was destroyed but it is pending!
task: <Task pending name='Task-436' coro=<EVChargerManager._run_forever() running at /home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_managers/_ev_charger_manager/_ev_charger_manager.py:217> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756120987169' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756120987625' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756120987361' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756126506645' coro=<Timer.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/timer.py:667> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756126506873' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756120987569' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756126506185' coro=<Timer.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/timer.py:667> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='0' coro=<Receiver.__anext__() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_receiver.py:159> wait_for=<Future pending cb=[Task.task_wakeup()]> cb=[_wait.<locals>._on_completion() at /usr/lib/python3.11/asyncio/tasks.py:519]>
Task was destroyed but it is pending!
task: <Task pending name='8756126506561' coro=<Merger.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_merge.py:160> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='8756126506317' coro=<_Receiver.ready() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py:453> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='0' coro=<Receiver.__anext__() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_receiver.py:159> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Task was destroyed but it is pending!
task: <Task pending name='0' coro=<Receiver.__anext__() running at /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_receiver.py:159> wait_for=<Future pending cb=[Task.task_wakeup()]>>
An incomplete run of all the tests with `PYTHONMALLOC=debug PYTHONTRACEMALLOC=30`
$ PYTHONMALLOC=debug PYTHONTRACEMALLOC=30 pytes
...
==================================================================================================================================================== warnings summary =====================================================================================================================================================
tests/actor/test_resampling.py::test_duplicate_request
  /usr/lib/python3.11/asyncio/base_events.py:437: RuntimeWarning: coroutine '_Sender.send' was never awaited
    task = tasks.Task(coro, loop=self, name=name, context=context)
  
  Object allocated at:
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/main.py", line 285
      session.exitstatus = doit(config, session) or 0
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/main.py", line 339
      config.hook.pytest_runtestloop(session=session)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/main.py", line 364
      item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 116
      runtestprotocol(item, nextitem=nextitem)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 135
      reports.append(call_and_report(item, "call", log))
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 240
      call = CallInfo.from_call(
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 341
      result: Optional[TResult] = func()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 241
      lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 173
      item.runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 436
      super().runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 1627
      self.ihook.pytest_pyfunc_call(pyfuncitem=self)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 162
      result = testfunction(**testargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 897
      _loop.run_until_complete(task)
    File "/usr/lib/python3.11/asyncio/base_events.py", line 641
      self.run_forever()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 608
      self._run_once()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 1936
      handle._run()
    File "/usr/lib/python3.11/asyncio/events.py", line 84
      self._context.run(self._callback, *self._args)
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_data_sourcing/microgrid_api_source.py", line 406
      awaitables.append(sender.send(sample))

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /usr/lib/python3.11/inspect.py:2481: RuntimeWarning: coroutine 'LatestValueCache._run' was never awaited
    sig = obj.__signature__
  
  Object allocated at:
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/main.py", line 364
      item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 116
      runtestprotocol(item, nextitem=nextitem)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 135
      reports.append(call_and_report(item, "call", log))
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 240
      call = CallInfo.from_call(
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 341
      result: Optional[TResult] = func()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 241
      lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 173
      item.runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 436
      super().runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 1627
      self.ihook.pytest_pyfunc_call(pyfuncitem=self)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 162
      result = testfunction(**testargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 897
      _loop.run_until_complete(task)
    File "/usr/lib/python3.11/asyncio/base_events.py", line 641
      self.run_forever()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 608
      self._run_once()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 1936
      handle._run()
    File "/usr/lib/python3.11/asyncio/events.py", line 84
      self._context.run(self._callback, *self._args)
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py", line 91
      await self._run()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/power_distributing.py", line 127
      await self._component_manager.start()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_managers/_battery_manager.py", line 191
      await self._create_channels()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_managers/_battery_manager.py", line 328
      self._inverter_caches[inverter_id] = LatestValueCache(
    File "/home/luca/devel/sdk/src/frequenz/sdk/_internal/_channels.py", line 58
      self._run(), name=f"LatestValueCache«{self._unique_id}»"

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /home/luca/devel/sdk/src/frequenz/sdk/actor/_power_managing/_power_managing_actor.py:351: RuntimeWarning: coroutine 'Timer.ready' was never awaited
    async for selected in select(
  
  Object allocated at:
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 159
      item.session._setupstate.setup(item)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 512
      col.setup()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 1630
      self._request._fillfixtures()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 683
      item.funcargs[argname] = self.getfixturevalue(argname)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 518
      fixturedef = self._get_active_fixturedef(argname)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 603
      fixturedef.execute(request=subrequest)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 1073
      result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 1122
      result = call_fixture_func(fixturefunc, request, kwargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 884
      fixture_result = fixturefunc(**kwargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 344
      result = event_loop.run_until_complete(setup())
    File "/usr/lib/python3.11/asyncio/base_events.py", line 641
      self.run_forever()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 608
      self._run_once()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 1936
      handle._run()
    File "/usr/lib/python3.11/asyncio/events.py", line 84
      self._context.run(self._callback, *self._args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 326
      res = await gen_obj.__anext__()
    File "/home/luca/devel/sdk/tests/timeseries/_battery_pool/test_battery_pool_control_methods.py", line 53
      await mockgrid.start(mocker)
    File "/home/luca/devel/sdk/tests/timeseries/mock_microgrid.py", line 196
      self.mock_resampler = MockResampler(
    File "/home/luca/devel/sdk/tests/timeseries/mock_resampler.py", line 180
      self._meter_voltage_senders = voltage_senders(meter_ids)
    File "/home/luca/devel/sdk/tests/timeseries/mock_resampler.py", line 153
      return multi_phase_senders(
    File "/home/luca/devel/sdk/tests/timeseries/mock_resampler.py", line 111
      self._channel_registry.get_or_create(
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_channel_registry.py", line 102
      message_type, Broadcast(name=f"{self._name}-{key}")
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py", line 205
      self._recv_cv: Condition = Condition()
    File "/usr/lib/python3.11/asyncio/locks.py", line 239
      self._waiters = collections.deque()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_power_managing/_power_managing_actor.py", line 351
      async for selected in select(

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /home/luca/devel/sdk/src/frequenz/sdk/actor/_power_managing/_power_managing_actor.py:351: RuntimeWarning: coroutine '_Receiver.ready' was never awaited
    async for selected in select(
  
  Object allocated at:
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 159
      item.session._setupstate.setup(item)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 512
      col.setup()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 1630
      self._request._fillfixtures()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 683
      item.funcargs[argname] = self.getfixturevalue(argname)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 518
      fixturedef = self._get_active_fixturedef(argname)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 603
      fixturedef.execute(request=subrequest)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 1073
      result = ihook.pytest_fixture_setup(fixturedef=self, request=request)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 1122
      result = call_fixture_func(fixturefunc, request, kwargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/fixtures.py", line 884
      fixture_result = fixturefunc(**kwargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 344
      result = event_loop.run_until_complete(setup())
    File "/usr/lib/python3.11/asyncio/base_events.py", line 641
      self.run_forever()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 608
      self._run_once()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 1936
      handle._run()
    File "/usr/lib/python3.11/asyncio/events.py", line 84
      self._context.run(self._callback, *self._args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 326
      res = await gen_obj.__anext__()
    File "/home/luca/devel/sdk/tests/timeseries/_battery_pool/test_battery_pool_control_methods.py", line 53
      await mockgrid.start(mocker)
    File "/home/luca/devel/sdk/tests/timeseries/mock_microgrid.py", line 196
      self.mock_resampler = MockResampler(
    File "/home/luca/devel/sdk/tests/timeseries/mock_resampler.py", line 180
      self._meter_voltage_senders = voltage_senders(meter_ids)
    File "/home/luca/devel/sdk/tests/timeseries/mock_resampler.py", line 153
      return multi_phase_senders(
    File "/home/luca/devel/sdk/tests/timeseries/mock_resampler.py", line 111
      self._channel_registry.get_or_create(
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_channel_registry.py", line 102
      message_type, Broadcast(name=f"{self._name}-{key}")
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py", line 205
      self._recv_cv: Condition = Condition()
    File "/usr/lib/python3.11/asyncio/locks.py", line 239
      self._waiters = collections.deque()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_power_managing/_power_managing_actor.py", line 351
      async for selected in select(

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /usr/lib/python3.11/asyncio/locks.py:239: RuntimeWarning: coroutine 'BatteryStatusTracker._run' was never awaited
    self._waiters = collections.deque()
  
  Object allocated at:
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/main.py", line 364
      item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 116
      runtestprotocol(item, nextitem=nextitem)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 135
      reports.append(call_and_report(item, "call", log))
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 240
      call = CallInfo.from_call(
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 341
      result: Optional[TResult] = func()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 241
      lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 173
      item.runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 436
      super().runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 1627
      self.ihook.pytest_pyfunc_call(pyfuncitem=self)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 162
      result = testfunction(**testargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 897
      _loop.run_until_complete(task)
    File "/usr/lib/python3.11/asyncio/base_events.py", line 641
      self.run_forever()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 608
      self._run_once()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 1936
      handle._run()
    File "/usr/lib/python3.11/asyncio/events.py", line 84
      self._context.run(self._callback, *self._args)
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_pool_status_tracker.py", line 112
      await stack.enter_async_context(tracker)
    File "/usr/lib/python3.11/contextlib.py", line 650
      result = await _enter(cm)
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 167
      self.start()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_status/_battery_status_tracker.py", line 159
      self._run(self._status_sender, self._set_power_result_receiver)

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /usr/lib/python3.11/asyncio/locks.py:239: RuntimeWarning: coroutine 'LatestValueCache._run' was never awaited
    self._waiters = collections.deque()
  
  Object allocated at:
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/main.py", line 364
      item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 116
      runtestprotocol(item, nextitem=nextitem)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 135
      reports.append(call_and_report(item, "call", log))
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 240
      call = CallInfo.from_call(
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 341
      result: Optional[TResult] = func()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 241
      lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 173
      item.runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 436
      super().runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 1627
      self.ihook.pytest_pyfunc_call(pyfuncitem=self)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 162
      result = testfunction(**testargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 897
      _loop.run_until_complete(task)
    File "/usr/lib/python3.11/asyncio/base_events.py", line 641
      self.run_forever()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 608
      self._run_once()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 1936
      handle._run()
    File "/usr/lib/python3.11/asyncio/events.py", line 84
      self._context.run(self._callback, *self._args)
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_actor.py", line 91
      await self._run()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/power_distributing.py", line 127
      await self._component_manager.start()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_managers/_battery_manager.py", line 191
      await self._create_channels()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/power_distributing/_component_managers/_battery_manager.py", line 328
      self._inverter_caches[inverter_id] = LatestValueCache(
    File "/home/luca/devel/sdk/src/frequenz/sdk/_internal/_channels.py", line 58
      self._run(), name=f"LatestValueCache«{self._unique_id}»"

tests/timeseries/_battery_pool/test_battery_pool_control_methods.py::TestBatteryPoolControl::test_case_1
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <coroutine object ComponentPoolStatusTracker._run at 0x7f2c5857fce0>
  
  Traceback (most recent call last):
    File "/usr/lib/python3.11/asyncio/locks.py", line 239, in __init__
      self._waiters = collections.deque()
                      ^^^^^^^^^^^^^^^^^^^
  RuntimeError: coroutine ignored GeneratorExit
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition
  /home/luca/devel/sdk/src/frequenz/sdk/actor/_power_managing/_power_managing_actor.py:351: RuntimeWarning: coroutine '_Receiver.ready' was never awaited
    async for selected in select(
  
  Object allocated at:
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 173
      item.runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 436
      super().runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 1627
      self.ihook.pytest_pyfunc_call(pyfuncitem=self)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 162
      result = testfunction(**testargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 897
      _loop.run_until_complete(task)
    File "/usr/lib/python3.11/asyncio/base_events.py", line 641
      self.run_forever()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 608
      self._run_once()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 1936
      handle._run()
    File "/usr/lib/python3.11/asyncio/events.py", line 84
      self._context.run(self._callback, *self._args)
    File "/home/luca/devel/sdk/tests/timeseries/_formula_engine/test_formula_composition.py", line 34
      async with mockgrid, AsyncExitStack() as stack:
    File "/home/luca/devel/sdk/tests/timeseries/mock_microgrid.py", line 605
      await self.start()
    File "/home/luca/devel/sdk/tests/timeseries/mock_microgrid.py", line 195
      self.init_mock_client(lambda mock_client: mock_client.initialize(local_mocker))
    File "/home/luca/devel/sdk/tests/timeseries/mock_microgrid.py", line 211
      self.mock_client = MockMicrogridClient(self._components, self._connections)
    File "/home/luca/devel/sdk/tests/utils/mock_microgrid_client.py", line 71
      mock_api = self._create_mock_api(
    File "/home/luca/devel/sdk/tests/utils/mock_microgrid_client.py", line 265
      api.battery_data = AsyncMock(
    File "/usr/lib/python3.11/unittest/mock.py", line 2212
      code_mock = NonCallableMock(spec_set=CodeType)
    File "/usr/lib/python3.11/unittest/mock.py", line 457
      self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    File "/usr/lib/python3.11/unittest/mock.py", line 523
      res = _get_signature_object(spec,
    File "/usr/lib/python3.11/unittest/mock.py", line 119
      return func, inspect.signature(sig_func)
    File "/usr/lib/python3.11/inspect.py", line 3263
      return Signature.from_callable(obj, follow_wrapped=follow_wrapped,
    File "/usr/lib/python3.11/inspect.py", line 3011
      return _signature_from_callable(obj, sigcls=cls,
    File "/usr/lib/python3.11/inspect.py", line 2532
      wrapped_sig = _get_signature_of(obj.func)
    File "/usr/lib/python3.11/inspect.py", line 2528
      return _signature_from_builtin(sigcls, obj,
    File "/usr/lib/python3.11/inspect.py", line 2328
      return _signature_fromstr(cls, func, s, skip_bound_arg)
    File "/usr/lib/python3.11/inspect.py", line 2276
      p(name, default)
    File "/usr/lib/python3.11/inspect.py", line 2265
      parameters.append(Parameter(name, kind, default=default, annotation=empty))
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_power_managing/_power_managing_actor.py", line 351
      async for selected in select(

tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition
  /home/luca/devel/sdk/src/frequenz/sdk/timeseries/ev_charger_pool/_system_bounds_tracker.py:130: RuntimeWarning: coroutine 'Merger.ready' was never awaited
    async for selected in select(status_rx, ev_data_rx):
  
  Object allocated at:
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/runner.py", line 173
      item.runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 436
      super().runtest()
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 1627
      self.ihook.pytest_pyfunc_call(pyfuncitem=self)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_hooks.py", line 513
      return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_manager.py", line 120
      return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pluggy/_callers.py", line 103
      res = hook_impl.function(*args)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/python.py", line 162
      result = testfunction(**testargs)
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/pytest_asyncio/plugin.py", line 897
      _loop.run_until_complete(task)
    File "/usr/lib/python3.11/asyncio/base_events.py", line 641
      self.run_forever()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 608
      self._run_once()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 1936
      handle._run()
    File "/usr/lib/python3.11/asyncio/events.py", line 84
      self._context.run(self._callback, *self._args)
    File "/home/luca/devel/sdk/tests/timeseries/_formula_engine/test_formula_composition.py", line 34
      async with mockgrid, AsyncExitStack() as stack:
    File "/home/luca/devel/sdk/tests/timeseries/mock_microgrid.py", line 605
      await self.start()
    File "/home/luca/devel/sdk/tests/timeseries/mock_microgrid.py", line 195
      self.init_mock_client(lambda mock_client: mock_client.initialize(local_mocker))
    File "/home/luca/devel/sdk/tests/timeseries/mock_microgrid.py", line 211
      self.mock_client = MockMicrogridClient(self._components, self._connections)
    File "/home/luca/devel/sdk/tests/utils/mock_microgrid_client.py", line 71
      mock_api = self._create_mock_api(
    File "/home/luca/devel/sdk/tests/utils/mock_microgrid_client.py", line 265
      api.battery_data = AsyncMock(
    File "/usr/lib/python3.11/unittest/mock.py", line 2212
      code_mock = NonCallableMock(spec_set=CodeType)
    File "/usr/lib/python3.11/unittest/mock.py", line 457
      self._mock_add_spec(spec, spec_set, _spec_as_instance, _eat_self)
    File "/usr/lib/python3.11/unittest/mock.py", line 523
      res = _get_signature_object(spec,
    File "/usr/lib/python3.11/unittest/mock.py", line 119
      return func, inspect.signature(sig_func)
    File "/usr/lib/python3.11/inspect.py", line 3263
      return Signature.from_callable(obj, follow_wrapped=follow_wrapped,
    File "/usr/lib/python3.11/inspect.py", line 3011
      return _signature_from_callable(obj, sigcls=cls,
    File "/usr/lib/python3.11/inspect.py", line 2532
      wrapped_sig = _get_signature_of(obj.func)
    File "/usr/lib/python3.11/inspect.py", line 2528
      return _signature_from_builtin(sigcls, obj,
    File "/usr/lib/python3.11/inspect.py", line 2328
      return _signature_fromstr(cls, func, s, skip_bound_arg)
    File "/usr/lib/python3.11/inspect.py", line 2276
      p(name, default)
    File "/usr/lib/python3.11/inspect.py", line 2265
      parameters.append(Parameter(name, kind, default=default, annotation=empty))
    File "/home/luca/devel/sdk/src/frequenz/sdk/timeseries/ev_charger_pool/_system_bounds_tracker.py", line 130
      async for selected in select(status_rx, ev_data_rx):

tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition
tests/timeseries/_formula_engine/test_formula_composition.py::TestFormulaComposition::test_formula_composition_missing_bat
tests/timeseries/test_consumer.py::TestConsumer::test_consumer_power_no_grid_meter
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <function BackgroundService.__del__ at 0x7f2c846f8940>
  
  Traceback (most recent call last):
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 235, in __del__
      self.cancel("{self!r} was deleted")
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 130, in cancel
      task.cancel(msg)
    File "/usr/lib/python3.11/asyncio/base_events.py", line 762, in call_soon
      self._check_closed()
    File "/usr/lib/python3.11/asyncio/base_events.py", line 520, in _check_closed
      raise RuntimeError('Event loop is closed')
  RuntimeError: Event loop is closed
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

tests/timeseries/test_periodic_feature_extractor.py::test_feature_extractor
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <coroutine object ComponentPoolStatusTracker._run at 0x7f2c59d1bf00>
  
  Traceback (most recent call last):
    File "/home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/frequenz/channels/_broadcast.py", line 344, in send
      for _hash, recv_ref in self._channel._receivers.items():
  RuntimeError: coroutine ignored GeneratorExit
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

tests/timeseries/test_quantities.py::test_quantity_multiplied_with_float[from_kilohertz]
  /home/luca/devel/sdk/.direnv/python-3.11/lib/python3.11/site-packages/_pytest/unraisableexception.py:80: PytestUnraisableExceptionWarning: Exception ignored in: <coroutine object AsyncExitStack.__aexit__ at 0x7f2c5b4f9550>
  
  Traceback (most recent call last):
    File "/usr/lib/python3.11/contextlib.py", line 745, in __aexit__
      raise exc_details[1]
    File "/usr/lib/python3.11/contextlib.py", line 728, in __aexit__
      cb_suppress = await cb(*exc_details)
                    ^^^^^^^^^^^^^^^^^^^^^^
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 185, in __aexit__
      await self.stop()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 149, in stop
      await self.wait()
    File "/home/luca/devel/sdk/src/frequenz/sdk/actor/_background_service.py", line 200, in wait
      done, pending = await asyncio.wait(self._tasks)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib/python3.11/asyncio/tasks.py", line 427, in wait
      loop = events.get_running_loop()
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  RuntimeError: no running event loop
  
    warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

What did you expect instead?

No warnings.

Affected version(s)

v1.0.0rc700

Affected part(s)

Unit, integration and performance tests (part:tests)

Extra information

We could try to find out if there is a way to make warnings errors in tests, so we don't end up in this situation again where a lot of warnings accumulated and it is hard to remove them all at once.

Metadata

Metadata

Assignees

No one assigned

    Labels

    part:testsAffects the unit, integration and performance (benchmarks) testspriority:❓We need to figure out how soon this should be addressedtype:bugSomething isn't working

    Type

    No type

    Projects

    Status

    In progress

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions