Skip to content

testSimpleActorAsk50K functional test failing on MacOS with multiprocUDPBase #80

@gbanasiak

Description

@gbanasiak

Thespian version: recent snapshot (acf5cb2)

OS version:
MacOS Sequoia 15.2

% sw_vers
ProductName:		macOS
ProductVersion:		15.2
BuildVersion:		24C101

Description:

% py.test -v -k testSimpleActorAsk50K
=============================================================================================== test session starts ================================================================================================
platform darwin -- Python 3.12.2, pytest-8.3.4, pluggy-1.5.0 -- /Users/grzegorz/src/Thespian/.venv/bin/python
cachedir: .pytest_cache
rootdir: /Users/grzegorz/src/Thespian
collected 2722 items / 2716 deselected / 6 selected

thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[simpleSystemBase] PASSED                                                                                             [ 16%]
thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocQueueBase] PASSED                                                                                           [ 33%]
thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocUDPBase] FAILED                                                                                             [ 50%]
thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocTCPBase] PASSED                                                                                             [ 66%]
thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocTCPBase-AdminRouting] PASSED                                                                                [ 83%]
thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocTCPBase-AdminRoutingTXOnly] PASSED                                                                          [100%]

===================================================================================================== FAILURES =====================================================================================================
______________________________________________________________________ TestFuncSimpleActorOperations.testSimpleActorAsk50K[multiprocUDPBase] _______________________________________________________________________

self = <thespian.test.test_bigmessages.TestFuncSimpleActorOperations object at 0x102a7a300>, asys = <thespian.actors.ActorSystem object at 0x1012cbaa0>

    def testSimpleActorAsk50K(self, asys):
        whale = asys.createActor(Whale)
        shrimp = asys.createActor(Shrimp)
        testdata = (10*1024, 'hello')
        r = asys.ask(shrimp, testdata, askTimeout)
        assert r == 'hello'
        r = asys.ask(whale, testdata, askTimeout)
>       assert r == 'hello' * 10 * 1024
E       AssertionError: assert None == (('hello' * 10) * 1024)

thespian/test/test_bigmessages.py:54: AssertionError
----------------------------------------------------------------------------------------------- Captured stdout call -----------------------------------------------------------------------------------------------
Declaring transmit of TransportIntent(ActorAddr-(UDP|:61084)-pending-ExpiresIn_0:04:59.998085-<class 'str'>-hellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohellohello...-quit_0:04:59.998079) as Poison: Traceback (most recent call last):
  File "/Users/grzegorz/src/Thespian/thespian/system/systemCommon.py", line 173, in _send_intent_to_transport
    self.transport.scheduleTransmit(self._addrManager, intent)
  File "/Users/grzegorz/src/Thespian/thespian/system/transport/asyncTransportBase.py", line 214, in scheduleTransmit
    self._schedulePreparedIntent(transmitIntent, has_exclusive_flag=has_exclusive_flag)
  File "/Users/grzegorz/src/Thespian/thespian/system/transport/asyncTransportBase.py", line 316, in _schedulePreparedIntent
    if not self._runQueued(has_exclusive_flag=has_exclusive_flag):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/grzegorz/src/Thespian/thespian/system/transport/asyncTransportBase.py", line 146, in _runQueued
    self._submitTransmit(nextTransmit)
  File "/Users/grzegorz/src/Thespian/thespian/system/transport/asyncTransportBase.py", line 333, in _submitTransmit
    self._scheduleTransmitActual(transmitIntent, has_exclusive_flag=has_exclusive_flag)
  File "/Users/grzegorz/src/Thespian/thespian/system/transport/UDPTransport.py", line 267, in _scheduleTransmitActual
    r = self.socket.sendto(transmitIntent.serMsg,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 40] Message too long
Traceback (most recent call last):

  File "/Users/grzegorz/src/Thespian/thespian/system/systemCommon.py", line 173, in _send_intent_to_transport
    self.transport.scheduleTransmit(self._addrManager, intent)

  File "/Users/grzegorz/src/Thespian/thespian/system/transport/asyncTransportBase.py", line 214, in scheduleTransmit
    self._schedulePreparedIntent(transmitIntent, has_exclusive_flag=has_exclusive_flag)

  File "/Users/grzegorz/src/Thespian/thespian/system/transport/asyncTransportBase.py", line 316, in _schedulePreparedIntent
    if not self._runQueued(has_exclusive_flag=has_exclusive_flag):
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/Users/grzegorz/src/Thespian/thespian/system/transport/asyncTransportBase.py", line 146, in _runQueued
    self._submitTransmit(nextTransmit)

  File "/Users/grzegorz/src/Thespian/thespian/system/transport/asyncTransportBase.py", line 333, in _submitTransmit
    self._scheduleTransmitActual(transmitIntent, has_exclusive_flag=has_exclusive_flag)

  File "/Users/grzegorz/src/Thespian/thespian/system/transport/UDPTransport.py", line 267, in _scheduleTransmitActual
    r = self.socket.sendto(transmitIntent.serMsg,
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

OSError: [Errno 40] Message too long

================================================================================================= warnings summary =================================================================================================
thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocUDPBase]
thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocTCPBase]
thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocTCPBase-AdminRouting]
thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocTCPBase-AdminRoutingTXOnly]
  /Users/grzegorz/.pyenv/versions/3.12.2/lib/python3.12/multiprocessing/popen_fork.py:66: DeprecationWarning: This process (pid=45664) is multi-threaded, use of fork() may lead to deadlocks in the child.
    self.pid = os.fork()

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
============================================================================================= short test summary info ==============================================================================================
FAILED thespian/test/test_bigmessages.py::TestFuncSimpleActorOperations::testSimpleActorAsk50K[multiprocUDPBase] - AssertionError: assert None == (('hello' * 10) * 1024)
============================================================================= 1 failed, 5 passed, 2716 deselected, 4 warnings in 5.52s =============================================================================

There is a simple explanation:

% sudo sysctl net.inet.udp.maxdgram
net.inet.udp.maxdgram: 9216

After sudo sysctl net.inet.udp.maxdgram=65535 the test passes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions