Skip to content

Backport tox-dev/workflow bump to maint/11.0.x#829

Open
julianz- wants to merge 1 commit into
cherrypy:maint/11.0.xfrom
julianz-:backport/tox-dev-workflow-maint-11
Open

Backport tox-dev/workflow bump to maint/11.0.x#829
julianz- wants to merge 1 commit into
cherrypy:maint/11.0.xfrom
julianz-:backport/tox-dev-workflow-maint-11

Conversation

@julianz-

Copy link
Copy Markdown
Member

Updates the tox-dev/workflow to pick up the codecov/codecov-action bump required after Codecov migrated to a new GPG key following the acquisition by Harness. See PR #827

What kind of change does this PR introduce?

  • 🐞 bug fix
  • 🐣 feature
  • 📋 docs update
  • 📋 tests/coverage improvement
  • 📋 refactoring
  • 💥 other

📋 Contribution checklist:

  • I wrote descriptive pull request text above
  • I think the code is well written
  • I wrote [good commit messages]
  • I have [squashed related commits together][related squash] after
    the changes have been approved
  • Unit tests for the changes exist
  • Integration tests for the changes exist (if applicable)
  • I used the same coding conventions as the rest of the project
  • The new code doesn't generate linter offenses
  • Documentation reflects the changes
  • The PR relates to only one subject with a clear title
    and description in grammatically correct, complete sentences

Updates the tox-dev/workflow to pick up the codecov/codecov-action
bump required after Codecov migrated to a new GPG key following the
acquisition by Harness.
@codecov

codecov Bot commented Jun 23, 2026

Copy link
Copy Markdown

❌ 2 Tests Failed:

Tests completed Failed Passed Skipped
241 2 239 15
View the full list of 10 ❄️ flaky test(s)
cheroot/test/test_conn.py::test_streaming_10[False]

Flake rate in main: 12.64% (Passed 76 times, Failed 11 times)

