python-driver icon indicating copy to clipboard operation
python-driver copied to clipboard

test_libevreactor.py::LibevTimerTest::test_multi_timer_validation is failing on aarch64

Open dkropachev opened this issue 1 year ago • 2 comments

=================================== FAILURES ===================================
  __________________ LibevTimerTest.test_multi_timer_validation __________________
  
  self = <tests.unit.io.test_libevreactor.LibevTimerTest testMethod=test_multi_timer_validation>
  
      def test_multi_timer_validation(self):
          """
          Verify that timer timeouts are honored appropriately
          """
          # Tests timers submitted in order at various timeouts
  >       submit_and_wait_for_completion(self, self.create_timer, 0, 100, 1, 100)
  
  /project/tests/unit/io/utils.py:167: 
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
  /project/tests/unit/io/utils.py:134: in submit_and_wait_for_completion
      unit_test.assertAlmostEqual(callback.expected_wait, callback.get_wait_time(), delta=.15)
  E   AssertionError: 0.0 != 0.28005123138427734 within 0.15 delta (0.28005123138427734 difference)
  ------------------------------ Captured log call -------------------------------
  2024-08-05 16:55:46.618 DEBUG [libevreactor:266]: Connection 365473510496: '<MagicMock name='socket().getsockname()' id='365474419376'>' -> '('127.0.0.1', 9042)'
  2024-08-05 16:55:46.625 DEBUG [libevreactor:273]: Sending initial options message for new connection (365473510496) to 127.0.0.1:9042
  2024-08-05 16:55:46.626 DEBUG [libevreactor:86]: Starting libev event loop
  2024-08-05 16:55:48.109 DEBUG [libevreactor:286]: Closing connection (365473510496) to 127.0.0.1:9042
  2024-08-05 16:55:48.112 DEBUG [libevreactor:290]: Closed socket to 127.0.0.1:9042
  =============================== warnings summary ===============================
  ../venv/lib/python3.9/site-packages/twisted/internet/address.py:24
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/twisted/internet/address.py:24: DeprecationWarning: The `hash` argument is deprecated in favor of `unsafe_hash` and will be removed in or after August 2025.
      @attr.s(hash=True, auto_attribs=True)
  
  ../venv/lib/python3.9/site-packages/twisted/internet/address.py:48
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/twisted/internet/address.py:48: DeprecationWarning: The `hash` argument is deprecated in favor of `unsafe_hash` and will be removed in or after August 2025.
      @attr.s(hash=True, auto_attribs=True)
  
  ../venv/lib/python3.9/site-packages/twisted/internet/address.py:88
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/twisted/internet/address.py:88: DeprecationWarning: The `hash` argument is deprecated in favor of `unsafe_hash` and will be removed in or after August 2025.
      @attr.s(hash=True, auto_attribs=True)
  
  ../venv/lib/python3.9/site-packages/twisted/internet/address.py:105
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/twisted/internet/address.py:105: DeprecationWarning: The `hash` argument is deprecated in favor of `unsafe_hash` and will be removed in or after August 2025.
      @attr.s(hash=False, repr=False, eq=False, auto_attribs=True)
  
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1: DeprecationWarning: X509Extension support in pyOpenSSL is deprecated. You should use the APIs in cryptography.
      from OpenSSL.crypto import *
  
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1: DeprecationWarning: CSR support in pyOpenSSL is deprecated. You should use the APIs in cryptography.
      from OpenSSL.crypto import *
  
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1: DeprecationWarning: CRL support in pyOpenSSL is deprecated. You should use the APIs in cryptography.
      from OpenSSL.crypto import *
  
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1: DeprecationWarning: sign() is deprecated. Use the equivalent APIs in cryptography.
      from OpenSSL.crypto import *
  
  ../venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/eventlet/green/OpenSSL/crypto.py:1: DeprecationWarning: verify() is deprecated. Use the equivalent APIs in cryptography.
      from OpenSSL.crypto import *
  
  ../venv/lib/python3.9/site-packages/Cython/Compiler/Main.py:381
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /project/tests/unit/cython/bytesio_testhelper.pyx
      tree = Parsing.p_module(s, pxd, full_module_name)
  
  ../venv/lib/python3.9/site-packages/Cython/Compiler/Main.py:381
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /project/tests/unit/cython/types_testhelper.pyx
      tree = Parsing.p_module(s, pxd, full_module_name)
  
  ../venv/lib/python3.9/site-packages/Cython/Compiler/Main.py:381
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /project/tests/unit/cython/utils_testhelper.pyx
      tree = Parsing.p_module(s, pxd, full_module_name)
  
  ../venv/lib/python3.9/site-packages/asynctest/mock.py:434
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/mock.py:434: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def wait(self, skip=0):
  
  ../venv/lib/python3.9/site-packages/asynctest/mock.py:448
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/mock.py:448: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def wait_next(self, skip=0):
  
  ../venv/lib/python3.9/site-packages/asynctest/mock.py:468
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/mock.py:468: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def wait_for(self, predicate):
  
  ../venv/lib/python3.9/site-packages/asynctest/mock.py:489
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/mock.py:489: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def _notify(self):
  
  ../venv/lib/python3.9/site-packages/asynctest/case.py:357
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/case.py:357: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def doCleanups(self):
  
  ../venv/lib/python3.9/site-packages/asynctest/case.py:381
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/case.py:381: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def assertAsyncRaises(self, exception, awaitable):
  
  ../venv/lib/python3.9/site-packages/asynctest/case.py:392
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/case.py:392: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def assertAsyncRaisesRegex(self, exception, regex, awaitable):
  
  ../venv/lib/python3.9/site-packages/asynctest/case.py:403
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/case.py:403: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def assertAsyncWarns(self, warning, awaitable):
  
  ../venv/lib/python3.9/site-packages/asynctest/case.py:414
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/case.py:414: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def assertAsyncWarnsRegex(self, warning, regex, awaitable):
  
  ../venv/lib/python3.9/site-packages/asynctest/case.py:445
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/case.py:445: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def advance(self, seconds):
  
  ../venv/lib/python3.9/site-packages/asynctest/case.py:487
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/case.py:487: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def _drain_loop(self):
  
  ../venv/lib/python3.9/site-packages/asynctest/helpers.py:13
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/asynctest/helpers.py:13: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
      def exhaust_callbacks(loop):
  
  ../../../project/tests/unit/io/utils.py:125
    /project/tests/unit/io/utils.py:125: SyntaxWarning: "is not" with a literal. Did you mean "!="?
      while len(pending_callbacks) is not 0:
  
  ../../../project/tests/unit/test_exception.py:32
    /project/tests/unit/test_exception.py:32: DeprecationWarning: invalid escape sequence \s
      match = re.search("'consistency':\s+'([\w\s]+)'", msg)
  
  tests/unit/advanced/test_insights.py::TestConfigAsDict::test_graph_options
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/cassandra/datastax/graph/query.py:80: UserWarning: Unknown keyword argument received for GraphOptions: graph_invalid_option
      warn("Unknown keyword argument received for GraphOptions: {0}".format(attr))
  
  tests/unit/advanced/test_policies.py::DSELoadBalancingPolicyTest::test_no_target
  tests/unit/advanced/test_policies.py::DSELoadBalancingPolicyTest::test_status_updates
  tests/unit/advanced/test_policies.py::DSELoadBalancingPolicyTest::test_target_host_down
  tests/unit/advanced/test_policies.py::DSELoadBalancingPolicyTest::test_target_host_nominal
  tests/unit/advanced/test_policies.py::DSELoadBalancingPolicyTest::test_target_no_host
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/cassandra/policies.py:1377: DeprecationWarning: DSELoadBalancingPolicy will be removed in 4.0. Consider using DefaultLoadBalancingPolicy.
      warnings.warn("DSELoadBalancingPolicy will be removed in 4.0. Consider using "
  
  tests/unit/test_cluster.py::ExecutionProfileTest::test_default_legacy
  tests/unit/test_cluster.py::ExecutionProfileTest::test_no_profile_with_legacy
  tests/unit/test_cluster.py::ExecutionProfileTest::test_no_profile_with_legacy
  tests/unit/test_cluster.py::ExecutionProfileTest::test_statement_params_override_legacy
  tests/unit/test_cluster.py::ExecutionProfileTest::test_statement_params_override_legacy
  tests/unit/test_cluster.py::ExecutionProfileTest::test_statement_params_override_profile
  tests/unit/test_policies.py::DowngradingConsistencyRetryPolicyTest::test_read_timeout
  tests/unit/test_policies.py::DowngradingConsistencyRetryPolicyTest::test_unavailable
  tests/unit/test_policies.py::DowngradingConsistencyRetryPolicyTest::test_write_timeout
    /tmp/tmp.04enzn5DK1/venv/lib/python3.9/site-packages/cassandra/policies.py:1099: DeprecationWarning: DowngradingConsistencyRetryPolicy is deprecated and will be removed in the next major release.
      warnings.warn('DowngradingConsistencyRetryPolicy is deprecated '
  
  tests/unit/test_cluster.py::ExecutionProfileTest::test_default_legacy
    /project/tests/unit/test_cluster.py:278: DeprecationWarning: Legacy execution parameters will be removed in 4.0. Consider using execution profiles.
      cluster = Cluster(load_balancing_policy=RoundRobinPolicy(), default_retry_policy=DowngradingConsistencyRetryPolicy())
  
  tests/unit/test_cluster.py::ExecutionProfileTest::test_default_legacy
    /project/tests/unit/test_cluster.py:282: DeprecationWarning: Setting the consistency level at the session level will be removed in 4.0. Consider using execution profiles and setting the desired consistency level to the EXEC_PROFILE_DEFAULT profile.
      session.default_consistency_level = ConsistencyLevel.ALL
  
  tests/unit/test_cluster.py::ExecutionProfileTest::test_no_legacy_with_profile
  tests/unit/test_cluster.py::ExecutionProfileTest::test_no_legacy_with_profile
    /opt/python/cp39-cp39/lib/python3.9/unittest/case.py:201: DeprecationWarning: Setting the consistency level at the session level will be removed in 4.0. Consider using execution profiles and setting the desired consistency level to the EXEC_PROFILE_DEFAULT profile.
      callable_obj(*args, **kwargs)
  
  tests/unit/test_cluster.py::ExecutionProfileTest::test_no_profile_with_legacy
    /project/tests/unit/test_cluster.py:377: DeprecationWarning: Legacy execution parameters will be removed in 4.0. Consider using execution profiles.
      cluster = Cluster(load_balancing_policy=RoundRobinPolicy())
  
  tests/unit/test_cluster.py::ExecutionProfileTest::test_no_profile_with_legacy
    /project/tests/unit/test_cluster.py:388: DeprecationWarning: Setting the consistency level at the session level will be removed in 4.0. Consider using execution profiles and setting the desired consistency level to the EXEC_PROFILE_DEFAULT profile.
      setattr(session, attr, value)
  
  tests/unit/test_cluster.py::ExecutionProfileTest::test_no_warning_on_contact_points_with_lbp_legacy_mode
    /project/tests/unit/test_cluster.py:564: DeprecationWarning: Legacy execution parameters will be removed in 4.0. Consider using execution profiles.
      Cluster(**cluster_kwargs)
  
  tests/unit/test_cluster.py::ExecutionProfileTest::test_statement_params_override_legacy
    /project/tests/unit/test_cluster.py:325: DeprecationWarning: Legacy execution parameters will be removed in 4.0. Consider using execution profiles.
      cluster = Cluster(load_balancing_policy=RoundRobinPolicy(), default_retry_policy=DowngradingConsistencyRetryPolicy())
  
  tests/unit/test_metadata.py::MetadataHelpersTest::test_strip_frozen
  tests/unit/test_metadata.py::MetadataHelpersTest::test_strip_frozen
    <unknown>:1: DeprecationWarning: invalid escape sequence \
  
  tests/unit/test_response_future.py::ResponseFutureTests::test_add_callbacks
    /project/tests/unit/test_response_future.py:563: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      self.assertEqual(rf.result()[0], expected_result)
  
  tests/unit/test_response_future.py::ResponseFutureTests::test_callback
    /project/tests/unit/test_response_future.py:440: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      result = rf.result()[0]
  
  tests/unit/test_response_future.py::ResponseFutureTests::test_first_pool_shutdown
    /project/tests/unit/test_response_future.py:398: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      result = rf.result()[0]
  
  tests/unit/test_response_future.py::ResponseFutureTests::test_multiple_callbacks
    /project/tests/unit/test_response_future.py:490: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      result = rf.result()[0]
  
  tests/unit/test_response_future.py::ResponseFutureTests::test_other_result_message_kind
    /project/tests/unit/test_response_future.py:130: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      self.assertEqual(rf.result()[0], result)
  
  tests/unit/test_response_future.py::ResponseFutureTests::test_result_message
    /project/tests/unit/test_response_future.py:84: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      result = rf.result()[0]
  
  tests/unit/test_response_future.py::ResponseFutureTests::test_timeout_getting_connection_from_pool
    /project/tests/unit/test_response_future.py:422: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      self.assertEqual(rf.result()[0], expected_result)
  
  tests/unit/test_resultset.py::ResultSetTests::test_index_list_mode
    /project/tests/unit/test_resultset.py:122: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      self.assertEqual(rs[0], expected[0])
  
  tests/unit/test_resultset.py::ResultSetTests::test_index_list_mode
    /project/tests/unit/test_resultset.py:137: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      self.assertEqual(rs[0], expected[0])
  
  tests/unit/test_resultset.py::ResultSetTests::test_iterate_then_index
    /project/tests/unit/test_resultset.py:88: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      rs[0]
  
  tests/unit/test_resultset.py::ResultSetTests::test_iterate_then_index
    /project/tests/unit/test_resultset.py:92: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      rs[0]
  
  tests/unit/test_resultset.py::ResultSetTests::test_iterate_then_index
    /project/tests/unit/test_resultset.py:105: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      rs[0]
  
  tests/unit/test_resultset.py::ResultSetTests::test_iterate_then_index
  tests/unit/test_resultset.py::ResultSetTests::test_iterate_then_index
  tests/unit/test_resultset.py::ResultSetTests::test_iterate_then_index
  tests/unit/test_resultset.py::ResultSetTests::test_iterate_then_index
  tests/unit/test_resultset.py::ResultSetTests::test_iterate_then_index
    /project/tests/unit/test_resultset.py:109: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      rs[0]
  
  tests/unit/test_resultset.py::ResultSetTests::test_iterate_then_index
    /project/tests/unit/test_resultset.py:112: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      rs[0]
  
  tests/unit/test_resultset.py::ResultSetTests::test_list_non_paged
    /project/tests/unit/test_resultset.py:59: DeprecationWarning: ResultSet indexing support will be removed in 4.0. Consider using ResultSet.one() to get a single row.
      self.assertEqual(rs[i], expected[i])
  
  -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
  =========================== short test summary info ============================
  FAILED ../../../project/tests/unit/io/test_libevreactor.py::LibevTimerTest::test_multi_timer_validation
  = 1 failed, 617 passed, 15 skipped, 4 deselected, 75 warnings in 308.29s (0:05:08) =

dkropachev avatar Aug 05 '24 17:08 dkropachev

@fruch Is that because quemu stuff is too slow?

Lorak-mmk avatar Aug 05 '24 17:08 Lorak-mmk

@fruch Is that because quemu stuff is too slow?

Could be, all of the unittest with timers, are problematic in other platforms, i.e. in windows as an example.

fruch avatar Aug 05 '24 18:08 fruch

Now I saw it fails for twisted:

self = <tests.unit.io.test_twistedreactor.TestTwistedTimer testMethod=test_multi_timer_validation>
  
      def test_multi_timer_validation(self):
          """
          Verify that timer timeouts are honored appropriately
          """
          # Tests timers submitted in order at various timeouts
          submit_and_wait_for_completion(self, self.create_timer, 0, 100, 1, 100)
          # Tests timers submitted in reverse order at various timeouts
          submit_and_wait_for_completion(self, self.create_timer, 100, 0, -1, 100)
          # Tests timers submitted in varying order at various timeouts
  >       submit_and_wait_for_completion(self, self.create_timer, 0, 100, 1, 100, True),
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  
  D:\a\python-driver\python-driver\tests\unit\io\utils.py:169: 
  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  
  unit_test = <tests.unit.io.test_twistedreactor.TestTwistedTimer testMethod=test_multi_timer_validation>
  create_timer = <bound method TwistedConnection.create_timer of <class 'cassandra.io.twistedreactor.TwistedConnection'>>
  start = 0, end = 100, increment = 1, precision = 100, split_range = True
  
      def submit_and_wait_for_completion(unit_test, create_timer, start, end, increment, precision, split_range=False):
          """
         This will submit a number of timers to the provided connection. It will then ensure that the corresponding
         callback is invoked in the appropriate amount of time.
         :param unit_test:  Invoking unit tests
         :param connection: Connection to create the timer on.
         :param start: Lower bound of range.
         :param end: Upper bound of the time range
         :param increment: +1, or -1
         :param precision: 100 for centisecond, 1000 for milliseconds
         :param split_range: True to split the range between incrementing and decrementing.
         """
      
          # Various lists for tracking callback as completed or pending
          pending_callbacks = []
          completed_callbacks = []
      
          # submit timers with various timeouts
          for gross_time in range(start, end, increment):
              timeout = get_timeout(gross_time, start, end, precision, split_range)
              callback = TimerCallback(timeout)
              create_timer(timeout, callback.invoke)
              pending_callbacks.append(callback)
      
          # wait for all the callbacks associated with the timers to be invoked
          while len(pending_callbacks) is not 0:
              for callback in pending_callbacks:
                  if callback.was_invoked():
                      pending_callbacks.remove(callback)
                      completed_callbacks.append(callback)
              time.sleep(.1)
      
          # ensure they are all called back in a timely fashion
          for callback in completed_callbacks:
  >           assert callback.expected_wait == pytest.approx(callback.get_wait_time(), abs=.15)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  E           AssertionError
  
  D:\a\python-driver\python-driver\tests\unit\io\utils.py:132: AssertionError
  -------------------------- Captured stderr teardown ---------------------------
  Unhandled error in Deferred:
  
  Traceback (most recent call last):
  Failure: twisted.internet.error.ConnectionRefusedError: Connection was refused by other side: 10061: No connection could be made because the target machine actively refused it..

dkropachev avatar Nov 27 '25 13:11 dkropachev