Stack Traces | 0.032s run time
self = <cheroot.makefile.StreamWriter name=-1>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__del__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Destructor.  Calls close()."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            closed = #x1B[96mself#x1B[39;49;00m.closed#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m #x1B[96mAttributeError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[90m# If getting closed fails, then the object is probably#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# in an unusable state, so ignore.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m closed:#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m dealloc_warn := #x1B[96mgetattr#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m_dealloc_warn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
            dealloc_warn(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# If close() fails, the caller logs the exception with#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[90m# sys.unraisablehook. close() must be called at the end at __del__().#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       #x1B[96mself#x1B[39;49;00m.close()#x1B[90m#x1B[39;49;00m

closed     = False
dealloc_warn = <bound method _BufferedIOMixin._dealloc_warn of <cheroot.makefile.StreamWriter name=-1>>
self       = <cheroot.makefile.StreamWriter name=-1>

#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/arm64/lib/python3.14/_pyio.py#x1B[0m:418: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/arm64/lib/python3.14/_pyio.py#x1B[0m:1318: in close
    #x1B[0m#x1B[96mself#x1B[39;49;00m.flush()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/arm64/lib/python3.14/_pyio.py#x1B[0m:1279: in flush
    #x1B[0m#x1B[96mself#x1B[39;49;00m._flush_unlocked()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[31mcheroot/makefile.py#x1B[0m:32: in _flush_unlocked
    #x1B[0mn = #x1B[96mself#x1B[39;49;00m.raw.write(#x1B[96mbytes#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m._write_buf))#x1B[90m#x1B[39;49;00m
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <socket.SocketIO object at 0xffcf94fb1300>, b = b'1'

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mwrite#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, b):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Write the given bytes or bytearray object *b* to the socket#x1B[39;49;00m
    #x1B[33m    and return the number of bytes written.  This can be less than#x1B[39;49;00m
    #x1B[33m    len(b) if not all data could be written.  If the socket is#x1B[39;49;00m
    #x1B[33m    non-blocking and no bytes could be written None is returned.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkClosed()#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkWritable()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           #x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._sock.send(b)#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           OSError: [Errno 9] Bad file descriptor#x1B[0m

b          = b'1'
self       = <socket.SocketIO object at 0xffcf94fb1300>

#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/arm64/lib/python3.14/socket.py#x1B[0m:747: OSError

#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m

cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0xffcf90d2a4b0>
when = 'call'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    #x1B[0m#x1B[37m@classmethod#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mfrom_call#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mcls#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        func: Callable[[], TResult],#x1B[90m#x1B[39;49;00m
        when: Literal[#x1B[33m"#x1B[39;49;00m#x1B[33mcollect#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33msetup#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mcall#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mteardown#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m],#x1B[90m#x1B[39;49;00m
        reraise: #x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m] | #x1B[96mtuple#x1B[39;49;00m[#x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m], ...] | #x1B[94mNone#x1B[39;49;00m = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    ) -> CallInfo[TResult]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Call func, wrapping the result in a CallInfo.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    :param func:#x1B[39;49;00m
    #x1B[33m        The function to call. Called without arguments.#x1B[39;49;00m
    #x1B[33m    :type func: Callable[[], _pytest.runner.TResult]#x1B[39;49;00m
    #x1B[33m    :param when:#x1B[39;49;00m
    #x1B[33m        The phase in which the function is called.#x1B[39;49;00m
    #x1B[33m    :param reraise:#x1B[39;49;00m
    #x1B[33m        Exception or exceptions that shall propagate if raised by the#x1B[39;49;00m
    #x1B[33m        function, instead of being wrapped in the CallInfo.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        excinfo = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        instant = timing.Instant()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           result: TResult | #x1B[94mNone#x1B[39;49;00m = func()#x1B[90m#x1B[39;49;00m
                                     ^^^^^^#x1B[90m#x1B[39;49;00m

cls        = <class '_pytest.runner.CallInfo'>
duration   = Duration(start=Instant(time=1782248289.527695, perf_count=172.803909915), stop=Instant(time=1782248289.5593016, perf_count=172.835517839))
excinfo    = <ExceptionInfo PytestUnraisableExceptionWarning('Exception ignored while calling deallocator <function IOBase.__del__ at 0xffcf96af7480>: None\n') tblen=19>
func       = <function call_and_report.<locals>.<lambda> at 0xffcf90d2a4b0>
instant    = Instant(time=1782248289.527695, perf_count=172.803909915)
reraise    = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
result     = None
when       = 'call'

#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/_pytest/runner.py#x1B[0m:344: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/_pytest/runner.py#x1B[0m:246: in <lambda>
    #x1B[0m#x1B[94mlambda#x1B[39;49;00m: runtest_hook(item=item, **kwds), when=when, reraise=reraise#x1B[90m#x1B[39;49;00m
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_streaming_10[False]>
        kwds       = {}
        runtest_hook = <HookCaller 'pytest_runtest_call'>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/pluggy/_hooks.py#x1B[0m:512: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._hookexec(#x1B[96mself#x1B[39;49;00m.name, #x1B[96mself#x1B[39;49;00m._hookimpls.copy(), kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        kwargs     = {'item': <Function test_streaming_10[False]>}
        self       = <HookCaller 'pytest_runtest_call'>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/pluggy/_manager.py#x1B[0m:120: in _hookexec
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._inner_hookexec(hook_name, methods, kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        hook_name  = 'pytest_runtest_call'
        kwargs     = {'item': <Function test_streaming_10[False]>}
        methods    = [<HookImpl plugin_name='threadexception', plugin=<module '_pytest.threadexception' from '.../work/cheroot/che...pper name='/dev/null' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...]
        self       = <_pytest.config.PytestPluginManager object at 0xffcf97c44440>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/_pytest/logging.py#x1B[0m:850: in pytest_runtest_call
    #x1B[0m#x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        item       = <Function test_streaming_10[False]>
        self       = <_pytest.logging.LoggingPlugin object at 0xffcf96765e80>
#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/pluggy/_callers.py#x1B[0m:53: in run_old_style_hookwrapper
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m result.get_result()#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [<Function test_streaming_10[False]>]
        hook_impl  = <HookImpl plugin_name='_cov', plugin=<pytest_cov.plugin.CovPlugin object at 0xffcf971bd940>>
        hook_name  = 'pytest_runtest_call'
        result     = <pluggy._result.Result object at 0xffcf90d42180>
        teardown   = <generator object CovPlugin.pytest_runtest_call at 0xffcf94f82e30>
#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/pluggy/_callers.py#x1B[0m:38: in run_old_style_hookwrapper
    #x1B[0mres = #x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
          ^^^^^#x1B[90m#x1B[39;49;00m
        args       = [<Function test_streaming_10[False]>]
        hook_impl  = <HookImpl plugin_name='_cov', plugin=<pytest_cov.plugin.CovPlugin object at 0xffcf971bd940>>
        hook_name  = 'pytest_runtest_call'
        result     = <pluggy._result.Result object at 0xffcf90d42180>
        teardown   = <generator object CovPlugin.pytest_runtest_call at 0xffcf94f82e30>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/_pytest/capture.py#x1B[0m:900: in pytest_runtest_call
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m (#x1B[94myield#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            ^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_streaming_10[False]>
        self       = <CaptureManager _method='fd' _global_capturing=<MultiCapture out=<FDCapture 1 oldfd=7 _state='suspended' tmpfile=<Enco...xtIOWrapper name='/dev/null' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/_pytest/skipping.py#x1B[0m:263: in pytest_runtest_call
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m (#x1B[94myield#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            ^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_streaming_10[False]>
        xfailed    = None
#x1B[1m#x1B[31m..../py/lib/python3.14........./site-packages/_pytest/unraisableexception.py#x1B[0m:158: in pytest_runtest_call
    #x1B[0mcollect_unraisable(item.config)#x1B[90m#x1B[39;49;00m
        item       = <Function test_streaming_10[False]>
#x1B[1m#x1B[31m..../py/lib/python3.14........./site-packages/_pytest/unraisableexception.py#x1B[0m:79: in collect_unraisable
    #x1B[0m#x1B[94mraise#x1B[39;49;00m errors[#x1B[94m0#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        config     = <_pytest.config.Config object at 0xffcf97c45940>
        msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0xffcf96af7480>: None\n\nTraceback (most rece...47, in write\n    return self._sock.send(b)\n           ~~~~~~~~~~~~~~~^^^\nOSError: [Errno 9] Bad file descriptor\n\n'
        pop_unraisable = <built-in method pop of collections.deque object at 0xffcf9673c310>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

config = <_pytest.config.Config object at 0xffcf97c45940>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mcollect_unraisable#x1B[39;49;00m(config: Config) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        pop_unraisable = config.stash[unraisable_exceptions].pop#x1B[90m#x1B[39;49;00m
        errors: #x1B[96mlist#x1B[39;49;00m[pytest.PytestUnraisableExceptionWarning | #x1B[96mRuntimeError#x1B[39;49;00m] = []#x1B[90m#x1B[39;49;00m
        meta = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        hook_error = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94mwhile#x1B[39;49;00m #x1B[94mTrue#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    meta = pop_unraisable()#x1B[90m#x1B[39;49;00m
                #x1B[94mexcept#x1B[39;49;00m #x1B[96mIndexError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(meta, #x1B[96mBaseException#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
                    hook_error = #x1B[96mRuntimeError#x1B[39;49;00m(#x1B[33m"#x1B[39;49;00m#x1B[33mFailed to process unraisable exception#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
                    hook_error.__cause__ = meta#x1B[90m#x1B[39;49;00m
                    errors.append(hook_error)#x1B[90m#x1B[39;49;00m
                    #x1B[94mcontinue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                msg = meta.msg#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>                   warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE                   pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function IOBase.__del__ at 0xffcf96af7480>: None#x1B[0m

config     = <_pytest.config.Config object at 0xffcf97c45940>
msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0xffcf96af7480>: None\n\nTraceback (most rece...47, in write\n    return self._sock.send(b)\n           ~~~~~~~~~~~~~~~^^^\nOSError: [Errno 9] Bad file descriptor\n\n'
pop_unraisable = <built-in method pop of collections.deque object at 0xffcf9673c310>

#x1B[1m#x1B[31m..../py/lib/python3.14........./site-packages/_pytest/unraisableexception.py#x1B[0m:67: PytestUnraisableExceptionWarning
cheroot/test/test_core.py::test_malformed_http_method

Flake rate in main: 9.87% (Passed 274 times, Failed 30 times)

Stack Traces | 0.015s run time
self = <cheroot.makefile.StreamWriter name=-1>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__del__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Destructor.  Calls close()."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            closed = #x1B[96mself#x1B[39;49;00m.closed#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m #x1B[96mAttributeError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[90m# If getting closed fails, then the object is probably#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# in an unusable state, so ignore.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m closed:#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m dealloc_warn := #x1B[96mgetattr#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m_dealloc_warn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
            dealloc_warn(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# If close() fails, the caller logs the exception with#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[90m# sys.unraisablehook. close() must be called at the end at __del__().#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       #x1B[96mself#x1B[39;49;00m.close()#x1B[90m#x1B[39;49;00m

closed     = False
dealloc_warn = <bound method _BufferedIOMixin._dealloc_warn of <cheroot.makefile.StreamWriter name=-1>>
self       = <cheroot.makefile.StreamWriter name=-1>

#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/x64/lib/python3.14/_pyio.py#x1B[0m:418: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/x64/lib/python3.14/_pyio.py#x1B[0m:1318: in close
    #x1B[0m#x1B[96mself#x1B[39;49;00m.flush()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/x64/lib/python3.14/_pyio.py#x1B[0m:1279: in flush
    #x1B[0m#x1B[96mself#x1B[39;49;00m._flush_unlocked()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[31mcheroot/makefile.py#x1B[0m:32: in _flush_unlocked
    #x1B[0mn = #x1B[96mself#x1B[39;49;00m.raw.write(#x1B[96mbytes#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m._write_buf))#x1B[90m#x1B[39;49;00m
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <socket.SocketIO object at 0x7f0e9fed0fd0>, b = b'I have too many bytes'

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mwrite#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, b):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Write the given bytes or bytearray object *b* to the socket#x1B[39;49;00m
    #x1B[33m    and return the number of bytes written.  This can be less than#x1B[39;49;00m
    #x1B[33m    len(b) if not all data could be written.  If the socket is#x1B[39;49;00m
    #x1B[33m    non-blocking and no bytes could be written None is returned.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkClosed()#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkWritable()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           #x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._sock.send(b)#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           OSError: [Errno 9] Bad file descriptor#x1B[0m

b          = b'I have too many bytes'
self       = <socket.SocketIO object at 0x7f0e9fed0fd0>

#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/x64/lib/python3.14/socket.py#x1B[0m:747: OSError

#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m

cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7f0e9ca90720>
when = 'call'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    #x1B[0m#x1B[37m@classmethod#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mfrom_call#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mcls#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        func: Callable[[], TResult],#x1B[90m#x1B[39;49;00m
        when: Literal[#x1B[33m"#x1B[39;49;00m#x1B[33mcollect#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33msetup#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mcall#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mteardown#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m],#x1B[90m#x1B[39;49;00m
        reraise: #x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m] | #x1B[96mtuple#x1B[39;49;00m[#x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m], ...] | #x1B[94mNone#x1B[39;49;00m = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    ) -> CallInfo[TResult]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Call func, wrapping the result in a CallInfo.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    :param func:#x1B[39;49;00m
    #x1B[33m        The function to call. Called without arguments.#x1B[39;49;00m
    #x1B[33m    :type func: Callable[[], _pytest.runner.TResult]#x1B[39;49;00m
    #x1B[33m    :param when:#x1B[39;49;00m
    #x1B[33m        The phase in which the function is called.#x1B[39;49;00m
    #x1B[33m    :param reraise:#x1B[39;49;00m
    #x1B[33m        Exception or exceptions that shall propagate if raised by the#x1B[39;49;00m
    #x1B[33m        function, instead of being wrapped in the CallInfo.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        excinfo = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        instant = timing.Instant()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           result: TResult | #x1B[94mNone#x1B[39;49;00m = func()#x1B[90m#x1B[39;49;00m
                                     ^^^^^^#x1B[90m#x1B[39;49;00m

cls        = <class '_pytest.runner.CallInfo'>
duration   = Duration(start=Instant(time=1782248118.1089125, perf_count=157.302111978), stop=Instant(time=1782248118.1236851, perf_count=157.316885042))
excinfo    = <ExceptionInfo PytestUnraisableExceptionWarning('Exception ignored while calling deallocator <function IOBase.__del__ at 0x7f0ea5a4f480>: None\n') tblen=19>
func       = <function call_and_report.<locals>.<lambda> at 0x7f0e9ca90720>
instant    = Instant(time=1782248118.1089125, perf_count=157.302111978)
reraise    = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
result     = None
when       = 'call'

#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/_pytest/runner.py#x1B[0m:344: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/_pytest/runner.py#x1B[0m:246: in <lambda>
    #x1B[0m#x1B[94mlambda#x1B[39;49;00m: runtest_hook(item=item, **kwds), when=when, reraise=reraise#x1B[90m#x1B[39;49;00m
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_malformed_http_method>
        kwds       = {}
        runtest_hook = <HookCaller 'pytest_runtest_call'>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/pluggy/_hooks.py#x1B[0m:512: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._hookexec(#x1B[96mself#x1B[39;49;00m.name, #x1B[96mself#x1B[39;49;00m._hookimpls.copy(), kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        kwargs     = {'item': <Function test_malformed_http_method>}
        self       = <HookCaller 'pytest_runtest_call'>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/pluggy/_manager.py#x1B[0m:120: in _hookexec
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._inner_hookexec(hook_name, methods, kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        hook_name  = 'pytest_runtest_call'
        kwargs     = {'item': <Function test_malformed_http_method>}
        methods    = [<HookImpl plugin_name='threadexception', plugin=<module '_pytest.threadexception' from '.../work/cheroot/che...pper name='/dev/null' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...]
        self       = <_pytest.config.PytestPluginManager object at 0x7f0ea68c8440>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/_pytest/logging.py#x1B[0m:850: in pytest_runtest_call
    #x1B[0m#x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        item       = <Function test_malformed_http_method>
        self       = <_pytest.logging.LoggingPlugin object at 0x7f0ea56ade80>
#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/pluggy/_callers.py#x1B[0m:53: in run_old_style_hookwrapper
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m result.get_result()#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        args       = [<Function test_malformed_http_method>]
        hook_impl  = <HookImpl plugin_name='_cov', plugin=<pytest_cov.plugin.CovPlugin object at 0x7f0ea5f99a90>>
        hook_name  = 'pytest_runtest_call'
        result     = <pluggy._result.Result object at 0x7f0e9ca49dc0>
        teardown   = <generator object CovPlugin.pytest_runtest_call at 0x7f0e9caa47c0>
#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/pluggy/_callers.py#x1B[0m:38: in run_old_style_hookwrapper
    #x1B[0mres = #x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
          ^^^^^#x1B[90m#x1B[39;49;00m
        args       = [<Function test_malformed_http_method>]
        hook_impl  = <HookImpl plugin_name='_cov', plugin=<pytest_cov.plugin.CovPlugin object at 0x7f0ea5f99a90>>
        hook_name  = 'pytest_runtest_call'
        result     = <pluggy._result.Result object at 0x7f0e9ca49dc0>
        teardown   = <generator object CovPlugin.pytest_runtest_call at 0x7f0e9caa47c0>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/_pytest/capture.py#x1B[0m:900: in pytest_runtest_call
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m (#x1B[94myield#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            ^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_malformed_http_method>
        self       = <CaptureManager _method='fd' _global_capturing=<MultiCapture out=<FDCapture 1 oldfd=7 _state='suspended' tmpfile=<Enco...xtIOWrapper name='/dev/null' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/_pytest/skipping.py#x1B[0m:263: in pytest_runtest_call
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m (#x1B[94myield#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            ^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_malformed_http_method>
        xfailed    = None
#x1B[1m#x1B[31m..../py/lib/python3.14........./site-packages/_pytest/unraisableexception.py#x1B[0m:158: in pytest_runtest_call
    #x1B[0mcollect_unraisable(item.config)#x1B[90m#x1B[39;49;00m
        item       = <Function test_malformed_http_method>
#x1B[1m#x1B[31m..../py/lib/python3.14........./site-packages/_pytest/unraisableexception.py#x1B[0m:79: in collect_unraisable
    #x1B[0m#x1B[94mraise#x1B[39;49;00m errors[#x1B[94m0#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        config     = <_pytest.config.Config object at 0x7f0ea68c9940>
        msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x7f0ea5a4f480>: None\n\nTraceback (most rece...47, in write\n    return self._sock.send(b)\n           ~~~~~~~~~~~~~~~^^^\nOSError: [Errno 9] Bad file descriptor\n\n'
        pop_unraisable = <built-in method pop of collections.deque object at 0x7f0ea5690310>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

config = <_pytest.config.Config object at 0x7f0ea68c9940>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mcollect_unraisable#x1B[39;49;00m(config: Config) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        pop_unraisable = config.stash[unraisable_exceptions].pop#x1B[90m#x1B[39;49;00m
        errors: #x1B[96mlist#x1B[39;49;00m[pytest.PytestUnraisableExceptionWarning | #x1B[96mRuntimeError#x1B[39;49;00m] = []#x1B[90m#x1B[39;49;00m
        meta = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        hook_error = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94mwhile#x1B[39;49;00m #x1B[94mTrue#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    meta = pop_unraisable()#x1B[90m#x1B[39;49;00m
                #x1B[94mexcept#x1B[39;49;00m #x1B[96mIndexError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(meta, #x1B[96mBaseException#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
                    hook_error = #x1B[96mRuntimeError#x1B[39;49;00m(#x1B[33m"#x1B[39;49;00m#x1B[33mFailed to process unraisable exception#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
                    hook_error.__cause__ = meta#x1B[90m#x1B[39;49;00m
                    errors.append(hook_error)#x1B[90m#x1B[39;49;00m
                    #x1B[94mcontinue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                msg = meta.msg#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>                   warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE                   pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function IOBase.__del__ at 0x7f0ea5a4f480>: None#x1B[0m

config     = <_pytest.config.Config object at 0x7f0ea68c9940>
msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x7f0ea5a4f480>: None\n\nTraceback (most rece...47, in write\n    return self._sock.send(b)\n           ~~~~~~~~~~~~~~~^^^\nOSError: [Errno 9] Bad file descriptor\n\n'
pop_unraisable = <built-in method pop of collections.deque object at 0x7f0ea5690310>

#x1B[1m#x1B[31m..../py/lib/python3.14........./site-packages/_pytest/unraisableexception.py#x1B[0m:67: PytestUnraisableExceptionWarning
cheroot/test/test_core.py::test_parse_uri_absolute_uri

Flake rate in main: 7.80% (Passed 189 times, Failed 16 times)

Stack Traces | 0s run time
self = <cheroot.makefile.StreamWriter name=-1>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__del__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Destructor.  Calls close()."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            closed = #x1B[96mself#x1B[39;49;00m.closed#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m #x1B[96mAttributeError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[90m# If getting closed fails, then the object is probably#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# in an unusable state, so ignore.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m closed:#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m dealloc_warn := #x1B[96mgetattr#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m_dealloc_warn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
            dealloc_warn(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# If close() fails, the caller logs the exception with#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[90m# sys.unraisablehook. close() must be called at the end at __del__().#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       #x1B[96mself#x1B[39;49;00m.close()#x1B[90m#x1B[39;49;00m

closed     = False
dealloc_warn = <bound method _BufferedIOMixin._dealloc_warn of <cheroot.makefile.StreamWriter name=-1>>
self       = <cheroot.makefile.StreamWriter name=-1>

#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/x64/lib/python3.14/_pyio.py#x1B[0m:418: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/x64/lib/python3.14/_pyio.py#x1B[0m:1318: in close
    #x1B[0m#x1B[96mself#x1B[39;49;00m.flush()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/x64/lib/python3.14/_pyio.py#x1B[0m:1279: in flush
    #x1B[0m#x1B[96mself#x1B[39;49;00m._flush_unlocked()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[31mcheroot/makefile.py#x1B[0m:32: in _flush_unlocked
    #x1B[0mn = #x1B[96mself#x1B[39;49;00m.raw.write(#x1B[96mbytes#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m._write_buf))#x1B[90m#x1B[39;49;00m
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <socket.SocketIO object at 0x7fb2bdd36d70>, b = b'I have too many bytes'

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mwrite#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, b):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Write the given bytes or bytearray object *b* to the socket#x1B[39;49;00m
    #x1B[33m    and return the number of bytes written.  This can be less than#x1B[39;49;00m
    #x1B[33m    len(b) if not all data could be written.  If the socket is#x1B[39;49;00m
    #x1B[33m    non-blocking and no bytes could be written None is returned.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkClosed()#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkWritable()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           #x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._sock.send(b)#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           OSError: [Errno 9] Bad file descriptor#x1B[0m

b          = b'I have too many bytes'
self       = <socket.SocketIO object at 0x7fb2bdd36d70>

#x1B[1m#x1B[.../hostedtoolcache/Python/3.14.6............/x64/lib/python3.14/socket.py#x1B[0m:747: OSError

#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m

cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x7fb2bc1cd380>
when = 'setup'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    #x1B[0m#x1B[37m@classmethod#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mfrom_call#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mcls#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        func: Callable[[], TResult],#x1B[90m#x1B[39;49;00m
        when: Literal[#x1B[33m"#x1B[39;49;00m#x1B[33mcollect#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33msetup#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mcall#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mteardown#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m],#x1B[90m#x1B[39;49;00m
        reraise: #x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m] | #x1B[96mtuple#x1B[39;49;00m[#x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m], ...] | #x1B[94mNone#x1B[39;49;00m = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    ) -> CallInfo[TResult]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Call func, wrapping the result in a CallInfo.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    :param func:#x1B[39;49;00m
    #x1B[33m        The function to call. Called without arguments.#x1B[39;49;00m
    #x1B[33m    :type func: Callable[[], _pytest.runner.TResult]#x1B[39;49;00m
    #x1B[33m    :param when:#x1B[39;49;00m
    #x1B[33m        The phase in which the function is called.#x1B[39;49;00m
    #x1B[33m    :param reraise:#x1B[39;49;00m
    #x1B[33m        Exception or exceptions that shall propagate if raised by the#x1B[39;49;00m
    #x1B[33m        function, instead of being wrapped in the CallInfo.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        excinfo = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        instant = timing.Instant()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           result: TResult | #x1B[94mNone#x1B[39;49;00m = func()#x1B[90m#x1B[39;49;00m
                                     ^^^^^^#x1B[90m#x1B[39;49;00m

cls        = <class '_pytest.runner.CallInfo'>
duration   = Duration(start=Instant(time=1782248288.6407893, perf_count=82.887921625), stop=Instant(time=1782248288.8420756, perf_count=83.089208874))
excinfo    = <ExceptionInfo PytestUnraisableExceptionWarning('Exception ignored while calling deallocator <function IOBase.__del__ at 0x7fb2be1f7480>: None\n') tblen=13>
func       = <function call_and_report.<locals>.<lambda> at 0x7fb2bc1cd380>
instant    = Instant(time=1782248288.6407893, perf_count=82.887921625)
reraise    = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
result     = None
when       = 'setup'

#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/_pytest/runner.py#x1B[0m:344: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[31m..../py/lib/python3.14....../site-packages/_pytest/runner.py#x1B[0m:246: in <lambda>
    #x1B[0m#x1B[94mlambda#x1B[39;49;00m: runtest_hook(item=item, **kwds), when=when, reraise=reraise#x1B[90m#x1B[39;49;00m
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_parse_uri_absolute_uri>
        kwds       = {}
        runtest_hook = <HookCaller 'pytest_runtest_setup'>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/pluggy/_hooks.py#x1B[0m:512: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._hookexec(#x1B[96mself#x1B[39;49;00m.name, #x1B[96mself#x1B[39;49;00m._hookimpls.copy(), kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        kwargs     = {'item': <Function test_parse_uri_absolute_uri>}
        self       = <HookCaller 'pytest_runtest_setup'>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/pluggy/_manager.py#x1B[0m:120: in _hookexec
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._inner_hookexec(hook_name, methods, kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        hook_name  = 'pytest_runtest_setup'
        kwargs     = {'item': <Function test_parse_uri_absolute_uri>}
        methods    = [<HookImpl plugin_name='threadexception', plugin=<module '_pytest.threadexception' from '.../work/cheroot/che...pper name='/dev/null' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...]
        self       = <_pytest.config.PytestPluginManager object at 0x7fb2bf064440>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/_pytest/logging.py#x1B[0m:843: in pytest_runtest_setup
    #x1B[0m#x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        empty      = {'setup': []}
        item       = <Function test_parse_uri_absolute_uri>
        self       = <_pytest.logging.LoggingPlugin object at 0x7fb2bde61e80>
#x1B[1m#x1B[31m..../py/lib/python3.14.../site-packages/_pytest/capture.py#x1B[0m:895: in pytest_runtest_setup
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m (#x1B[94myield#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            ^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_parse_uri_absolute_uri>
        self       = <CaptureManager _method='fd' _global_capturing=<MultiCapture out=<FDCapture 1 oldfd=7 _state='suspended' tmpfile=<Enco...xtIOWrapper name='/dev/null' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>
#x1B[1m#x1B[31m..../py/lib/python3.14........./site-packages/_pytest/unraisableexception.py#x1B[0m:153: in pytest_runtest_setup
    #x1B[0mcollect_unraisable(item.config)#x1B[90m#x1B[39;49;00m
        item       = <Function test_parse_uri_absolute_uri>
#x1B[1m#x1B[31m..../py/lib/python3.14........./site-packages/_pytest/unraisableexception.py#x1B[0m:79: in collect_unraisable
    #x1B[0m#x1B[94mraise#x1B[39;49;00m errors[#x1B[94m0#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        config     = <_pytest.config.Config object at 0x7fb2bf065940>
        msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x7fb2be1f7480>: None\n\nTraceback (most rece...47, in write\n    return self._sock.send(b)\n           ~~~~~~~~~~~~~~~^^^\nOSError: [Errno 9] Bad file descriptor\n\n'
        pop_unraisable = <built-in method pop of collections.deque object at 0x7fb2bde44310>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

config = <_pytest.config.Config object at 0x7fb2bf065940>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mcollect_unraisable#x1B[39;49;00m(config: Config) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        pop_unraisable = config.stash[unraisable_exceptions].pop#x1B[90m#x1B[39;49;00m
        errors: #x1B[96mlist#x1B[39;49;00m[pytest.PytestUnraisableExceptionWarning | #x1B[96mRuntimeError#x1B[39;49;00m] = []#x1B[90m#x1B[39;49;00m
        meta = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        hook_error = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94mwhile#x1B[39;49;00m #x1B[94mTrue#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    meta = pop_unraisable()#x1B[90m#x1B[39;49;00m
                #x1B[94mexcept#x1B[39;49;00m #x1B[96mIndexError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(meta, #x1B[96mBaseException#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
                    hook_error = #x1B[96mRuntimeError#x1B[39;49;00m(#x1B[33m"#x1B[39;49;00m#x1B[33mFailed to process unraisable exception#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
                    hook_error.__cause__ = meta#x1B[90m#x1B[39;49;00m
                    errors.append(hook_error)#x1B[90m#x1B[39;49;00m
                    #x1B[94mcontinue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                msg = meta.msg#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>                   warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE                   pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function IOBase.__del__ at 0x7fb2be1f7480>: None#x1B[0m

config     = <_pytest.config.Config object at 0x7fb2bf065940>
msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x7fb2be1f7480>: None\n\nTraceback (most rece...47, in write\n    return self._sock.send(b)\n           ~~~~~~~~~~~~~~~^^^\nOSError: [Errno 9] Bad file descriptor\n\n'
pop_unraisable = <built-in method pop of collections.deque object at 0x7fb2bde44310>

#x1B[1m#x1B[31m..../py/lib/python3.14........./site-packages/_pytest/unraisableexception.py#x1B[0m:67: PytestUnraisableExceptionWarning
cheroot/test/test_server.py::test_overload_results_in_suitable_http_error

Flake rate in main: 10.32% (Passed 113 times, Failed 13 times)

Stack Traces | 0.01s run time
+ Exception Group Traceback (most recent call last):
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14....../site-packages/_pytest/runner.py", line 344, in from_call
  |     result: TResult | None = func()
  |                              ~~~~^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14....../site-packages/_pytest/runner.py", line 246, in <lambda>
  |     lambda: runtest_hook(item=item, **kwds), when=when, reraise=reraise
  |             ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14.../site-packages/pluggy/_hooks.py", line 512, in __call__
  |     return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
  |            ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14.../site-packages/pluggy/_manager.py", line 120, in _hookexec
  |     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  |            ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14......................../site-packages/pluggy/_callers.py", line 167, in _multicall
  |     raise exception
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14......................../site-packages/pluggy/_callers.py", line 139, in _multicall
  |     teardown.throw(exception)
  |     ~~~~~~~~~~~~~~^^^^^^^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14.../site-packages/_pytest/logging.py", line 850, in pytest_runtest_call
  |     yield
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14......................../site-packages/pluggy/_callers.py", line 139, in _multicall
  |     teardown.throw(exception)
  |     ~~~~~~~~~~~~~~^^^^^^^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14......................../site-packages/pluggy/_callers.py", line 53, in run_old_style_hookwrapper
  |     return result.get_result()
  |            ~~~~~~~~~~~~~~~~~^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14.../site-packages/pluggy/_result.py", line 103, in get_result
  |     raise exc.with_traceback(tb)
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14......................../site-packages/pluggy/_callers.py", line 38, in run_old_style_hookwrapper
  |     res = yield
  |           ^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14......................../site-packages/pluggy/_callers.py", line 139, in _multicall
  |     teardown.throw(exception)
  |     ~~~~~~~~~~~~~~^^^^^^^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14.../site-packages/_pytest/capture.py", line 900, in pytest_runtest_call
  |     return (yield)
  |             ^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14......................../site-packages/pluggy/_callers.py", line 139, in _multicall
  |     teardown.throw(exception)
  |     ~~~~~~~~~~~~~~^^^^^^^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14.../site-packages/_pytest/skipping.py", line 263, in pytest_runtest_call
  |     return (yield)
  |             ^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14......................../site-packages/pluggy/_callers.py", line 121, in _multicall
  |     res = hook_impl.function(*args)
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14............/site-packages/_pytest/unraisableexception.py", line 158, in pytest_runtest_call
  |     collect_unraisable(item.config)
  |     ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14............/site-packages/_pytest/unraisableexception.py", line 81, in collect_unraisable
  |     raise ExceptionGroup("multiple unraisable exception warnings", errors)
  | ExceptionGroup: multiple unraisable exception warnings (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File ".........................../Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/_pyio.py", line 415, in __del__
    |     self.close()
    |     ~~~~~~~~~~^^
    |   File ".........................../Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/_pyio.py", line 1314, in close
    |     self.flush()
    |     ~~~~~~~~~~^^
    |   File ".........................../Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/_pyio.py", line 1275, in flush
    |     self._flush_unlocked()
    |     ~~~~~~~~~~~~~~~~~~~~^^
    |   File ".../cheroot/cheroot/makefile.py", line 32, in _flush_unlocked
    |     n = self.raw.write(bytes(self._write_buf))
    |   File ".........................../Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/socket.py", line 747, in write
    |     return self._sock.send(b)
    |            ~~~~~~~~~~~~~~~^^^
    | OSError: [Errno 9] Bad file descriptor
    | 
    | The above exception was the direct cause of the following exception:
    | 
    | Traceback (most recent call last):
    |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14............/site-packages/_pytest/unraisableexception.py", line 67, in collect_unraisable
    |     warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
    |     ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function IOBase.__del__ at 0x1074c5640>: None
    | 
    +---------------- 2 ----------------
    | Traceback (most recent call last):
    |   File ".../cheroot/cheroot/server.py", line 2226, in process_conn
    |     self.requests.put(conn)
    |     ~~~~~~~~~~~~~~~~~^^^^^^
    |   File ".../cheroot/workers/threadpool.py", line 304, in put
    |     self._queue.put(obj, block=True, timeout=self._queue_put_timeout)
    |     ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |   File ".........................../Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/queue.py", line 169, in put
    |     raise Full
    | queue.Full
    | 
    | During handling of the above exception, another exception occurred:
    | 
    | Traceback (most recent call last):
    |   File ".........................../Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/_pyio.py", line 415, in __del__
    |     self.close()
    |     ~~~~~~~~~~^^
    |   File ".........................../Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/_pyio.py", line 1314, in close
    |     self.flush()
    |     ~~~~~~~~~~^^
    |   File ".........................../Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/_pyio.py", line 1275, in flush
    |     self._flush_unlocked()
    |     ~~~~~~~~~~~~~~~~~~~~^^
    |   File ".../cheroot/cheroot/makefile.py", line 32, in _flush_unlocked
    |     n = self.raw.write(bytes(self._write_buf))
    |   File ".........................../Library/Frameworks/Python.framework/Versions/3.14/lib/python3.14/socket.py", line 747, in write
    |     return self._sock.send(b)
    |            ~~~~~~~~~~~~~~~^^^
    | OSError: [Errno 9] Bad file descriptor
    | 
    | The above exception was the direct cause of the following exception:
    | 
    | Traceback (most recent call last):
    |   File ".../cheroot/cheroot/.tox............................................................/py/lib/python3.14............/site-packages/_pytest/unraisableexception.py", line 67, in collect_unraisable
    |     warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))
    |     ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    | pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function IOBase.__del__ at 0x1074c5640>: None
    | 
    +------------------------------------
cheroot\test\test_conn.py::test::test_conn::test_Content_Length_out[/wrong_cl_unbuffered-200-I too]

Flake rate in main: 8.50% (Passed 183 times, Failed 17 times)

Stack Traces | 0.002s run time
self = <cheroot.server.HTTPConnection object at 0x00000234D43002D0>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mcommunicate#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m):  #x1B[90m# noqa: C901  # FIXME#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Read each request and respond appropriately.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    Returns true if the connection should be kept open.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        request_seen = #x1B[94mFalse#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            req = #x1B[96mself#x1B[39;49;00m.RequestHandlerClass(#x1B[96mself#x1B[39;49;00m.server, #x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            req.parse_request()#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.server.stats[#x1B[33m'#x1B[39;49;00m#x1B[33mEnabled#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m]:#x1B[90m#x1B[39;49;00m
                #x1B[96mself#x1B[39;49;00m.requests_seen += #x1B[94m1#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m req.ready:#x1B[90m#x1B[39;49;00m
                #x1B[90m# Something went wrong in the parsing (and the server has#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[90m# probably already made a simple_response). Return and#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[90m# let the conn close.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[94mreturn#x1B[39;49;00m #x1B[94mFalse#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            request_seen = #x1B[94mTrue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>           req.respond()#x1B[90m#x1B[39;49;00m

req        = <cheroot.server.HTTPRequest object at 0x00000234D3EB3950>
request_seen = True
self       = <cheroot.server.HTTPConnection object at 0x00000234D43002D0>

#x1B[1m#x1B[31mcheroot\server.py#x1B[0m:1347: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31mcheroot\server.py#x1B[0m:1138: in respond
    #x1B[0m#x1B[96mself#x1B[39;49;00m.server.gateway(#x1B[96mself#x1B[39;49;00m).respond()#x1B[90m#x1B[39;49;00m
        cl         = 0
        mrbs       = 1001
        self       = <cheroot.server.HTTPRequest object at 0x00000234D3EB3950>
#x1B[1m#x1B[31mcheroot\wsgi.py#x1B[0m:153: in respond
    #x1B[0m#x1B[96mself#x1B[39;49;00m.write(chunk)#x1B[90m#x1B[39;49;00m
        chunk      = b' have too many bytes'
        response   = [b'I too', b' have too many bytes']
        self       = <cheroot.wsgi.Gateway_10 object at 0x00000234D3EB3BB0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <cheroot.wsgi.Gateway_10 object at 0x00000234D3EB3BB0>, chunk = b' have'

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mwrite#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, chunk):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""WSGI callable to write unbuffered data to the client.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    This method is also used internally by start_response (to write#x1B[39;49;00m
    #x1B[33m    data from the iterable returned by the WSGI application).#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.started_response:#x1B[90m#x1B[39;49;00m
            #x1B[94mraise#x1B[39;49;00m #x1B[96mRuntimeError#x1B[39;49;00m(#x1B[33m'#x1B[39;49;00m#x1B[33mWSGI write called before start_response.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        chunklen = #x1B[96mlen#x1B[39;49;00m(chunk)#x1B[90m#x1B[39;49;00m
        rbo = #x1B[96mself#x1B[39;49;00m.remaining_bytes_out#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m rbo #x1B[95mis#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m #x1B[95mand#x1B[39;49;00m chunklen > rbo:#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m.req.sent_headers:#x1B[90m#x1B[39;49;00m
                #x1B[90m# Whew. We can send a 500 to the client.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[96mself#x1B[39;49;00m.req.simple_response(#x1B[90m#x1B[39;49;00m
                    #x1B[33m'#x1B[39;49;00m#x1B[33m500 Internal Server Error#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                    #x1B[33m'#x1B[39;49;00m#x1B[33mThe requested resource returned more bytes than the #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[33m'#x1B[39;49;00m#x1B[33mdeclared Content-Length.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m
            #x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[90m# Dang. We have probably already sent data. Truncate the chunk#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[90m# to fit (so the client doesn't hang) and raise an error later.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                chunk = chunk[:rbo]#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m.req.ensure_headers_sent()#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m.req.write(chunk)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m rbo #x1B[95mis#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            rbo -= chunklen#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m rbo < #x1B[94m0#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>               #x1B[94mraise#x1B[39;49;00m #x1B[96mValueError#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
                    #x1B[33m'#x1B[39;49;00m#x1B[33mResponse body exceeds the declared Content-Length.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE               ValueError: Response body exceeds the declared Content-Length.#x1B[0m

chunk      = b' have'
chunklen   = 20
rbo        = -15
self       = <cheroot.wsgi.Gateway_10 object at 0x00000234D3EB3BB0>

#x1B[1m#x1B[31mcheroot\wsgi.py#x1B[0m:239: ValueError

#x1B[33mDuring handling of the above exception, another exception occurred:#x1B[0m

self = <cheroot.makefile.StreamWriter name=-1>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__del__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Destructor.  Calls close()."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            closed = #x1B[96mself#x1B[39;49;00m.closed#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m #x1B[96mAttributeError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[90m# If getting closed fails, then the object is probably#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# in an unusable state, so ignore.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m closed:#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m dealloc_warn := #x1B[96mgetattr#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m_dealloc_warn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
            dealloc_warn(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# If close() fails, the caller logs the exception with#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[90m# sys.unraisablehook. close() must be called at the end at __del__().#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       #x1B[96mself#x1B[39;49;00m.close()#x1B[90m#x1B[39;49;00m

closed     = False
dealloc_warn = <bound method _BufferedIOMixin._dealloc_warn of <cheroot.makefile.StreamWriter name=-1>>
self       = <cheroot.makefile.StreamWriter name=-1>

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\_pyio.py#x1B[0m:418: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\_pyio.py#x1B[0m:1318: in close
    #x1B[0m#x1B[96mself#x1B[39;49;00m.flush()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\_pyio.py#x1B[0m:1279: in flush
    #x1B[0m#x1B[96mself#x1B[39;49;00m._flush_unlocked()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[31mcheroot\makefile.py#x1B[0m:32: in _flush_unlocked
    #x1B[0mn = #x1B[96mself#x1B[39;49;00m.raw.write(#x1B[96mbytes#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m._write_buf))#x1B[90m#x1B[39;49;00m
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <socket.SocketIO object at 0x00000234D3DA1B10>
b = b'I have too many bytes'

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mwrite#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, b):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Write the given bytes or bytearray object *b* to the socket#x1B[39;49;00m
    #x1B[33m    and return the number of bytes written.  This can be less than#x1B[39;49;00m
    #x1B[33m    len(b) if not all data could be written.  If the socket is#x1B[39;49;00m
    #x1B[33m    non-blocking and no bytes could be written None is returned.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkClosed()#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkWritable()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           #x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._sock.send(b)#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           OSError: [WinError 10038] An operation was attempted on something that is not a socket#x1B[0m

b          = b'I have too many bytes'
self       = <socket.SocketIO object at 0x00000234D3DA1B10>

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\socket.py#x1B[0m:747: OSError

#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m

cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x00000234D4118720>
when = 'teardown'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    #x1B[0m#x1B[37m@classmethod#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mfrom_call#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mcls#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        func: Callable[[], TResult],#x1B[90m#x1B[39;49;00m
        when: Literal[#x1B[33m"#x1B[39;49;00m#x1B[33mcollect#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33msetup#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mcall#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mteardown#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m],#x1B[90m#x1B[39;49;00m
        reraise: #x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m] | #x1B[96mtuple#x1B[39;49;00m[#x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m], ...] | #x1B[94mNone#x1B[39;49;00m = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    ) -> CallInfo[TResult]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Call func, wrapping the result in a CallInfo.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    :param func:#x1B[39;49;00m
    #x1B[33m        The function to call. Called without arguments.#x1B[39;49;00m
    #x1B[33m    :type func: Callable[[], _pytest.runner.TResult]#x1B[39;49;00m
    #x1B[33m    :param when:#x1B[39;49;00m
    #x1B[33m        The phase in which the function is called.#x1B[39;49;00m
    #x1B[33m    :param reraise:#x1B[39;49;00m
    #x1B[33m        Exception or exceptions that shall propagate if raised by the#x1B[39;49;00m
    #x1B[33m        function, instead of being wrapped in the CallInfo.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        excinfo = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        instant = timing.Instant()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           result: TResult | #x1B[94mNone#x1B[39;49;00m = func()#x1B[90m#x1B[39;49;00m
                                     ^^^^^^#x1B[90m#x1B[39;49;00m

cls        = <class '_pytest.runner.CallInfo'>
duration   = Duration(start=Instant(time=1782248323.7830725, perf_count=3516.5887798), stop=Instant(time=1782248323.8383296, perf_count=3516.6440378))
excinfo    = <ExceptionInfo PytestUnraisableExceptionWarning('Exception ignored while calling deallocator <function IOBase.__del__ at 0x00000234D197F1C0>: None\n') tblen=13>
func       = <function call_and_report.<locals>.<lambda> at 0x00000234D4118720>
instant    = Instant(time=1782248323.7830725, perf_count=3516.5887798)
reraise    = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
result     = None
when       = 'teardown'

#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\runner.py#x1B[0m:344: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\runner.py#x1B[0m:246: in <lambda>
    #x1B[0m#x1B[94mlambda#x1B[39;49;00m: runtest_hook(item=item, **kwds), when=when, reraise=reraise#x1B[90m#x1B[39;49;00m
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_Content_Length_out[/wrong_cl_unbuffered-200-I too]>
        kwds       = {'nextitem': <Function test_598>}
        runtest_hook = <HookCaller 'pytest_runtest_teardown'>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\pluggy\_hooks.py#x1B[0m:512: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._hookexec(#x1B[96mself#x1B[39;49;00m.name, #x1B[96mself#x1B[39;49;00m._hookimpls.copy(), kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        kwargs     = {'item': <Function test_Content_Length_out[/wrong_cl_unbuffered-200-I too]>, 'nextitem': <Function test_598>}
        self       = <HookCaller 'pytest_runtest_teardown'>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\pluggy\_manager.py#x1B[0m:120: in _hookexec
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._inner_hookexec(hook_name, methods, kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        hook_name  = 'pytest_runtest_teardown'
        kwargs     = {'item': <Function test_Content_Length_out[/wrong_cl_unbuffered-200-I too]>, 'nextitem': <Function test_598>}
        methods    = [<HookImpl plugin_name='threadexception', plugin=<module '_pytest.threadexception' from 'D:\\a\\cheroot\\cheroot\\.tox...tIOWrapper name='nul' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...]
        self       = <_pytest.config.PytestPluginManager object at 0x00000234D0513CB0>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\logging.py#x1B[0m:858: in pytest_runtest_teardown
    #x1B[0m#x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        item       = <Function test_Content_Length_out[/wrong_cl_unbuffered-200-I too]>
        self       = <_pytest.logging.LoggingPlugin object at 0x00000234D1C6F8C0>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\capture.py#x1B[0m:905: in pytest_runtest_teardown
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m (#x1B[94myield#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            ^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_Content_Length_out[/wrong_cl_unbuffered-200-I too]>
        self       = <CaptureManager _method='fd' _global_capturing=<MultiCapture out=<FDCapture 1 oldfd=8 _state='suspended' tmpfile=<Enco..._io.TextIOWrapper name='nul' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\unraisableexception.py#x1B[0m:163: in pytest_runtest_teardown
    #x1B[0mcollect_unraisable(item.config)#x1B[90m#x1B[39;49;00m
        item       = <Function test_Content_Length_out[/wrong_cl_unbuffered-200-I too]>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\unraisableexception.py#x1B[0m:79: in collect_unraisable
    #x1B[0m#x1B[94mraise#x1B[39;49;00m errors[#x1B[94m0#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        config     = <_pytest.config.Config object at 0x00000234D0E8D2B0>
        msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x00000234D197F1C0>: None\n\nTraceback (most ...        ~~~~~~~~~~~~~~~^^^\nOSError: [WinError 10038] An operation was attempted on something that is not a socket\n\n'
        pop_unraisable = <built-in method pop of collections.deque object at 0x00000234D1C7D4E0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

config = <_pytest.config.Config object at 0x00000234D0E8D2B0>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mcollect_unraisable#x1B[39;49;00m(config: Config) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        pop_unraisable = config.stash[unraisable_exceptions].pop#x1B[90m#x1B[39;49;00m
        errors: #x1B[96mlist#x1B[39;49;00m[pytest.PytestUnraisableExceptionWarning | #x1B[96mRuntimeError#x1B[39;49;00m] = []#x1B[90m#x1B[39;49;00m
        meta = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        hook_error = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94mwhile#x1B[39;49;00m #x1B[94mTrue#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    meta = pop_unraisable()#x1B[90m#x1B[39;49;00m
                #x1B[94mexcept#x1B[39;49;00m #x1B[96mIndexError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(meta, #x1B[96mBaseException#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
                    hook_error = #x1B[96mRuntimeError#x1B[39;49;00m(#x1B[33m"#x1B[39;49;00m#x1B[33mFailed to process unraisable exception#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
                    hook_error.__cause__ = meta#x1B[90m#x1B[39;49;00m
                    errors.append(hook_error)#x1B[90m#x1B[39;49;00m
                    #x1B[94mcontinue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                msg = meta.msg#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>                   warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE                   pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function IOBase.__del__ at 0x00000234D197F1C0>: None#x1B[0m

config     = <_pytest.config.Config object at 0x00000234D0E8D2B0>
msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x00000234D197F1C0>: None\n\nTraceback (most ...        ~~~~~~~~~~~~~~~^^^\nOSError: [WinError 10038] An operation was attempted on something that is not a socket\n\n'
pop_unraisable = <built-in method pop of collections.deque object at 0x00000234D1C7D4E0>

#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\unraisableexception.py#x1B[0m:67: PytestUnraisableExceptionWarning
cheroot\test\test_ssl.py::test::test_ssl::test_http_over_https_error[0.0.0.0-builtin]

Flake rate in main: 28.57% (Passed 5 times, Failed 2 times)

Stack Traces | 0.158s run time
self = <cheroot.makefile.StreamWriter name=-1>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__del__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Destructor.  Calls close()."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            closed = #x1B[96mself#x1B[39;49;00m.closed#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m #x1B[96mAttributeError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[90m# If getting closed fails, then the object is probably#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# in an unusable state, so ignore.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m closed:#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m dealloc_warn := #x1B[96mgetattr#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m_dealloc_warn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
            dealloc_warn(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# If close() fails, the caller logs the exception with#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[90m# sys.unraisablehook. close() must be called at the end at __del__().#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       #x1B[96mself#x1B[39;49;00m.close()#x1B[90m#x1B[39;49;00m

closed     = False
dealloc_warn = <bound method _BufferedIOMixin._dealloc_warn of <cheroot.makefile.StreamWriter name=-1>>
self       = <cheroot.makefile.StreamWriter name=-1>

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\_pyio.py#x1B[0m:418: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\_pyio.py#x1B[0m:1318: in close
    #x1B[0m#x1B[96mself#x1B[39;49;00m.flush()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\_pyio.py#x1B[0m:1279: in flush
    #x1B[0m#x1B[96mself#x1B[39;49;00m._flush_unlocked()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[31mcheroot\makefile.py#x1B[0m:32: in _flush_unlocked
    #x1B[0mn = #x1B[96mself#x1B[39;49;00m.raw.write(#x1B[96mbytes#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m._write_buf))#x1B[90m#x1B[39;49;00m
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <socket.SocketIO object at 0x0000014C2464E6E0>
b = b'HTTP/1.1 400 Bad Request\r\nContent-Length: 85\r\nContent-Type: text/plain\r\n\r\nThe client sent a plain HTTP request, but this server only speaks HTTPS on this port.'

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mwrite#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, b):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Write the given bytes or bytearray object *b* to the socket#x1B[39;49;00m
    #x1B[33m    and return the number of bytes written.  This can be less than#x1B[39;49;00m
    #x1B[33m    len(b) if not all data could be written.  If the socket is#x1B[39;49;00m
    #x1B[33m    non-blocking and no bytes could be written None is returned.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkClosed()#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkWritable()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           #x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._sock.send(b)#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           OSError: [WinError 10038] An operation was attempted on something that is not a socket#x1B[0m

b          = b'HTTP/1.1 400 Bad Request\r\nContent-Length: 85\r\nContent-Type: text/plain\r\n\r\nThe client sent a plain HTTP request, but this server only speaks HTTPS on this port.'
self       = <socket.SocketIO object at 0x0000014C2464E6E0>

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\socket.py#x1B[0m:747: OSError

#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m

cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x0000014C258A1380>
when = 'teardown'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    #x1B[0m#x1B[37m@classmethod#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mfrom_call#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mcls#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        func: Callable[[], TResult],#x1B[90m#x1B[39;49;00m
        when: Literal[#x1B[33m"#x1B[39;49;00m#x1B[33mcollect#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33msetup#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mcall#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mteardown#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m],#x1B[90m#x1B[39;49;00m
        reraise: #x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m] | #x1B[96mtuple#x1B[39;49;00m[#x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m], ...] | #x1B[94mNone#x1B[39;49;00m = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    ) -> CallInfo[TResult]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Call func, wrapping the result in a CallInfo.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    :param func:#x1B[39;49;00m
    #x1B[33m        The function to call. Called without arguments.#x1B[39;49;00m
    #x1B[33m    :type func: Callable[[], _pytest.runner.TResult]#x1B[39;49;00m
    #x1B[33m    :param when:#x1B[39;49;00m
    #x1B[33m        The phase in which the function is called.#x1B[39;49;00m
    #x1B[33m    :param reraise:#x1B[39;49;00m
    #x1B[33m        Exception or exceptions that shall propagate if raised by the#x1B[39;49;00m
    #x1B[33m        function, instead of being wrapped in the CallInfo.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        excinfo = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        instant = timing.Instant()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           result: TResult | #x1B[94mNone#x1B[39;49;00m = func()#x1B[90m#x1B[39;49;00m
                                     ^^^^^^#x1B[90m#x1B[39;49;00m

cls        = <class '_pytest.runner.CallInfo'>
duration   = Duration(start=Instant(time=1782248341.7715974, perf_count=3534.577284), stop=Instant(time=1782248341.834336, perf_count=3534.6400239))
excinfo    = <ExceptionInfo PytestUnraisableExceptionWarning('Exception ignored while calling deallocator <function IOBase.__del__ at 0x0000014C2171F1C0>: None\n') tblen=13>
func       = <function call_and_report.<locals>.<lambda> at 0x0000014C258A1380>
instant    = Instant(time=1782248341.7715974, perf_count=3534.577284)
reraise    = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
result     = None
when       = 'teardown'

#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\runner.py#x1B[0m:344: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\runner.py#x1B[0m:246: in <lambda>
    #x1B[0m#x1B[94mlambda#x1B[39;49;00m: runtest_hook(item=item, **kwds), when=when, reraise=reraise#x1B[90m#x1B[39;49;00m
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_http_over_https_error[0.0.0.0-builtin]>
        kwds       = {'nextitem': <Function test_gateway_write_needs_start_response_called_before>}
        runtest_hook = <HookCaller 'pytest_runtest_teardown'>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\pluggy\_hooks.py#x1B[0m:512: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._hookexec(#x1B[96mself#x1B[39;49;00m.name, #x1B[96mself#x1B[39;49;00m._hookimpls.copy(), kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        kwargs     = {'item': <Function test_http_over_https_error[0.0.0.0-builtin]>, 'nextitem': <Function test_gateway_write_needs_start_response_called_before>}
        self       = <HookCaller 'pytest_runtest_teardown'>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\pluggy\_manager.py#x1B[0m:120: in _hookexec
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._inner_hookexec(hook_name, methods, kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        hook_name  = 'pytest_runtest_teardown'
        kwargs     = {'item': <Function test_http_over_https_error[0.0.0.0-builtin]>, 'nextitem': <Function test_gateway_write_needs_start_response_called_before>}
        methods    = [<HookImpl plugin_name='threadexception', plugin=<module '_pytest.threadexception' from 'D:\\a\\cheroot\\cheroot\\.tox...tIOWrapper name='nul' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...]
        self       = <_pytest.config.PytestPluginManager object at 0x0000014C20293CB0>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\logging.py#x1B[0m:858: in pytest_runtest_teardown
    #x1B[0m#x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        item       = <Function test_http_over_https_error[0.0.0.0-builtin]>
        self       = <_pytest.logging.LoggingPlugin object at 0x0000014C219CF8C0>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\capture.py#x1B[0m:905: in pytest_runtest_teardown
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m (#x1B[94myield#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            ^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_http_over_https_error[0.0.0.0-builtin]>
        self       = <CaptureManager _method='fd' _global_capturing=<MultiCapture out=<FDCapture 1 oldfd=8 _state='suspended' tmpfile=<Enco..._io.TextIOWrapper name='nul' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\unraisableexception.py#x1B[0m:163: in pytest_runtest_teardown
    #x1B[0mcollect_unraisable(item.config)#x1B[90m#x1B[39;49;00m
        item       = <Function test_http_over_https_error[0.0.0.0-builtin]>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\unraisableexception.py#x1B[0m:79: in collect_unraisable
    #x1B[0m#x1B[94mraise#x1B[39;49;00m errors[#x1B[94m0#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        config     = <_pytest.config.Config object at 0x0000014C20C2D2B0>
        msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x0000014C2171F1C0>: None\n\nTraceback (most ...        ~~~~~~~~~~~~~~~^^^\nOSError: [WinError 10038] An operation was attempted on something that is not a socket\n\n'
        pop_unraisable = <built-in method pop of collections.deque object at 0x0000014C219DD4E0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

config = <_pytest.config.Config object at 0x0000014C20C2D2B0>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mcollect_unraisable#x1B[39;49;00m(config: Config) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        pop_unraisable = config.stash[unraisable_exceptions].pop#x1B[90m#x1B[39;49;00m
        errors: #x1B[96mlist#x1B[39;49;00m[pytest.PytestUnraisableExceptionWarning | #x1B[96mRuntimeError#x1B[39;49;00m] = []#x1B[90m#x1B[39;49;00m
        meta = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        hook_error = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94mwhile#x1B[39;49;00m #x1B[94mTrue#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    meta = pop_unraisable()#x1B[90m#x1B[39;49;00m
                #x1B[94mexcept#x1B[39;49;00m #x1B[96mIndexError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(meta, #x1B[96mBaseException#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
                    hook_error = #x1B[96mRuntimeError#x1B[39;49;00m(#x1B[33m"#x1B[39;49;00m#x1B[33mFailed to process unraisable exception#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
                    hook_error.__cause__ = meta#x1B[90m#x1B[39;49;00m
                    errors.append(hook_error)#x1B[90m#x1B[39;49;00m
                    #x1B[94mcontinue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                msg = meta.msg#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>                   warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE                   pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function IOBase.__del__ at 0x0000014C2171F1C0>: None#x1B[0m

config     = <_pytest.config.Config object at 0x0000014C20C2D2B0>
msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x0000014C2171F1C0>: None\n\nTraceback (most ...        ~~~~~~~~~~~~~~~^^^\nOSError: [WinError 10038] An operation was attempted on something that is not a socket\n\n'
pop_unraisable = <built-in method pop of collections.deque object at 0x0000014C219DD4E0>

#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\unraisableexception.py#x1B[0m:67: PytestUnraisableExceptionWarning
cheroot\test\test_ssl.py::test::test_ssl::test_http_over_https_error[::-builtin]

Flake rate in main: 9.68% (Passed 28 times, Failed 3 times)

Stack Traces | 0.158s run time
self = <cheroot.makefile.StreamWriter name=-1>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m__del__#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Destructor.  Calls close()."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            closed = #x1B[96mself#x1B[39;49;00m.closed#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m #x1B[96mAttributeError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[90m# If getting closed fails, then the object is probably#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# in an unusable state, so ignore.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m closed:#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m dealloc_warn := #x1B[96mgetattr#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m_dealloc_warn#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[94mNone#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
            dealloc_warn(#x1B[96mself#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# If close() fails, the caller logs the exception with#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[90m# sys.unraisablehook. close() must be called at the end at __del__().#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       #x1B[96mself#x1B[39;49;00m.close()#x1B[90m#x1B[39;49;00m

closed     = False
dealloc_warn = <bound method _BufferedIOMixin._dealloc_warn of <cheroot.makefile.StreamWriter name=-1>>
self       = <cheroot.makefile.StreamWriter name=-1>

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\_pyio.py#x1B[0m:418: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\_pyio.py#x1B[0m:1318: in close
    #x1B[0m#x1B[96mself#x1B[39;49;00m.flush()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\_pyio.py#x1B[0m:1279: in flush
    #x1B[0m#x1B[96mself#x1B[39;49;00m._flush_unlocked()#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
#x1B[1m#x1B[31mcheroot\makefile.py#x1B[0m:32: in _flush_unlocked
    #x1B[0mn = #x1B[96mself#x1B[39;49;00m.raw.write(#x1B[96mbytes#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m._write_buf))#x1B[90m#x1B[39;49;00m
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        self       = <cheroot.makefile.StreamWriter name=-1>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <socket.SocketIO object at 0x00000234D47D6560>
b = b'HTTP/1.1 400 Bad Request\r\nContent-Length: 85\r\nContent-Type: text/plain\r\n\r\nThe client sent a plain HTTP request, but this server only speaks HTTPS on this port.'

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mwrite#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m, b):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Write the given bytes or bytearray object *b* to the socket#x1B[39;49;00m
    #x1B[33m    and return the number of bytes written.  This can be less than#x1B[39;49;00m
    #x1B[33m    len(b) if not all data could be written.  If the socket is#x1B[39;49;00m
    #x1B[33m    non-blocking and no bytes could be written None is returned.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkClosed()#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m._checkWritable()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           #x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._sock.send(b)#x1B[90m#x1B[39;49;00m
                   ^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           OSError: [WinError 10038] An operation was attempted on something that is not a socket#x1B[0m

b          = b'HTTP/1.1 400 Bad Request\r\nContent-Length: 85\r\nContent-Type: text/plain\r\n\r\nThe client sent a plain HTTP request, but this server only speaks HTTPS on this port.'
self       = <socket.SocketIO object at 0x00000234D47D6560>

#x1B[1m#x1B[31mC:\hostedtoolcache\windows\Python\3.14.6\x64\Lib\socket.py#x1B[0m:747: OSError

#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m

cls = <class '_pytest.runner.CallInfo'>
func = <function call_and_report.<locals>.<lambda> at 0x00000234D4D9F270>
when = 'teardown'
reraise = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)

    #x1B[0m#x1B[37m@classmethod#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mfrom_call#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mcls#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        func: Callable[[], TResult],#x1B[90m#x1B[39;49;00m
        when: Literal[#x1B[33m"#x1B[39;49;00m#x1B[33mcollect#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33msetup#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mcall#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33mteardown#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m],#x1B[90m#x1B[39;49;00m
        reraise: #x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m] | #x1B[96mtuple#x1B[39;49;00m[#x1B[96mtype#x1B[39;49;00m[#x1B[96mBaseException#x1B[39;49;00m], ...] | #x1B[94mNone#x1B[39;49;00m = #x1B[94mNone#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    ) -> CallInfo[TResult]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Call func, wrapping the result in a CallInfo.#x1B[39;49;00m
    #x1B[33m#x1B[39;49;00m
    #x1B[33m    :param func:#x1B[39;49;00m
    #x1B[33m        The function to call. Called without arguments.#x1B[39;49;00m
    #x1B[33m    :type func: Callable[[], _pytest.runner.TResult]#x1B[39;49;00m
    #x1B[33m    :param when:#x1B[39;49;00m
    #x1B[33m        The phase in which the function is called.#x1B[39;49;00m
    #x1B[33m    :param reraise:#x1B[39;49;00m
    #x1B[33m        Exception or exceptions that shall propagate if raised by the#x1B[39;49;00m
    #x1B[33m        function, instead of being wrapped in the CallInfo.#x1B[39;49;00m
    #x1B[33m    """#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        excinfo = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        instant = timing.Instant()#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>           result: TResult | #x1B[94mNone#x1B[39;49;00m = func()#x1B[90m#x1B[39;49;00m
                                     ^^^^^^#x1B[90m#x1B[39;49;00m

cls        = <class '_pytest.runner.CallInfo'>
duration   = Duration(start=Instant(time=1782248341.8351674, perf_count=3534.6408542), stop=Instant(time=1782248341.8980997, perf_count=3534.7037873))
excinfo    = <ExceptionInfo PytestUnraisableExceptionWarning('Exception ignored while calling deallocator <function IOBase.__del__ at 0x00000234D197F1C0>: None\n') tblen=13>
func       = <function call_and_report.<locals>.<lambda> at 0x00000234D4D9F270>
instant    = Instant(time=1782248341.8351674, perf_count=3534.6408542)
reraise    = (<class '_pytest.outcomes.Exit'>, <class 'KeyboardInterrupt'>)
result     = None
when       = 'teardown'

#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\runner.py#x1B[0m:344: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\runner.py#x1B[0m:246: in <lambda>
    #x1B[0m#x1B[94mlambda#x1B[39;49;00m: runtest_hook(item=item, **kwds), when=when, reraise=reraise#x1B[90m#x1B[39;49;00m
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_http_over_https_error[::-builtin]>
        kwds       = {'nextitem': <DoctestItem cheroot.test.webtest.WebCase.getPage>}
        runtest_hook = <HookCaller 'pytest_runtest_teardown'>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\pluggy\_hooks.py#x1B[0m:512: in __call__
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._hookexec(#x1B[96mself#x1B[39;49;00m.name, #x1B[96mself#x1B[39;49;00m._hookimpls.copy(), kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        kwargs     = {'item': <Function test_http_over_https_error[::-builtin]>, 'nextitem': <DoctestItem cheroot.test.webtest.WebCase.getPage>}
        self       = <HookCaller 'pytest_runtest_teardown'>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\pluggy\_manager.py#x1B[0m:120: in _hookexec
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._inner_hookexec(hook_name, methods, kwargs, firstresult)#x1B[90m#x1B[39;49;00m
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^#x1B[90m#x1B[39;49;00m
        firstresult = False
        hook_name  = 'pytest_runtest_teardown'
        kwargs     = {'item': <Function test_http_over_https_error[::-builtin]>, 'nextitem': <DoctestItem cheroot.test.webtest.WebCase.getPage>}
        methods    = [<HookImpl plugin_name='threadexception', plugin=<module '_pytest.threadexception' from 'D:\\a\\cheroot\\cheroot\\.tox...tIOWrapper name='nul' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>>, ...]
        self       = <_pytest.config.PytestPluginManager object at 0x00000234D0513CB0>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\logging.py#x1B[0m:858: in pytest_runtest_teardown
    #x1B[0m#x1B[94myield#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        item       = <Function test_http_over_https_error[::-builtin]>
        self       = <_pytest.logging.LoggingPlugin object at 0x00000234D1C6F8C0>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\capture.py#x1B[0m:905: in pytest_runtest_teardown
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m (#x1B[94myield#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            ^^^^^#x1B[90m#x1B[39;49;00m
        item       = <Function test_http_over_https_error[::-builtin]>
        self       = <CaptureManager _method='fd' _global_capturing=<MultiCapture out=<FDCapture 1 oldfd=8 _state='suspended' tmpfile=<Enco..._io.TextIOWrapper name='nul' mode='r' encoding='utf-8'>> _state='suspended' _in_suspended=False> _capture_fixture=None>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\unraisableexception.py#x1B[0m:163: in pytest_runtest_teardown
    #x1B[0mcollect_unraisable(item.config)#x1B[90m#x1B[39;49;00m
        item       = <Function test_http_over_https_error[::-builtin]>
#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\unraisableexception.py#x1B[0m:79: in collect_unraisable
    #x1B[0m#x1B[94mraise#x1B[39;49;00m errors[#x1B[94m0#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
        config     = <_pytest.config.Config object at 0x00000234D0E8D2B0>
        msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x00000234D197F1C0>: None\n\nTraceback (most ...        ~~~~~~~~~~~~~~~^^^\nOSError: [WinError 10038] An operation was attempted on something that is not a socket\n\n'
        pop_unraisable = <built-in method pop of collections.deque object at 0x00000234D1C7D4E0>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

config = <_pytest.config.Config object at 0x00000234D0E8D2B0>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mcollect_unraisable#x1B[39;49;00m(config: Config) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
        pop_unraisable = config.stash[unraisable_exceptions].pop#x1B[90m#x1B[39;49;00m
        errors: #x1B[96mlist#x1B[39;49;00m[pytest.PytestUnraisableExceptionWarning | #x1B[96mRuntimeError#x1B[39;49;00m] = []#x1B[90m#x1B[39;49;00m
        meta = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        hook_error = #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94mwhile#x1B[39;49;00m #x1B[94mTrue#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    meta = pop_unraisable()#x1B[90m#x1B[39;49;00m
                #x1B[94mexcept#x1B[39;49;00m #x1B[96mIndexError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[94mbreak#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(meta, #x1B[96mBaseException#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
                    hook_error = #x1B[96mRuntimeError#x1B[39;49;00m(#x1B[33m"#x1B[39;49;00m#x1B[33mFailed to process unraisable exception#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
                    hook_error.__cause__ = meta#x1B[90m#x1B[39;49;00m
                    errors.append(hook_error)#x1B[90m#x1B[39;49;00m
                    #x1B[94mcontinue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
                msg = meta.msg#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>                   warnings.warn(pytest.PytestUnraisableExceptionWarning(msg))#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE                   pytest.PytestUnraisableExceptionWarning: Exception ignored while calling deallocator <function IOBase.__del__ at 0x00000234D197F1C0>: None#x1B[0m

config     = <_pytest.config.Config object at 0x00000234D0E8D2B0>
msg        = 'Exception ignored while calling deallocator <function IOBase.__del__ at 0x00000234D197F1C0>: None\n\nTraceback (most ...        ~~~~~~~~~~~~~~~^^^\nOSError: [WinError 10038] An operation was attempted on something that is not a socket\n\n'
pop_unraisable = <built-in method pop of collections.deque object at 0x00000234D1C7D4E0>

#x1B[1m#x1B[31m.tox\py\Lib\site-packages\_pytest\unraisableexception.py#x1B[0m:67: PytestUnraisableExceptionWarning
cheroot\test\test_ssl.py::test::test_ssl::test_https_over_http_error[0.0.0.0]

Flake rate in main: 14.29% (Passed 12 times, Failed 2 times)

Stack Traces | 0.165s run time
http_server = <generator object http_server.<locals>.start_srv at 0x000001FC6ADA7440>
ip_addr = '0.0.0.0'

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[90m#x1B[39;49;00m
        #x1B[33m'#x1B[39;49;00m#x1B[33mip_addr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        (#x1B[90m#x1B[39;49;00m
            ANY_INTERFACE_IPV4,#x1B[90m#x1B[39;49;00m
            ANY_INTERFACE_IPV6,#x1B[90m#x1B[39;49;00m
        ),#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_https_over_http_error#x1B[39;49;00m(http_server, ip_addr):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Ensure that connecting over HTTPS to HTTP port is handled."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        httpserver = http_server.send((ip_addr, EPHEMERAL_PORT))#x1B[90m#x1B[39;49;00m
        interface, _host, port = _get_conn_data(httpserver.bind_addr)#x1B[90m#x1B[39;49;00m
        #x1B[94mwith#x1B[39;49;00m pytest.raises(ssl.SSLError) #x1B[94mas#x1B[39;49;00m ssl_err:#x1B[90m#x1B[39;49;00m
            http.client.HTTPSConnection(#x1B[90m#x1B[39;49;00m
                #x1B[33mf#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m{#x1B[39;49;00minterface#x1B[33m}#x1B[39;49;00m#x1B[33m:#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mport#x1B[33m}#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ).request(#x1B[33m'#x1B[39;49;00m#x1B[33mGET#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33m/#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        expected_substring = (#x1B[90m#x1B[39;49;00m
            #x1B[33m'#x1B[39;49;00m#x1B[33mrecord layer failure#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m IS_ABOVE_OPENSSL31#x1B[90m#x1B[39;49;00m
            #x1B[94melse#x1B[39;49;00m #x1B[33m'#x1B[39;49;00m#x1B[33mwrong version number#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m IS_ABOVE_OPENSSL10#x1B[90m#x1B[39;49;00m
            #x1B[94melse#x1B[39;49;00m #x1B[33m'#x1B[39;49;00m#x1B[33munknown protocol#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
>       #x1B[94massert#x1B[39;49;00m expected_substring #x1B[95min#x1B[39;49;00m ssl_err.value.args[-#x1B[94m1#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       AssertionError: assert 'record layer failure' in '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1082)'#x1B[0m

_host      = '0.0.0.0'
expected_substring = 'record layer failure'
http_server = <generator object http_server.<locals>.start_srv at 0x000001FC6ADA7440>
httpserver = <cheroot.server.HTTPServer object at 0x000001FC6C11AB70>
interface  = '127.0.0.1'
ip_addr    = '0.0.0.0'
port       = 61936
ssl_err    = <ExceptionInfo SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1082)') tblen=10>

#x1B[1m#x1B[31mcheroot\test\test_ssl.py#x1B[0m:707: AssertionError
cheroot\test\test_ssl.py::test::test_ssl::test_https_over_http_error[::]

Flake rate in main: 12.90% (Passed 27 times, Failed 4 times)

Stack Traces | 0.19s run time
http_server = <generator object http_server.<locals>.start_srv at 0x000001FC68F2E0C0>
ip_addr = '::'

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[90m#x1B[39;49;00m
        #x1B[33m'#x1B[39;49;00m#x1B[33mip_addr#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        (#x1B[90m#x1B[39;49;00m
            ANY_INTERFACE_IPV4,#x1B[90m#x1B[39;49;00m
            ANY_INTERFACE_IPV6,#x1B[90m#x1B[39;49;00m
        ),#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_https_over_http_error#x1B[39;49;00m(http_server, ip_addr):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Ensure that connecting over HTTPS to HTTP port is handled."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        httpserver = http_server.send((ip_addr, EPHEMERAL_PORT))#x1B[90m#x1B[39;49;00m
        interface, _host, port = _get_conn_data(httpserver.bind_addr)#x1B[90m#x1B[39;49;00m
        #x1B[94mwith#x1B[39;49;00m pytest.raises(ssl.SSLError) #x1B[94mas#x1B[39;49;00m ssl_err:#x1B[90m#x1B[39;49;00m
            http.client.HTTPSConnection(#x1B[90m#x1B[39;49;00m
                #x1B[33mf#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m{#x1B[39;49;00minterface#x1B[33m}#x1B[39;49;00m#x1B[33m:#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mport#x1B[33m}#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            ).request(#x1B[33m'#x1B[39;49;00m#x1B[33mGET#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33m/#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        expected_substring = (#x1B[90m#x1B[39;49;00m
            #x1B[33m'#x1B[39;49;00m#x1B[33mrecord layer failure#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m IS_ABOVE_OPENSSL31#x1B[90m#x1B[39;49;00m
            #x1B[94melse#x1B[39;49;00m #x1B[33m'#x1B[39;49;00m#x1B[33mwrong version number#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m IS_ABOVE_OPENSSL10#x1B[90m#x1B[39;49;00m
            #x1B[94melse#x1B[39;49;00m #x1B[33m'#x1B[39;49;00m#x1B[33munknown protocol#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
>       #x1B[94massert#x1B[39;49;00m expected_substring #x1B[95min#x1B[39;49;00m ssl_err.value.args[-#x1B[94m1#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       AssertionError: assert 'record layer failure' in '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1082)'#x1B[0m

_host      = '::'
expected_substring = 'record layer failure'
http_server = <generator object http_server.<locals>.start_srv at 0x000001FC68F2E0C0>
httpserver = <cheroot.server.HTTPServer object at 0x000001FC6C13BE30>
interface  = '::1'
ip_addr    = '::'
port       = 61950
ssl_err    = <ExceptionInfo SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1082)') tblen=10>

#x1B[1m#x1B[31mcheroot\test\test_ssl.py#x1B[0m:707: AssertionError
cheroot\test\test_ssl.py::test::test_ssl::test_tls_client_auth[2-False-localhost-builtin]

Flake rate in main: 3.33% (Passed 29 times, Failed 1 times)

Stack Traces | 0.193s run time
http_request_timeout = 1.0
mocker = <pytest_mock.plugin.MockerFixture object at 0x0000014C2456D630>
tls_http_server = functools.partial(<function make_tls_http_server at 0x0000014C239D6DA0>, request=<SubRequest 'tls_http_server' for <Function test_tls_client_auth[2-False-localhost-builtin]>>)
adapter_type = 'builtin', ca = <trustme.CA object at 0x0000014C244BBA70>
tls_certificate = <trustme.LeafCert object at 0x0000014C257B44B0>
tls_certificate_chain_pem_path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpb9vo9cvp.pem'
tls_certificate_private_key_pem_path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmp_e5qe2lk.pem'
tls_ca_certificate_pem_path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpwaseii17.pem'
is_trusted_cert = False, tls_client_identity = 'localhost'
tls_verify_mode = <VerifyMode.CERT_REQUIRED: 2>

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(  #x1B[90m# noqa: C901  # FIXME#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[33m'#x1B[39;49;00m#x1B[33madapter_type#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        (#x1B[90m#x1B[39;49;00m
            #x1B[33m'#x1B[39;49;00m#x1B[33mbuiltin#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            #x1B[33m'#x1B[39;49;00m#x1B[33mpyopenssl#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        ),#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[90m#x1B[39;49;00m
        (#x1B[33m'#x1B[39;49;00m#x1B[33mis_trusted_cert#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mtls_client_identity#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
        (#x1B[90m#x1B[39;49;00m
            (#x1B[94mTrue#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mlocalhost#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[94mTrue#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33m127.0.0.1#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[94mTrue#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33m*.localhost#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[94mTrue#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mnot_localhost#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
            (#x1B[94mFalse#x1B[39;49;00m, #x1B[33m'#x1B[39;49;00m#x1B[33mlocalhost#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m),#x1B[90m#x1B[39;49;00m
        ),#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[37m@pytest#x1B[39;49;00m.mark.parametrize(#x1B[90m#x1B[39;49;00m
        #x1B[33m'#x1B[39;49;00m#x1B[33mtls_verify_mode#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        (#x1B[90m#x1B[39;49;00m
            ssl.CERT_NONE,  #x1B[90m# server shouldn't validate client cert#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            ssl.CERT_OPTIONAL,  #x1B[90m# same as CERT_REQUIRED in client mode, don't use#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            ssl.CERT_REQUIRED,  #x1B[90m# server should validate if client cert CA is OK#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        ),#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[37m@pytest#x1B[39;49;00m.mark.xfail(#x1B[90m#x1B[39;49;00m
        IS_PYPY #x1B[95mand#x1B[39;49;00m IS_CI,#x1B[90m#x1B[39;49;00m
        reason=#x1B[33m'#x1B[39;49;00m#x1B[33mFails under PyPy in CI for unknown reason#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        strict=#x1B[94mFalse#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_tls_client_auth#x1B[39;49;00m(  #x1B[90m# noqa: C901, WPS213  # FIXME#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[90m# FIXME: remove twisted logic, separate tests#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        http_request_timeout,#x1B[90m#x1B[39;49;00m
        mocker,#x1B[90m#x1B[39;49;00m
        tls_http_server,#x1B[90m#x1B[39;49;00m
        adapter_type,#x1B[90m#x1B[39;49;00m
        ca,#x1B[90m#x1B[39;49;00m
        tls_certificate,#x1B[90m#x1B[39;49;00m
        tls_certificate_chain_pem_path,#x1B[90m#x1B[39;49;00m
        tls_certificate_private_key_pem_path,#x1B[90m#x1B[39;49;00m
        tls_ca_certificate_pem_path,#x1B[90m#x1B[39;49;00m
        is_trusted_cert,#x1B[90m#x1B[39;49;00m
        tls_client_identity,#x1B[90m#x1B[39;49;00m
        tls_verify_mode,#x1B[90m#x1B[39;49;00m
    ):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Verify that client TLS certificate auth works correctly."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        test_cert_rejection = (#x1B[90m#x1B[39;49;00m
            tls_verify_mode != ssl.CERT_NONE #x1B[95mand#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m is_trusted_cert#x1B[90m#x1B[39;49;00m
        )#x1B[90m#x1B[39;49;00m
        interface, _host, port = _get_conn_data(ANY_INTERFACE_IPV4)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        client_cert_root_ca = ca #x1B[94mif#x1B[39;49;00m is_trusted_cert #x1B[94melse#x1B[39;49;00m trustme.CA()#x1B[90m#x1B[39;49;00m
        #x1B[94mwith#x1B[39;49;00m mocker.mock_module.patch(#x1B[90m#x1B[39;49;00m
            #x1B[33m'#x1B[39;49;00m#x1B[33midna.core.ulabel#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            return_value=ntob(tls_client_identity),#x1B[90m#x1B[39;49;00m
        ):#x1B[90m#x1B[39;49;00m
            client_cert = client_cert_root_ca.issue_cert(#x1B[90m#x1B[39;49;00m
                ntou(tls_client_identity),#x1B[90m#x1B[39;49;00m
            )#x1B[90m#x1B[39;49;00m
            #x1B[94mdel#x1B[39;49;00m client_cert_root_ca#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mwith#x1B[39;49;00m client_cert.private_key_and_cert_chain_pem.tempfile() #x1B[94mas#x1B[39;49;00m cl_pem:#x1B[90m#x1B[39;49;00m
            tls_adapter_cls = get_ssl_adapter_class(name=adapter_type)#x1B[90m#x1B[39;49;00m
            tls_adapter = tls_adapter_cls(#x1B[90m#x1B[39;49;00m
                tls_certificate_chain_pem_path,#x1B[90m#x1B[39;49;00m
                tls_certificate_private_key_pem_path,#x1B[90m#x1B[39;49;00m
            )#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m adapter_type == #x1B[33m'#x1B[39;49;00m#x1B[33mpyopenssl#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                tls_adapter.context = tls_adapter.get_context()#x1B[90m#x1B[39;49;00m
                tls_adapter.context.set_verify(#x1B[90m#x1B[39;49;00m
                    _stdlib_to_openssl_verify[tls_verify_mode],#x1B[90m#x1B[39;49;00m
                    #x1B[94mlambda#x1B[39;49;00m conn, cert, errno, depth, preverify_ok: preverify_ok,#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m
            #x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                tls_adapter.context.verify_mode = tls_verify_mode#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            ca.configure_trust(tls_adapter.context)#x1B[90m#x1B[39;49;00m
            tls_certificate.configure_cert(tls_adapter.context)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            tlshttpserver = tls_http_server((interface, port), tls_adapter)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            interface, _host, port = _get_conn_data(tlshttpserver.bind_addr)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            make_https_request = functools.partial(#x1B[90m#x1B[39;49;00m
                requests.get,#x1B[90m#x1B[39;49;00m
                #x1B[33mf#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mhttps://#x1B[39;49;00m#x1B[33m{#x1B[39;49;00minterface#x1B[33m!s}#x1B[39;49;00m#x1B[33m:#x1B[39;49;00m#x1B[33m{#x1B[39;49;00mport#x1B[33m!s}#x1B[39;49;00m#x1B[33m/#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                #x1B[90m# Don't wait for the first byte forever:#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                timeout=http_request_timeout,#x1B[90m#x1B[39;49;00m
                #x1B[90m# Server TLS certificate verification:#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                verify=tls_ca_certificate_pem_path,#x1B[90m#x1B[39;49;00m
                #x1B[90m# Client TLS certificate verification:#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                cert=cl_pem,#x1B[90m#x1B[39;49;00m
            )#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m test_cert_rejection:#x1B[90m#x1B[39;49;00m
                resp = make_https_request()#x1B[90m#x1B[39;49;00m
                is_req_successful = resp.status_code == #x1B[94m200#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m (#x1B[90m#x1B[39;49;00m
                    #x1B[95mnot#x1B[39;49;00m is_req_successful#x1B[90m#x1B[39;49;00m
                    #x1B[95mand#x1B[39;49;00m IS_PYOPENSSL_SSL_VERSION_1_0#x1B[90m#x1B[39;49;00m
                    #x1B[95mand#x1B[39;49;00m adapter_type == #x1B[33m'#x1B[39;49;00m#x1B[33mbuiltin#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[95mand#x1B[39;49;00m tls_verify_mode == ssl.CERT_REQUIRED#x1B[90m#x1B[39;49;00m
                    #x1B[95mand#x1B[39;49;00m tls_client_identity == #x1B[33m'#x1B[39;49;00m#x1B[33mlocalhost#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[95mand#x1B[39;49;00m is_trusted_cert#x1B[90m#x1B[39;49;00m
                ):#x1B[90m#x1B[39;49;00m
                    pytest.xfail(#x1B[90m#x1B[39;49;00m
                        #x1B[33m'#x1B[39;49;00m#x1B[33mOpenSSL 1.0 has problems with verifying client certs#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                    )#x1B[90m#x1B[39;49;00m
                #x1B[94massert#x1B[39;49;00m is_req_successful#x1B[90m#x1B[39;49;00m
                #x1B[94massert#x1B[39;49;00m resp.text == #x1B[33m'#x1B[39;49;00m#x1B[33mHello world!#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                resp.close()#x1B[90m#x1B[39;49;00m
                #x1B[94mreturn#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[90m# xfail some flaky tests#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# https://github..../cheroot/issues/237#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            issue_237 = (#x1B[90m#x1B[39;49;00m
                IS_MACOS#x1B[90m#x1B[39;49;00m
                #x1B[95mand#x1B[39;49;00m adapter_type == #x1B[33m'#x1B[39;49;00m#x1B[33mbuiltin#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[95mand#x1B[39;49;00m tls_verify_mode != ssl.CERT_NONE#x1B[90m#x1B[39;49;00m
            )#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m issue_237:#x1B[90m#x1B[39;49;00m
                pytest.xfail(#x1B[33m'#x1B[39;49;00m#x1B[33mTest sometimes fails#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            expected_ssl_errors = (requests.exceptions.SSLError,)#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m IS_WINDOWS #x1B[95mor#x1B[39;49;00m IS_GITHUB_ACTIONS_WORKFLOW:#x1B[90m#x1B[39;49;00m
                expected_ssl_errors += (requests.exceptions.ConnectionError,)#x1B[90m#x1B[39;49;00m
            #x1B[94mwith#x1B[39;49;00m pytest.raises(expected_ssl_errors) #x1B[94mas#x1B[39;49;00m ssl_err:#x1B[90m#x1B[39;49;00m
                make_https_request().close()#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                err_text = ssl_err.value.args[#x1B[94m0#x1B[39;49;00m].reason.args[#x1B[94m0#x1B[39;49;00m].args[#x1B[94m0#x1B[39;49;00m]#x1B[90m#x1B[39;49;00m
            #x1B[94mexcept#x1B[39;49;00m #x1B[96mAttributeError#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m IS_WINDOWS #x1B[95mor#x1B[39;49;00m IS_GITHUB_ACTIONS_WORKFLOW:#x1B[90m#x1B[39;49;00m
                    err_text = #x1B[96mstr#x1B[39;49;00m(ssl_err.value)#x1B[90m#x1B[39;49;00m
                #x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[94mraise#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(err_text, #x1B[96mint#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
                err_text = #x1B[96mstr#x1B[39;49;00m(ssl_err.value)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            expected_substrings = (#x1B[90m#x1B[39;49;00m
                #x1B[33m'#x1B[39;49;00m#x1B[33msslv3 alert bad certificate#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m IS_LIBRESSL_BACKEND#x1B[90m#x1B[39;49;00m
                #x1B[94melse#x1B[39;49;00m #x1B[33m'#x1B[39;49;00m#x1B[33mtlsv1 alert unknown ca#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
            )#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m IS_MACOS #x1B[95mand#x1B[39;49;00m IS_PYPY #x1B[95mand#x1B[39;49;00m adapter_type == #x1B[33m'#x1B[39;49;00m#x1B[33mpyopenssl#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                expected_substrings = (#x1B[33m'#x1B[39;49;00m#x1B[33mtlsv1 alert unknown ca#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,)#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m (#x1B[90m#x1B[39;49;00m
                tls_verify_mode#x1B[90m#x1B[39;49;00m
                #x1B[95min#x1B[39;49;00m {#x1B[90m#x1B[39;49;00m
                    ssl.CERT_REQUIRED,#x1B[90m#x1B[39;49;00m
                    ssl.CERT_OPTIONAL,#x1B[90m#x1B[39;49;00m
                }#x1B[90m#x1B[39;49;00m
                #x1B[95mand#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m is_trusted_cert#x1B[90m#x1B[39;49;00m
                #x1B[95mand#x1B[39;49;00m tls_client_identity == #x1B[33m'#x1B[39;49;00m#x1B[33mlocalhost#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            ):#x1B[90m#x1B[39;49;00m
                expected_substrings += (#x1B[90m#x1B[39;49;00m
                    (#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33mbad handshake: SysCallError(10054, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mWSAECONNRESET#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m'#x1B[39;49;00m#x1B[33mOSError(#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m(10054, #x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33mWSAECONNRESET#x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m))#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m'#x1B[39;49;00m#x1B[33mOSError(#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m(10054, #x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33mWSAECONNRESET#x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m,))#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m'#x1B[39;49;00m#x1B[33merror(#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m(10054, #x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33mWSAECONNRESET#x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m,))#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m'#x1B[39;49;00m#x1B[33mConnectionResetError(10054, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mAn existing connection was forcibly closed #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33mby the remote host#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, None, 10054, None))#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m'#x1B[39;49;00m#x1B[33merror(10054, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mAn existing connection was forcibly closed #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33mby the remote host#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m))#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                    )#x1B[90m#x1B[39;49;00m
                    #x1B[94mif#x1B[39;49;00m IS_WINDOWS#x1B[90m#x1B[39;49;00m
                    #x1B[94melse#x1B[39;49;00m (#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m'#x1B[39;49;00m#x1B[33mOSError(#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m(104, #x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33mECONNRESET#x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m))#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m'#x1B[39;49;00m#x1B[33mOSError(#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m(104, #x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33mECONNRESET#x1B[39;49;00m#x1B[33m\'#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33m,))#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, error(#x1B[39;49;00m#x1B[33m\"#x1B[39;49;00m#x1B[33m(104, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mECONNRESET#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m)#x1B[39;49;00m#x1B[33m\"#x1B[39;49;00m#x1B[33m,))#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33mConnectionResetError(104, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection reset by peer#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m))#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33merror(104, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection reset by peer#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m))#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                    )#x1B[90m#x1B[39;49;00m
                    #x1B[94mif#x1B[39;49;00m (IS_GITHUB_ACTIONS_WORKFLOW #x1B[95mand#x1B[39;49;00m IS_LINUX)#x1B[90m#x1B[39;49;00m
                    #x1B[94melse#x1B[39;49;00m (#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                        #x1B[33m"#x1B[39;49;00m#x1B[33mBrokenPipeError(32, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mBroken pipe#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m))#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                    )#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m PY310_PLUS:#x1B[90m#x1B[39;49;00m
                #x1B[90m# FIXME: Figure out what's happening and correct the problem#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                expected_substrings += (#x1B[90m#x1B[39;49;00m
                    #x1B[33m'#x1B[39;49;00m#x1B[33mSSLError(SSLEOFError(8, #x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mEOF occurred in violation of protocol (_ssl.c:#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m IS_GITHUB_ACTIONS_WORKFLOW #x1B[95mand#x1B[39;49;00m IS_WINDOWS #x1B[95mand#x1B[39;49;00m PY310_PLUS:#x1B[90m#x1B[39;49;00m
                expected_substrings += (#x1B[90m#x1B[39;49;00m
                    #x1B[33m"#x1B[39;49;00m#x1B[33m(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mConnection aborted.#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m, #x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[33m'#x1B[39;49;00m#x1B[33mRemoteDisconnected(#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[33m"#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33mRemote end closed connection without response#x1B[39;49;00m#x1B[33m'#x1B[39;49;00m#x1B[33m))#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
                )#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
>           #x1B[94massert#x1B[39;49;00m #x1B[96many#x1B[39;49;00m(e #x1B[95min#x1B[39;49;00m err_text #x1B[94mfor#x1B[39;49;00m e #x1B[95min#x1B[39;49;00m expected_substrings)#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           assert False#x1B[0m
#x1B[1m#x1B[31mE            +  where False = any(<generator object test_tls_client_auth.<locals>.<genexpr> at 0x0000014C25814200>)#x1B[0m

_host      = '127.0.0.1'
adapter_type = 'builtin'
ca         = <trustme.CA object at 0x0000014C244BBA70>
cl_pem     = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpu630lmhw.pem'
client_cert = <trustme.LeafCert object at 0x0000014C2448FD10>
err_text   = "('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host'))"
expected_ssl_errors = (<class 'requests.exceptions.SSLError'>, <class 'requests.exceptions.ConnectionError'>)
expected_substrings = ('tlsv1 alert unknown ca', "bad handshake: SysCallError(10054, 'WSAECONNRESET')", '(\'Connection aborted.\', OSError("...ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None))", ...)
http_request_timeout = 1.0
interface  = '127.0.0.1'
is_trusted_cert = False
issue_237  = False
make_https_request = functools.partial(<function get at 0x0000014C235B2A30>, 'https://127.0.0.1:51375/', timeout=1.0, verify='C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpwaseii17.pem', cert='C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpu630lmhw.pem')
mocker     = <pytest_mock.plugin.MockerFixture object at 0x0000014C2456D630>
port       = 51375
ssl_err    = <ExceptionInfo ConnectionError(ProtocolError('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host'))) tblen=6>
test_cert_rejection = True
tls_adapter = <cheroot.ssl.builtin.BuiltinSSLAdapter object at 0x0000014C23E968D0>
tls_adapter_cls = <class 'cheroot.ssl.builtin.BuiltinSSLAdapter'>
tls_ca_certificate_pem_path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpwaseii17.pem'
tls_certificate = <trustme.LeafCert object at 0x0000014C257B44B0>
tls_certificate_chain_pem_path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmpb9vo9cvp.pem'
tls_certificate_private_key_pem_path = 'C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\tmp_e5qe2lk.pem'
tls_client_identity = 'localhost'
tls_http_server = functools.partial(<function make_tls_http_server at 0x0000014C239D6DA0>, request=<SubRequest 'tls_http_server' for <Function test_tls_client_auth[2-False-localhost-builtin]>>)
tls_verify_mode = <VerifyMode.CERT_REQUIRED: 2>
tlshttpserver = <cheroot.server.HTTPServer object at 0x0000014C257EB7A0>

#x1B[1m#x1B[31mcheroot\test\test_ssl.py#x1B[0m:474: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@julianz- julianz- changed the base branch from main to maint/11.0.x June 23, 2026 21:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant