zeromq / pyzmq

PyZMQ: Python bindings for zeromq
http://zguide.zeromq.org/py:all
BSD 3-Clause "New" or "Revised" License
3.73k stars 636 forks source link

BUG: test_auth and test_zmqstream #1853

Closed Apteryks closed 1 year ago

Apteryks commented 1 year ago

What pyzmq version?

25.0.2

What libzmq version?

4.3.4

Python version (and how it was installed)

3.10.7

OS

Guix System

What happened?

The test suite fails like:

=========================== short test summary info ============================
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_null - Attribut...
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_deny - Attribut...
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_allow - Attribu...
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_plain[True-correct-True]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_plain[False-correct-False]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_plain[True-incorrect-False]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[ok-*-True]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[ok-public_keys-True]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[bad-public_keys-False]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[None-public_keys-False]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[True-ok]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[True-wrong]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[False-ok]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[False-wrong]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_user_id
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_null - Attribu...
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_deny - Attribu...
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_allow - Attrib...
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_plain[True-correct-True]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_plain[False-correct-False]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_plain[True-incorrect-False]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[ok-*-True]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[ok-public_keys-True]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[bad-public_keys-False]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[None-public_keys-False]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[True-ok]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[True-wrong]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[False-ok]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[False-wrong]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_user_id
ERROR zmq/tests/test_zmqstream.py::test_callable_check - TypeError: cannot un...
ERROR zmq/tests/test_zmqstream.py::test_on_recv_basic - TypeError: cannot unp...
ERROR zmq/tests/test_zmqstream.py::test_on_recv_wake - TypeError: cannot unpa...
ERROR zmq/tests/test_zmqstream.py::test_on_recv_async - TypeError: cannot unp...
ERROR zmq/tests/test_zmqstream.py::test_on_recv_async_error - TypeError: cann...
====== 30 failed, 295 passed, 30 skipped, 37 warnings, 5 errors in 29.91s ======

Code to reproduce bug

The following Guix package is used:

(define-public python-pyzmq
  (package
    (name "python-pyzmq")
    (version "25.0.2")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "pyzmq" version))
       (sha256
        (base32 "0jai5sbd4ypihsvr4ikq6d93nkmxwv53598sh24dqs78f2xip33b"))
       (snippet
        #~(begin
            (use-modules (guix build utils))
            ;; The bundled zeromq source code.
            (delete-file-recursively "bundled")
            ;; Delete cythonized files.
            (for-each delete-file
                      (list "zmq/backend/cython/context.c"
                            "zmq/backend/cython/_device.c"
                            "zmq/backend/cython/error.c"
                            "zmq/backend/cython/message.c"
                            "zmq/backend/cython/_poll.c"
                            "zmq/backend/cython/_proxy_steerable.c"
                            "zmq/backend/cython/socket.c"
                            "zmq/backend/cython/utils.c"
                            "zmq/backend/cython/_version.c"
                            "zmq/devices/monitoredqueue.c"))))))
    (build-system python-build-system)
    (arguments
     `(#:configure-flags
       (list (string-append "--zmq=" (assoc-ref %build-inputs "zeromq")))
       #:phases
       (modify-phases %standard-phases
         (add-after 'unpack 'disable-draft-test
           ;; FIXME: The test_draft.TestDraftSockets test fails with:
           ;;   zmq.error.Again: Resource temporarily unavailable
           (lambda _
             (delete-file "zmq/tests/test_draft.py")))
         (add-before 'check 'build-extensions
           (lambda _
             ;; Cython extensions have to be built before running the tests.
             (invoke "python" "setup.py" "build_ext" "--inplace"))))))
    (inputs
     (list zeromq))
    (native-inputs
     (list pkg-config
           python-cython
           python-pytest
           python-pytest-asyncio
           python-tornado))
    (home-page "https://github.com/zeromq/pyzmq")
    (synopsis "Python bindings for 0MQ")
    (description
     "PyZMQ is the official Python binding for the ZeroMQ messaging library.")
    (license license:bsd-4)))

The direct inputs are currently:

pkg-config@0.29.2 python-cython@0.29.32 python-pytest-asyncio@0.21.0 python-pytest@7.1.3
+ python-tornado@5.1.1 zeromq@4.3.4

Traceback, if applicable

No response

More info

python-pyzmq-25.0.2.drv.txt

minrk commented 1 year ago

Can you share the test output? There should be tracebacks and details for every failure. All I see is that they failed, and the more info doesn't include anything about the tests.

minrk commented 1 year ago

Closing due to inactivity awaiting response. Feel free to reopen if you have a chance to provide tracebacks for the errors.

Apteryks commented 1 year ago

Hi,

Sorry the useful output was missing in my report. I've now switched the check phase to use pytest -vv instead of python setup.py test. Here's the Pytest output:

starting phase `check'
============================= test session starts ==============================
platform linux -- Python 3.10.7, pytest-7.1.3, pluggy-1.0.0 -- /gnu/store/l6fpy0i9hlll9b6k8vy2i2a4cshwz3cv-python-wrapper-3.10.7/bin/python
cachedir: .pytest_cache
hypothesis profile 'default' -> database=DirectoryBasedExampleDatabase('/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/.hypothesis/examples')
rootdir: /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2
plugins: hypothesis-6.54.5, asyncio-0.21.0
asyncio: mode=strict
collecting ... collected 363 items / 1 skipped

tools/test_wheel.py::test_has[curve] PASSED                              [  0%]
tools/test_wheel.py::test_has[ipc] PASSED                                [  0%]
tools/test_wheel.py::test_simple_socket PASSED                           [  0%]
tools/test_wheel.py::test_bundle_msvcp SKIPPED (only on CPython + Windows) [  1%]
zmq/tests/test_asyncio.py::test_socket_class PASSED                      [  1%]
zmq/tests/test_asyncio.py::test_instance_subclass_first PASSED           [  1%]
zmq/tests/test_asyncio.py::test_instance_subclass_second PASSED          [  1%]
zmq/tests/test_asyncio.py::test_recv_multipart PASSED                    [  2%]
zmq/tests/test_asyncio.py::test_recv PASSED                              [  2%]
zmq/tests/test_asyncio.py::test_recv_timeout PASSED                      [  2%]
zmq/tests/test_asyncio.py::test_send_timeout PASSED                      [  3%]
zmq/tests/test_asyncio.py::test_recv_string PASSED                       [  3%]
zmq/tests/test_asyncio.py::test_recv_json PASSED                         [  3%]
zmq/tests/test_asyncio.py::test_recv_json_cancelled PASSED               [  3%]
zmq/tests/test_asyncio.py::test_recv_pyobj PASSED                        [  4%]
zmq/tests/test_asyncio.py::test_custom_serialize PASSED                  [  4%]
zmq/tests/test_asyncio.py::test_custom_serialize_error PASSED            [  4%]
zmq/tests/test_asyncio.py::test_recv_dontwait PASSED                     [  4%]
zmq/tests/test_asyncio.py::test_recv_cancel PASSED                       [  5%]
zmq/tests/test_asyncio.py::test_poll PASSED                              [  5%]
zmq/tests/test_asyncio.py::test_poll_base_socket PASSED                  [  5%]
zmq/tests/test_asyncio.py::test_poll_on_closed_socket PASSED             [  6%]
zmq/tests/test_asyncio.py::test_poll_raw PASSED                          [  6%]
zmq/tests/test_asyncio.py::test_multiple_loops PASSED                    [  6%]
zmq/tests/test_asyncio.py::test_shadow PASSED                            [  6%]
zmq/tests/test_asyncio.py::test_process_teardown PASSED                  [  7%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_null FAILED       [  7%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_deny FAILED       [  7%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_allow FAILED      [  7%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_plain[True-correct-True] FAILED [  8%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_plain[False-correct-False] FAILED [  8%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_plain[True-incorrect-False] FAILED [  8%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[ok-*-True] FAILED [  9%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[ok-public_keys-True] FAILED [  9%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[bad-public_keys-False] FAILED [  9%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[None-public_keys-False] FAILED [  9%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[True-ok] FAILED [ 10%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[True-wrong] FAILED [ 10%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[False-ok] FAILED [ 10%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[False-wrong] FAILED [ 11%]
zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_user_id FAILED [ 11%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_null FAILED      [ 11%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_deny FAILED      [ 11%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_allow FAILED     [ 12%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_plain[True-correct-True] FAILED [ 12%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_plain[False-correct-False] FAILED [ 12%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_plain[True-incorrect-False] FAILED [ 12%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[ok-*-True] FAILED [ 13%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[ok-public_keys-True] FAILED [ 13%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[bad-public_keys-False] FAILED [ 13%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[None-public_keys-False] FAILED [ 14%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[True-ok] FAILED [ 14%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[True-wrong] FAILED [ 14%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[False-ok] FAILED [ 14%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[False-wrong] FAILED [ 15%]
zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_user_id FAILED [ 15%]
zmq/tests/test_auth.py::test_ioloop_authenticator PASSED                 [ 15%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_bind SKIPPED (CFFI not available) [ 15%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_bind_connect SKIPPED (CFFI not available) [ 16%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_ctx_new_destroy SKIPPED (CFFI not available) [ 16%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_getsockopt SKIPPED (CFFI not available) [ 16%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_msg_data SKIPPED (CFFI not available) [ 17%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_msg_init_close SKIPPED (CFFI not available) [ 17%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_msg_init_data SKIPPED (CFFI not available) [ 17%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_msg_init_size SKIPPED (CFFI not available) [ 17%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_poll SKIPPED (CFFI not available) [ 18%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_recv SKIPPED (CFFI not available) [ 18%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_send SKIPPED (CFFI not available) [ 18%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_setsockopt SKIPPED (CFFI not available) [ 19%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_socket_open_close SKIPPED (CFFI not available) [ 19%]
zmq/tests/test_cffi_backend.py::TestCFFIBackend::test_zmq_version_info SKIPPED (CFFI not available) [ 19%]
zmq/tests/test_constants.py::test_constants PASSED                       [ 19%]
zmq/tests/test_constants.py::test_socket_options PASSED                  [ 20%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_WS_UNSPECIFIED] PASSED [ 20%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_UNSPECIFIED] PASSED [ 20%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_UNEXPECTED_COMMAND] PASSED [ 20%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_INVALID_SEQUENCE] PASSED [ 21%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_KEY_EXCHANGE] PASSED [ 21%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_UNSPECIFIED] PASSED [ 21%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_MESSAGE] PASSED [ 22%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_HELLO] PASSED [ 22%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_INITIATE] PASSED [ 22%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_ERROR] PASSED [ 22%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_READY] PASSED [ 23%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_WELCOME] PASSED [ 23%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_INVALID_METADATA] PASSED [ 23%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_CRYPTOGRAPHIC] PASSED [ 23%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZMTP_MECHANISM_MISMATCH] PASSED [ 24%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZAP_UNSPECIFIED] PASSED [ 24%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZAP_MALFORMED_REPLY] PASSED [ 24%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZAP_BAD_REQUEST_ID] PASSED [ 25%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZAP_BAD_VERSION] PASSED [ 25%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZAP_INVALID_STATUS_CODE] PASSED [ 25%]
zmq/tests/test_constants.py::test_event_reprs[PROTOCOL_ERROR_ZAP_INVALID_METADATA] PASSED [ 25%]
zmq/tests/test_constants.py::test_event_reprs[CONNECTED] PASSED          [ 26%]
zmq/tests/test_constants.py::test_event_reprs[CONNECT_DELAYED] PASSED    [ 26%]
zmq/tests/test_constants.py::test_event_reprs[CONNECT_RETRIED] PASSED    [ 26%]
zmq/tests/test_constants.py::test_event_reprs[LISTENING] PASSED          [ 26%]
zmq/tests/test_constants.py::test_event_reprs[BIND_FAILED] PASSED        [ 27%]
zmq/tests/test_constants.py::test_event_reprs[ACCEPTED] PASSED           [ 27%]
zmq/tests/test_constants.py::test_event_reprs[ACCEPT_FAILED] PASSED      [ 27%]
zmq/tests/test_constants.py::test_event_reprs[CLOSED] PASSED             [ 28%]
zmq/tests/test_constants.py::test_event_reprs[CLOSE_FAILED] PASSED       [ 28%]
zmq/tests/test_constants.py::test_event_reprs[DISCONNECTED] PASSED       [ 28%]
zmq/tests/test_constants.py::test_event_reprs[MONITOR_STOPPED] PASSED    [ 28%]
zmq/tests/test_constants.py::test_event_reprs[HANDSHAKE_FAILED_NO_DETAIL] PASSED [ 29%]
zmq/tests/test_constants.py::test_event_reprs[HANDSHAKE_SUCCEEDED] PASSED [ 29%]
zmq/tests/test_constants.py::test_event_reprs[HANDSHAKE_FAILED_PROTOCOL] PASSED [ 29%]
zmq/tests/test_constants.py::test_event_reprs[HANDSHAKE_FAILED_AUTH] PASSED [ 30%]
zmq/tests/test_constants.py::test_event_reprs[ALL_V1] PASSED             [ 30%]
zmq/tests/test_constants.py::test_event_reprs[ALL] PASSED                [ 30%]
zmq/tests/test_constants.py::test_event_reprs[PIPES_STATS] PASSED        [ 30%]
zmq/tests/test_constants.py::test_event_reprs[ALL_V2] PASSED             [ 31%]
zmq/tests/test_context.py::TestContext::test_context_manager PASSED      [ 31%]
zmq/tests/test_context.py::TestContext::test_copy PASSED                 [ 31%]
zmq/tests/test_context.py::TestContext::test_ctx_opts PASSED             [ 31%]
zmq/tests/test_context.py::TestContext::test_cyclic_destroy PASSED       [ 32%]
zmq/tests/test_context.py::TestContext::test_destroy PASSED              [ 32%]
zmq/tests/test_context.py::TestContext::test_destroy_linger PASSED       [ 32%]
zmq/tests/test_context.py::TestContext::test_destroy_no_sockets PASSED   [ 33%]
zmq/tests/test_context.py::TestContext::test_dir PASSED                  [ 33%]
zmq/tests/test_context.py::TestContext::test_fail_init PASSED            [ 33%]
zmq/tests/test_context.py::TestContext::test_fork_instance PASSED        [ 33%]
zmq/tests/test_context.py::TestContext::test_gc PASSED                   [ 34%]
zmq/tests/test_context.py::TestContext::test_init PASSED                 [ 34%]
zmq/tests/test_context.py::TestContext::test_instance PASSED             [ 34%]
zmq/tests/test_context.py::TestContext::test_instance_subclass_first PASSED [ 34%]
zmq/tests/test_context.py::TestContext::test_instance_subclass_second PASSED [ 35%]
zmq/tests/test_context.py::TestContext::test_instance_threadsafe PASSED  [ 35%]
zmq/tests/test_context.py::TestContext::test_many_sockets PASSED         [ 35%]
zmq/tests/test_context.py::TestContext::test_mockable PASSED             [ 36%]
zmq/tests/test_context.py::TestContext::test_repr PASSED                 [ 36%]
zmq/tests/test_context.py::TestContext::test_shadow PASSED               [ 36%]
zmq/tests/test_context.py::TestContext::test_shadow_pyczmq SKIPPED (Requires pyczmq) [ 36%]
zmq/tests/test_context.py::TestContext::test_socket_class_arg PASSED     [ 37%]
zmq/tests/test_context.py::TestContext::test_socket_passes_kwargs PASSED [ 37%]
zmq/tests/test_context.py::TestContext::test_sockopts PASSED             [ 37%]
zmq/tests/test_context.py::TestContext::test_term PASSED                 [ 38%]
zmq/tests/test_context.py::TestContext::test_term_hang PASSED            [ 38%]
zmq/tests/test_context.py::TestContext::test_term_noclose PASSED         [ 38%]
zmq/tests/test_context.py::TestContext::test_term_thread PASSED          [ 38%]
zmq/tests/test_cython.py::test_cython[3] PASSED                          [ 39%]
zmq/tests/test_cython.py::test_cython[2] PASSED                          [ 39%]
zmq/tests/test_decorators.py::test_ctx PASSED                            [ 39%]
zmq/tests/test_decorators.py::test_ctx_orig_args PASSED                  [ 39%]
zmq/tests/test_decorators.py::test_ctx_arg_naming PASSED                 [ 40%]
zmq/tests/test_decorators.py::test_ctx_args PASSED                       [ 40%]
zmq/tests/test_decorators.py::test_ctx_arg_kwarg PASSED                  [ 40%]
zmq/tests/test_decorators.py::test_ctx_kw_naming PASSED                  [ 41%]
zmq/tests/test_decorators.py::test_ctx_kwargs PASSED                     [ 41%]
zmq/tests/test_decorators.py::test_ctx_kwargs_default PASSED             [ 41%]
zmq/tests/test_decorators.py::test_ctx_keyword_miss PASSED               [ 41%]
zmq/tests/test_decorators.py::test_ctx_multi_assign PASSED               [ 42%]
zmq/tests/test_decorators.py::test_ctx_reinit PASSED                     [ 42%]
zmq/tests/test_decorators.py::test_ctx_multi_thread PASSED               [ 42%]
zmq/tests/test_decorators.py::test_ctx_skt PASSED                        [ 42%]
zmq/tests/test_decorators.py::test_skt_name PASSED                       [ 43%]
zmq/tests/test_decorators.py::test_skt_kwarg PASSED                      [ 43%]
zmq/tests/test_decorators.py::test_ctx_skt_name PASSED                   [ 43%]
zmq/tests/test_decorators.py::test_skt_default_ctx PASSED                [ 44%]
zmq/tests/test_decorators.py::test_skt_reinit PASSED                     [ 44%]
zmq/tests/test_decorators.py::test_ctx_skt_reinit PASSED                 [ 44%]
zmq/tests/test_decorators.py::test_skt_type_miss PASSED                  [ 44%]
zmq/tests/test_decorators.py::test_multi_skts PASSED                     [ 45%]
zmq/tests/test_decorators.py::test_multi_skts_single_ctx PASSED          [ 45%]
zmq/tests/test_decorators.py::test_multi_skts_with_name PASSED           [ 45%]
zmq/tests/test_decorators.py::test_func_return PASSED                    [ 46%]
zmq/tests/test_decorators.py::test_skt_multi_thread PASSED               [ 46%]
zmq/tests/test_decorators.py::TestMethodDecorators::test_multi_skts_method PASSED [ 46%]
zmq/tests/test_decorators.py::TestMethodDecorators::test_multi_skts_method_other_args PASSED [ 46%]
zmq/tests/test_device.py::TestDevice::test_device_attributes PASSED      [ 47%]
zmq/tests/test_device.py::TestDevice::test_device_bind_to_random_binderror PASSED [ 47%]
zmq/tests/test_device.py::TestDevice::test_device_bind_to_random_with_args PASSED [ 47%]
zmq/tests/test_device.py::TestDevice::test_device_types PASSED           [ 47%]
zmq/tests/test_device.py::TestDevice::test_proxy PASSED                  [ 48%]
zmq/tests/test_device.py::TestDevice::test_proxy_bind_to_random_with_args PASSED [ 48%]
zmq/tests/test_device.py::TestDevice::test_single_socket_forwarder_bind PASSED [ 48%]
zmq/tests/test_device.py::TestDevice::test_single_socket_forwarder_connect PASSED [ 49%]
zmq/tests/test_error.py::TestZMQError::test_again PASSED                 [ 49%]
zmq/tests/test_error.py::TestZMQError::test_strerror PASSED              [ 49%]
zmq/tests/test_error.py::TestZMQError::test_zmqerror PASSED              [ 49%]
zmq/tests/test_etc.py::test_has PASSED                                   [ 50%]
zmq/tests/test_etc.py::test_has_curve SKIPPED (bundled libzmq)           [ 50%]
zmq/tests/test_etc.py::test_has_ipc SKIPPED (bundled libzmq)             [ 50%]
zmq/tests/test_ext.py::test_custom_context PASSED                        [ 50%]
zmq/tests/test_future.py::TestFutureSocket::test_close_all_fds PASSED    [ 51%]
zmq/tests/test_future.py::TestFutureSocket::test_custom_serialize PASSED [ 51%]
zmq/tests/test_future.py::TestFutureSocket::test_custom_serialize_error PASSED [ 51%]
zmq/tests/test_future.py::TestFutureSocket::test_instance_subclass_first PASSED [ 52%]
zmq/tests/test_future.py::TestFutureSocket::test_instance_subclass_second PASSED [ 52%]
zmq/tests/test_future.py::TestFutureSocket::test_poll PASSED             [ 52%]
zmq/tests/test_future.py::TestFutureSocket::test_poll_base_socket PASSED [ 52%]
zmq/tests/test_future.py::TestFutureSocket::test_poll_raw PASSED         [ 53%]
zmq/tests/test_future.py::TestFutureSocket::test_recv PASSED             [ 53%]
zmq/tests/test_future.py::TestFutureSocket::test_recv_cancel PASSED      [ 53%]
zmq/tests/test_future.py::TestFutureSocket::test_recv_json PASSED        [ 53%]
zmq/tests/test_future.py::TestFutureSocket::test_recv_json_cancelled PASSED [ 54%]
zmq/tests/test_future.py::TestFutureSocket::test_recv_multipart PASSED   [ 54%]
zmq/tests/test_future.py::TestFutureSocket::test_recv_pyobj PASSED       [ 54%]
zmq/tests/test_future.py::TestFutureSocket::test_recv_string PASSED      [ 55%]
zmq/tests/test_future.py::TestFutureSocket::test_recv_timeout PASSED     [ 55%]
zmq/tests/test_future.py::TestFutureSocket::test_send_multipart_noblock PASSED [ 55%]
zmq/tests/test_future.py::TestFutureSocket::test_send_noblock PASSED     [ 55%]
zmq/tests/test_future.py::TestFutureSocket::test_send_timeout PASSED     [ 56%]
zmq/tests/test_future.py::TestFutureSocket::test_socket_class PASSED     [ 56%]
zmq/tests/test_imports.py::test_toplevel PASSED                          [ 56%]
zmq/tests/test_imports.py::test_core PASSED                              [ 57%]
zmq/tests/test_imports.py::test_devices PASSED                           [ 57%]
zmq/tests/test_imports.py::test_log PASSED                               [ 57%]
zmq/tests/test_imports.py::test_eventloop PASSED                         [ 57%]
zmq/tests/test_imports.py::test_utils PASSED                             [ 58%]
zmq/tests/test_imports.py::test_ssh PASSED                               [ 58%]
zmq/tests/test_imports.py::test_decorators PASSED                        [ 58%]
zmq/tests/test_imports.py::test_zmq_all PASSED                           [ 58%]
zmq/tests/test_imports.py::test_all_exports[RCVTIMEO-zmq] PASSED         [ 59%]
zmq/tests/test_imports.py::test_all_exports[RCVTIMEO-zmq.green] SKIPPED (could not import 'zmq.green': No module named 'gevent') [ 59%]
zmq/tests/test_imports.py::test_all_exports[PUSH-zmq] PASSED             [ 59%]
zmq/tests/test_imports.py::test_all_exports[PUSH-zmq.green] SKIPPED (could not import 'zmq.green': No module named 'gevent') [ 60%]
zmq/tests/test_imports.py::test_all_exports[zmq_version_info-zmq] PASSED [ 60%]
zmq/tests/test_imports.py::test_all_exports[zmq_version_info-zmq.green] SKIPPED (could not import 'zmq.green': No module named 'gevent') [ 60%]
zmq/tests/test_imports.py::test_all_exports[SocketOption-zmq] PASSED     [ 60%]
zmq/tests/test_imports.py::test_all_exports[SocketOption-zmq.green] SKIPPED (could not import 'zmq.green': No module named 'gevent') [ 61%]
zmq/tests/test_imports.py::test_all_exports[device-zmq] PASSED           [ 61%]
zmq/tests/test_imports.py::test_all_exports[device-zmq.green] SKIPPED (could not import 'zmq.green': No module named 'gevent') [ 61%]
zmq/tests/test_imports.py::test_all_exports[Socket-zmq] PASSED           [ 61%]
zmq/tests/test_imports.py::test_all_exports[Socket-zmq.green] SKIPPED (could not import 'zmq.green': No module named 'gevent') [ 62%]
zmq/tests/test_imports.py::test_all_exports[Context-zmq] PASSED          [ 62%]
zmq/tests/test_imports.py::test_all_exports[Context-zmq.green] SKIPPED (could not import 'zmq.green': No module named 'gevent') [ 62%]
zmq/tests/test_includes.py::TestIncludes::test_get_includes PASSED       [ 63%]
zmq/tests/test_includes.py::TestIncludes::test_get_library_dirs PASSED   [ 63%]
zmq/tests/test_ioloop.py::test_ioloop PASSED                             [ 63%]
zmq/tests/test_ioloop.py::test_ioloop_install PASSED                     [ 63%]
zmq/tests/test_log.py::TestPubLog::test_blank_root_topic PASSED          [ 64%]
zmq/tests/test_log.py::TestPubLog::test_custom_debug_formatter PASSED    [ 64%]
zmq/tests/test_log.py::TestPubLog::test_custom_global_formatter PASSED   [ 64%]
zmq/tests/test_log.py::TestPubLog::test_custom_message_type PASSED       [ 65%]
zmq/tests/test_log.py::TestPubLog::test_init_iface PASSED                [ 65%]
zmq/tests/test_log.py::TestPubLog::test_init_socket PASSED               [ 65%]
zmq/tests/test_log.py::TestPubLog::test_root_topic PASSED                [ 65%]
zmq/tests/test_log.py::TestPubLog::test_set_info_formatter_via_property PASSED [ 66%]
zmq/tests/test_log.py::TestPubLog::test_unicode_message PASSED           [ 66%]
zmq/tests/test_message.py::TestFrame::test_above_30 PASSED               [ 66%]
zmq/tests/test_message.py::TestFrame::test_bad_buffer_in PASSED          [ 66%]
zmq/tests/test_message.py::TestFrame::test_buffer_in PASSED              [ 67%]
zmq/tests/test_message.py::TestFrame::test_buffer_numpy SKIPPED (requires numpy) [ 67%]
zmq/tests/test_message.py::TestFrame::test_buffer_out PASSED             [ 67%]
zmq/tests/test_message.py::TestFrame::test_bytes PASSED                  [ 68%]
zmq/tests/test_message.py::TestFrame::test_frame_more PASSED             [ 68%]
zmq/tests/test_message.py::TestFrame::test_len PASSED                    [ 68%]
zmq/tests/test_message.py::TestFrame::test_lifecycle1 PASSED             [ 68%]
zmq/tests/test_message.py::TestFrame::test_lifecycle2 PASSED             [ 69%]
zmq/tests/test_message.py::TestFrame::test_memoryview PASSED             [ 69%]
zmq/tests/test_message.py::TestFrame::test_memoryview_shape PASSED       [ 69%]
zmq/tests/test_message.py::TestFrame::test_multi_tracker PASSED          [ 69%]
zmq/tests/test_message.py::TestFrame::test_multisend PASSED              [ 70%]
zmq/tests/test_message.py::TestFrame::test_no_tracker PASSED             [ 70%]
zmq/tests/test_message.py::TestFrame::test_noncopying_memoryview PASSED  [ 70%]
zmq/tests/test_message.py::TestFrame::test_noncopying_recv PASSED        [ 71%]
zmq/tests/test_message.py::TestFrame::test_str PASSED                    [ 71%]
zmq/tests/test_message.py::TestFrame::test_tracker PASSED                [ 71%]
zmq/tests/test_message.py::TestFrame::test_unicode PASSED                [ 71%]
zmq/tests/test_monitor.py::test_monitor[zmq] PASSED                      [ 72%]
zmq/tests/test_monitor.py::test_monitor[asyncio] PASSED                  [ 72%]
zmq/tests/test_monitor.py::test_monitor_repeat[zmq] PASSED               [ 72%]
zmq/tests/test_monitor.py::test_monitor_repeat[asyncio] PASSED           [ 73%]
zmq/tests/test_monitor.py::test_monitor_connected[zmq] PASSED            [ 73%]
zmq/tests/test_monitor.py::test_monitor_connected[asyncio] PASSED        [ 73%]
zmq/tests/test_monqueue.py::TestMonitoredQueue::test_default_mq_args PASSED [ 73%]
zmq/tests/test_monqueue.py::TestMonitoredQueue::test_monitor PASSED      [ 74%]
zmq/tests/test_monqueue.py::TestMonitoredQueue::test_monitor_subscribe PASSED [ 74%]
zmq/tests/test_monqueue.py::TestMonitoredQueue::test_mq_check_prefix PASSED [ 74%]
zmq/tests/test_monqueue.py::TestMonitoredQueue::test_prefix PASSED       [ 74%]
zmq/tests/test_monqueue.py::TestMonitoredQueue::test_queue PASSED        [ 75%]
zmq/tests/test_monqueue.py::TestMonitoredQueue::test_reply PASSED        [ 75%]
zmq/tests/test_monqueue.py::TestMonitoredQueue::test_router_router PASSED [ 75%]
zmq/tests/test_multipart.py::TestMultipart::test_basic_multipart PASSED  [ 76%]
zmq/tests/test_multipart.py::TestMultipart::test_router_dealer PASSED    [ 76%]
zmq/tests/test_pair.py::TestPair::test_basic PASSED                      [ 76%]
zmq/tests/test_pair.py::TestPair::test_json PASSED                       [ 76%]
zmq/tests/test_pair.py::TestPair::test_multiple PASSED                   [ 77%]
zmq/tests/test_pair.py::TestPair::test_pyobj PASSED                      [ 77%]
zmq/tests/test_poll.py::TestPoll::test_no_events PASSED                  [ 77%]
zmq/tests/test_poll.py::TestPoll::test_pair PASSED                       [ 77%]
zmq/tests/test_poll.py::TestPoll::test_pubsub PASSED                     [ 78%]
zmq/tests/test_poll.py::TestPoll::test_raw PASSED                        [ 78%]
zmq/tests/test_poll.py::TestPoll::test_reqrep PASSED                     [ 78%]
zmq/tests/test_poll.py::TestPoll::test_timeout PASSED                    [ 79%]
zmq/tests/test_poll.py::TestSelect::test_pair PASSED                     [ 79%]
zmq/tests/test_poll.py::TestSelect::test_timeout PASSED                  [ 79%]
zmq/tests/test_proxy_steerable.py::TestProxySteerable::test_proxy_steerable PASSED [ 79%]
zmq/tests/test_proxy_steerable.py::TestProxySteerable::test_proxy_steerable_bind_to_random_with_args PASSED [ 80%]
zmq/tests/test_proxy_steerable.py::TestProxySteerable::test_proxy_steerable_statistics PASSED [ 80%]
zmq/tests/test_pubsub.py::TestPubSub::test_basic PASSED                  [ 80%]
zmq/tests/test_pubsub.py::TestPubSub::test_topic PASSED                  [ 80%]
zmq/tests/test_reqrep.py::TestReqRep::test_bad_send_recv PASSED          [ 81%]
zmq/tests/test_reqrep.py::TestReqRep::test_basic PASSED                  [ 81%]
zmq/tests/test_reqrep.py::TestReqRep::test_json PASSED                   [ 81%]
zmq/tests/test_reqrep.py::TestReqRep::test_large_msg PASSED              [ 82%]
zmq/tests/test_reqrep.py::TestReqRep::test_multiple PASSED               [ 82%]
zmq/tests/test_reqrep.py::TestReqRep::test_pyobj PASSED                  [ 82%]
zmq/tests/test_retry_eintr.py::TestEINTRSysCall::test_retry_getsockopt SKIPPED (TODO: find a way to interrupt getsockopt) [ 82%]
zmq/tests/test_retry_eintr.py::TestEINTRSysCall::test_retry_poll PASSED  [ 83%]
zmq/tests/test_retry_eintr.py::TestEINTRSysCall::test_retry_recv PASSED  [ 83%]
zmq/tests/test_retry_eintr.py::TestEINTRSysCall::test_retry_send PASSED  [ 83%]
zmq/tests/test_retry_eintr.py::TestEINTRSysCall::test_retry_setsockopt SKIPPED (TODO: find a way to interrupt setsockopt) [ 84%]
zmq/tests/test_retry_eintr.py::TestEINTRSysCall::test_retry_term PASSED  [ 84%]
zmq/tests/test_security.py::TestSecurity::test_curve PASSED              [ 84%]
zmq/tests/test_security.py::TestSecurity::test_curve_public PASSED       [ 84%]
zmq/tests/test_security.py::TestSecurity::test_keypair PASSED            [ 85%]
zmq/tests/test_security.py::TestSecurity::test_null PASSED               [ 85%]
zmq/tests/test_security.py::TestSecurity::test_plain PASSED              [ 85%]
zmq/tests/test_socket.py::TestSocket::test_attr PASSED                   [ 85%]
zmq/tests/test_socket.py::TestSocket::test_bad_attr PASSED               [ 86%]
zmq/tests/test_socket.py::TestSocket::test_bad_sockopts PASSED           [ 86%]
zmq/tests/test_socket.py::TestSocket::test_bind_to_random_port PASSED    [ 86%]
zmq/tests/test_socket.py::TestSocket::test_bind_unicode PASSED           [ 87%]
zmq/tests/test_socket.py::TestSocket::test_close PASSED                  [ 87%]
zmq/tests/test_socket.py::TestSocket::test_close_after_destroy PASSED    [ 87%]
zmq/tests/test_socket.py::TestSocket::test_connect_unicode PASSED        [ 87%]
zmq/tests/test_socket.py::TestSocket::test_connectbind_context_managers PASSED [ 88%]
zmq/tests/test_socket.py::TestSocket::test_context_manager PASSED        [ 88%]
zmq/tests/test_socket.py::TestSocket::test_copy PASSED                   [ 88%]
zmq/tests/test_socket.py::TestSocket::test_create PASSED                 [ 88%]
zmq/tests/test_socket.py::TestSocket::test_custom_serialize PASSED       [ 89%]
zmq/tests/test_socket.py::TestSocket::test_dir PASSED                    [ 89%]
zmq/tests/test_socket.py::TestSocket::test_hwm PASSED                    [ 89%]
zmq/tests/test_socket.py::TestSocket::test_identity PASSED               [ 90%]
zmq/tests/test_socket.py::TestSocket::test_int_sockopts PASSED           [ 90%]
zmq/tests/test_socket.py::TestSocket::test_ipc_path_max_length PASSED    [ 90%]
zmq/tests/test_socket.py::TestSocket::test_ipc_path_max_length_msg PASSED [ 90%]
zmq/tests/test_socket.py::TestSocket::test_ipc_path_no_such_file_or_directory_message PASSED [ 91%]
zmq/tests/test_socket.py::TestSocket::test_large_send PASSED             [ 91%]
zmq/tests/test_socket.py::TestSocket::test_mockable PASSED               [ 91%]
zmq/tests/test_socket.py::TestSocket::test_poll PASSED                   [ 92%]
zmq/tests/test_socket.py::TestSocket::test_recv_multipart PASSED         [ 92%]
zmq/tests/test_socket.py::TestSocket::test_repr PASSED                   [ 92%]
zmq/tests/test_socket.py::TestSocket::test_send_buffer PASSED            [ 92%]
zmq/tests/test_socket.py::TestSocket::test_send_multipart_check_type PASSED [ 93%]
zmq/tests/test_socket.py::TestSocket::test_send_unicode PASSED           [ 93%]
zmq/tests/test_socket.py::TestSocket::test_shadow PASSED                 [ 93%]
zmq/tests/test_socket.py::TestSocket::test_shadow_pyczmq SKIPPED (Requires pyczmq) [ 93%]
zmq/tests/test_socket.py::TestSocket::test_sockopt_roundtrip PASSED      [ 94%]
zmq/tests/test_socket.py::TestSocket::test_subclass PASSED               [ 94%]
zmq/tests/test_socket.py::TestSocket::test_subscribe_method PASSED       [ 94%]
zmq/tests/test_socket.py::TestSocket::test_tracker PASSED                [ 95%]
zmq/tests/test_socket.py::TestSocket::test_unicode_sockopts PASSED       [ 95%]
zmq/tests/test_ssh.py::test_random_ports PASSED                          [ 95%]
zmq/tests/test_version.py::TestVersion::test_pyzmq_version PASSED        [ 95%]
zmq/tests/test_version.py::TestVersion::test_pyzmq_version_info PASSED   [ 96%]
zmq/tests/test_version.py::TestVersion::test_zmq_version PASSED          [ 96%]
zmq/tests/test_version.py::TestVersion::test_zmq_version_info PASSED     [ 96%]
zmq/tests/test_win32_shim.py::TestWindowsConsoleControlHandler::test_handler SKIPPED (Windows only test) [ 96%]
zmq/tests/test_z85.py::TestZ85::test_client_public PASSED                [ 97%]
zmq/tests/test_z85.py::TestZ85::test_client_secret PASSED                [ 97%]
zmq/tests/test_z85.py::TestZ85::test_server_public PASSED                [ 97%]
zmq/tests/test_z85.py::TestZ85::test_server_secret PASSED                [ 98%]
zmq/tests/test_zmqstream.py::test_callable_check ERROR                   [ 98%]
zmq/tests/test_zmqstream.py::test_on_recv_basic ERROR                    [ 98%]
zmq/tests/test_zmqstream.py::test_on_recv_wake ERROR                     [ 98%]
zmq/tests/test_zmqstream.py::test_on_recv_async ERROR                    [ 99%]
zmq/tests/test_zmqstream.py::test_on_recv_async_error ERROR              [ 99%]
zmq/tests/test_zmqstream.py::test_shadow_socket PASSED                   [ 99%]
zmq/tests/test_zmqstream.py::test_shadow_socket_close PASSED             [100%]

==================================== ERRORS ====================================
____________________ ERROR at setup of test_callable_check _____________________

push_pull = <coroutine object push_pull at 0x7ffff4259770>

    @pytest.fixture
    def pull(push_pull):
>       push, pull = push_pull
E       TypeError: cannot unpack non-iterable coroutine object

zmq/tests/test_zmqstream.py:42: TypeError
_____________________ ERROR at setup of test_on_recv_basic _____________________

push_pull = <coroutine object push_pull at 0x7ffff425b990>

    @pytest.fixture
    def push(push_pull):
>       push, pull = push_pull
E       TypeError: cannot unpack non-iterable coroutine object

zmq/tests/test_zmqstream.py:36: TypeError
_____________________ ERROR at setup of test_on_recv_wake ______________________

push_pull = <coroutine object push_pull at 0x7ffff425bd80>

    @pytest.fixture
    def push(push_pull):
>       push, pull = push_pull
E       TypeError: cannot unpack non-iterable coroutine object

zmq/tests/test_zmqstream.py:36: TypeError
_____________________ ERROR at setup of test_on_recv_async _____________________

push_pull = <coroutine object push_pull at 0x7ffff42b86d0>

    @pytest.fixture
    def push(push_pull):
>       push, pull = push_pull
E       TypeError: cannot unpack non-iterable coroutine object

zmq/tests/test_zmqstream.py:36: TypeError
__________________ ERROR at setup of test_on_recv_async_error __________________

push_pull = <coroutine object push_pull at 0x7ffff42b8cf0>

    @pytest.fixture
    def push(push_pull):
>       push, pull = push_pull
E       TypeError: cannot unpack non-iterable coroutine object

zmq/tests/test_zmqstream.py:36: TypeError
=================================== FAILURES ===================================
______________________ TestThreadAuthentication.test_null ______________________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595b1f0>

    async def test_null(self):
        """threaded auth - NULL"""
        # A default NULL connection should always succeed, and not
        # go through our authentication infrastructure at all.
>       self.auth.stop()
E       AttributeError: 'NoneType' object has no attribute 'stop'

zmq/tests/test_auth.py:196: AttributeError
______________________ TestThreadAuthentication.test_deny ______________________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595af80>

    async def test_deny(self):
        # deny 127.0.0.1, connection should fail
>       self.auth.deny('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'deny'

zmq/tests/test_auth.py:215: AttributeError
_____________________ TestThreadAuthentication.test_allow ______________________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595add0>

    async def test_allow(self):
        # allow 127.0.0.1, connection should pass
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:226: AttributeError
____________ TestThreadAuthentication.test_plain[True-correct-True] ____________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a950>
enabled = True, password = 'correct', success = True

    @pytest.mark.parametrize(
        "enabled, password, success",
        [
            (True, "correct", True),
            (False, "correct", False),
            (True, "incorrect", False),
        ],
    )
    async def test_plain(self, enabled, password, success):
        """threaded auth - PLAIN"""

        # Try PLAIN authentication - without configuring server, connection should fail
>       with self.push_pull() as (server, client):

zmq/tests/test_auth.py:247: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/dy3xh053ahkhrp2jamggq8cpsyvp8mg0-python-3.10.7/lib/python3.10/contextlib.py:135: in __enter__
    return next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a950>

    @contextmanager
    def push_pull(self):
>       with self.context.socket(zmq.PUSH) as server, self.context.socket(
            zmq.PULL
        ) as client:
E       AttributeError: 'TestThreadAuthentication' object has no attribute 'context'

zmq/tests/test_auth.py:166: AttributeError
___________ TestThreadAuthentication.test_plain[False-correct-False] ___________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a710>
enabled = False, password = 'correct', success = False

    @pytest.mark.parametrize(
        "enabled, password, success",
        [
            (True, "correct", True),
            (False, "correct", False),
            (True, "incorrect", False),
        ],
    )
    async def test_plain(self, enabled, password, success):
        """threaded auth - PLAIN"""

        # Try PLAIN authentication - without configuring server, connection should fail
>       with self.push_pull() as (server, client):

zmq/tests/test_auth.py:247: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/dy3xh053ahkhrp2jamggq8cpsyvp8mg0-python-3.10.7/lib/python3.10/contextlib.py:135: in __enter__
    return next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a710>

    @contextmanager
    def push_pull(self):
>       with self.context.socket(zmq.PUSH) as server, self.context.socket(
            zmq.PULL
        ) as client:
E       AttributeError: 'TestThreadAuthentication' object has no attribute 'context'

zmq/tests/test_auth.py:166: AttributeError
__________ TestThreadAuthentication.test_plain[True-incorrect-False] ___________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a7a0>
enabled = True, password = 'incorrect', success = False

    @pytest.mark.parametrize(
        "enabled, password, success",
        [
            (True, "correct", True),
            (False, "correct", False),
            (True, "incorrect", False),
        ],
    )
    async def test_plain(self, enabled, password, success):
        """threaded auth - PLAIN"""

        # Try PLAIN authentication - without configuring server, connection should fail
>       with self.push_pull() as (server, client):

zmq/tests/test_auth.py:247: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/dy3xh053ahkhrp2jamggq8cpsyvp8mg0-python-3.10.7/lib/python3.10/contextlib.py:135: in __enter__
    return next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a7a0>

    @contextmanager
    def push_pull(self):
>       with self.context.socket(zmq.PUSH) as server, self.context.socket(
            zmq.PULL
        ) as client:
E       AttributeError: 'TestThreadAuthentication' object has no attribute 'context'

zmq/tests/test_auth.py:166: AttributeError
________________ TestThreadAuthentication.test_curve[ok-*-True] ________________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a5c0>
certs = (b'A$t5!!2cuHj.N8f^.y!b:wabTpD{g1gx!/t/=gnG', b'QB2.TKu-+M-=B?ELdRqUQ{%vya:t)msRiemcOU=&', b'lw:Z&9xu@5iEx@R1k>tYx9AJ*v1HjKPkJ^?^ZLX}', b'oI8?Uh:DA-sFc@{pAf4+bpkE5rZ3Q>]#kqAY2YZ@')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_ok___True_0/certs/public_keys'
client_key = 'ok', location = '*', success = True

    @pytest.mark.parametrize(
        "client_key, location, success",
        [
            ('ok', zmq.auth.CURVE_ALLOW_ANY, True),
            ('ok', "public_keys", True),
            ('bad', "public_keys", False),
            (None, "public_keys", False),
        ],
    )
    async def test_curve(self, certs, public_keys_dir, client_key, location, success):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:276: AttributeError
___________ TestThreadAuthentication.test_curve[ok-public_keys-True] ___________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a560>
certs = (b'AYft]BEVGMQEr&#(W6l8l-DrdiGRlKPWBT[-P8hF', b'dE?]-A6kA3gg<i^dkpBO>x0<sWBK0Lp{kBnn%Z?=', b'{&s.%kr80a6<i-ICJlI^PS>7$4fNXBxi=&!HEG08', b'Pc2#qn*[fZ2AgneeXU-r-s{fy4B:8{6N4zIw0BI.')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_ok_public_keys_True0/certs/public_keys'
client_key = 'ok', location = 'public_keys', success = True

    @pytest.mark.parametrize(
        "client_key, location, success",
        [
            ('ok', zmq.auth.CURVE_ALLOW_ANY, True),
            ('ok', "public_keys", True),
            ('bad', "public_keys", False),
            (None, "public_keys", False),
        ],
    )
    async def test_curve(self, certs, public_keys_dir, client_key, location, success):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:276: AttributeError
__________ TestThreadAuthentication.test_curve[bad-public_keys-False] __________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a3e0>
certs = (b'mytjP4T#RXT[.f%f+ic{&NM%PdjsrziBv8uH*Jtw', b'}0GlFR=C]PTOvMF3vSxh1*iQuG&hwsIeqA6y]Fxl', b'ELK[I[D8n5B7*8Fk?thnHV?5EQ@vmfJG&8F!mPvw', b'EDPj$f/n4Tz55N!ci2/LFc8>8yZHr[0CAPpb&n$&')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_bad_public_keys_Fal0/certs/public_keys'
client_key = 'bad', location = 'public_keys', success = False

    @pytest.mark.parametrize(
        "client_key, location, success",
        [
            ('ok', zmq.auth.CURVE_ALLOW_ANY, True),
            ('ok', "public_keys", True),
            ('bad', "public_keys", False),
            (None, "public_keys", False),
        ],
    )
    async def test_curve(self, certs, public_keys_dir, client_key, location, success):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:276: AttributeError
_________ TestThreadAuthentication.test_curve[None-public_keys-False] __________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff5959f90>
certs = (b'OI!F=4j.)]8+)*@vx<Nets%OM7dO2TGtw5De:X]N', b'>B</+fH.1x&A%:>a9gqRtO?&:Lz&osEZXT$2^(7Y', b'lS<6eM4c/ftc4wX:RXy]{s915y6Z7?t>vt6.C}:<', b'xn(tf<sslT(9dH3{]e@Ee57))7A@c9(Z{XB]t!e7')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_None_public_keys_Fa0/certs/public_keys'
client_key = None, location = 'public_keys', success = False

    @pytest.mark.parametrize(
        "client_key, location, success",
        [
            ('ok', zmq.auth.CURVE_ALLOW_ANY, True),
            ('ok', "public_keys", True),
            ('bad', "public_keys", False),
            (None, "public_keys", False),
        ],
    )
    async def test_curve(self, certs, public_keys_dir, client_key, location, success):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:276: AttributeError
____________ TestThreadAuthentication.test_curve_callback[True-ok] _____________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a0e0>
certs = (b'^Rum.)}YDt[L-FU:/p:2M@9h%wMeN-gVVF^0uzpG', b'4xwMq=aa:tj-Zw0=h+X&F#cH[7x/4$1N[(=I-#h-', b'!1Dxw84Q+J*GRm5YOBfLz4A?0rX?J@[E6ZlOW33E', b'4E/8dms)C!M^o%v+WoN@Bg%2MkVAb^zWGoI0gX-y')
key = 'ok', async_ = True

    @pytest.mark.parametrize("key", ["ok", "wrong"])
    @pytest.mark.parametrize("async_", [True, False])
    async def test_curve_callback(self, certs, key, async_):
        """threaded auth - CURVE with callback authentication"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:301: AttributeError
___________ TestThreadAuthentication.test_curve_callback[True-wrong] ___________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595ac80>
certs = (b'Gb3G>x6)@I<}9V)9Ws^}g9!@Thd65[CK{40j7{uY', b'zvwXGpv$o-m@Ko^+JQ>e+X.bJBi=IKc(g5uOtnMH', b'p2-[8.mv=lwvtCVMXP@oz+T-!]{kXOl.kCIhP>Ir', b'N*uw1(VZDkxT($sL[4w4x?9nYW>U9cnjA0f.6xZv')
key = 'wrong', async_ = True

    @pytest.mark.parametrize("key", ["ok", "wrong"])
    @pytest.mark.parametrize("async_", [True, False])
    async def test_curve_callback(self, certs, key, async_):
        """threaded auth - CURVE with callback authentication"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:301: AttributeError
____________ TestThreadAuthentication.test_curve_callback[False-ok] ____________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a800>
certs = (b'+90z@p*nnGUhwwS}rTKBB$9bYzsrUkhbUfyY<WT+', b'49F2VsSi85K0^IDc<txvQ6F$<WU9kd*ZzHzqNdBY', b'ZLD@3d+=/n+Ia[4I1wo$Noxg7=!{u[]1Pw]3#5<j', b'?FoR5@8:?+2[W)Vt0r1#8<H3E(Z#wmmPaXM2y<?+')
key = 'ok', async_ = False

    @pytest.mark.parametrize("key", ["ok", "wrong"])
    @pytest.mark.parametrize("async_", [True, False])
    async def test_curve_callback(self, certs, key, async_):
        """threaded auth - CURVE with callback authentication"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:301: AttributeError
__________ TestThreadAuthentication.test_curve_callback[False-wrong] ___________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595af50>
certs = (b'XW}C<1i$AlijKJ=d:THs6Cfph:jotkH+%J:pKTd5', b'-ZsJzgE0kJF@E+tvn5W09Ccpm=ELcJdW&*EllTSE', b'v#HW]4oq*@FIxiPG/=9d1*4APW#6KuoM=IE6u!sd', b'>U?rEfZ/X}EqD0q}^?i]lW&Fe.iWWnaf$4a4.$iO')
key = 'wrong', async_ = False

    @pytest.mark.parametrize("key", ["ok", "wrong"])
    @pytest.mark.parametrize("async_", [True, False])
    async def test_curve_callback(self, certs, key, async_):
        """threaded auth - CURVE with callback authentication"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:301: AttributeError
_________________ TestThreadAuthentication.test_curve_user_id __________________

self = <zmq.tests.test_auth.TestThreadAuthentication object at 0x7ffff595a110>
certs = (b'E0YK+GbarS!dpa.*NOLvkgQ<}GZ&@0k7bUU6p-3j', b'ng2g3R2E4XM@<d@VBh[R:Q856NLoy.:*J)96UZbm', b'tPI7iFOrf1&E?pCe1J.#?->54W6.%[aH.w2VVHl?', b'/]Njg3w4&Ooy1>/Kmuqoh!0Da@sC6f<Zp6{/uwrw')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_user_id0/certs/public_keys'

    @skip_pypy
    async def test_curve_user_id(self, certs, public_keys_dir):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:337: AttributeError
_____________________ TestAsyncioAuthentication.test_null ______________________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff595aaa0>

    async def test_null(self):
        """threaded auth - NULL"""
        # A default NULL connection should always succeed, and not
        # go through our authentication infrastructure at all.
>       self.auth.stop()
E       AttributeError: 'NoneType' object has no attribute 'stop'

zmq/tests/test_auth.py:196: AttributeError
_____________________ TestAsyncioAuthentication.test_deny ______________________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff595bb20>

    async def test_deny(self):
        # deny 127.0.0.1, connection should fail
>       self.auth.deny('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'deny'

zmq/tests/test_auth.py:215: AttributeError
_____________________ TestAsyncioAuthentication.test_allow _____________________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff595b160>

    async def test_allow(self):
        # allow 127.0.0.1, connection should pass
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:226: AttributeError
___________ TestAsyncioAuthentication.test_plain[True-correct-True] ____________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff59587f0>
enabled = True, password = 'correct', success = True

    @pytest.mark.parametrize(
        "enabled, password, success",
        [
            (True, "correct", True),
            (False, "correct", False),
            (True, "incorrect", False),
        ],
    )
    async def test_plain(self, enabled, password, success):
        """threaded auth - PLAIN"""

        # Try PLAIN authentication - without configuring server, connection should fail
>       with self.push_pull() as (server, client):

zmq/tests/test_auth.py:247: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/dy3xh053ahkhrp2jamggq8cpsyvp8mg0-python-3.10.7/lib/python3.10/contextlib.py:135: in __enter__
    return next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff59587f0>

    @contextmanager
    def push_pull(self):
>       with self.context.socket(zmq.PUSH) as server, self.context.socket(
            zmq.PULL
        ) as client:
E       AttributeError: 'TestAsyncioAuthentication' object has no attribute 'context'

zmq/tests/test_auth.py:166: AttributeError
__________ TestAsyncioAuthentication.test_plain[False-correct-False] ___________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff5958910>
enabled = False, password = 'correct', success = False

    @pytest.mark.parametrize(
        "enabled, password, success",
        [
            (True, "correct", True),
            (False, "correct", False),
            (True, "incorrect", False),
        ],
    )
    async def test_plain(self, enabled, password, success):
        """threaded auth - PLAIN"""

        # Try PLAIN authentication - without configuring server, connection should fail
>       with self.push_pull() as (server, client):

zmq/tests/test_auth.py:247: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/dy3xh053ahkhrp2jamggq8cpsyvp8mg0-python-3.10.7/lib/python3.10/contextlib.py:135: in __enter__
    return next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff5958910>

    @contextmanager
    def push_pull(self):
>       with self.context.socket(zmq.PUSH) as server, self.context.socket(
            zmq.PULL
        ) as client:
E       AttributeError: 'TestAsyncioAuthentication' object has no attribute 'context'

zmq/tests/test_auth.py:166: AttributeError
__________ TestAsyncioAuthentication.test_plain[True-incorrect-False] __________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff5958940>
enabled = True, password = 'incorrect', success = False

    @pytest.mark.parametrize(
        "enabled, password, success",
        [
            (True, "correct", True),
            (False, "correct", False),
            (True, "incorrect", False),
        ],
    )
    async def test_plain(self, enabled, password, success):
        """threaded auth - PLAIN"""

        # Try PLAIN authentication - without configuring server, connection should fail
>       with self.push_pull() as (server, client):

zmq/tests/test_auth.py:247: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
/gnu/store/dy3xh053ahkhrp2jamggq8cpsyvp8mg0-python-3.10.7/lib/python3.10/contextlib.py:135: in __enter__
    return next(self.gen)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff5958940>

    @contextmanager
    def push_pull(self):
>       with self.context.socket(zmq.PUSH) as server, self.context.socket(
            zmq.PULL
        ) as client:
E       AttributeError: 'TestAsyncioAuthentication' object has no attribute 'context'

zmq/tests/test_auth.py:166: AttributeError
_______________ TestAsyncioAuthentication.test_curve[ok-*-True] ________________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff59590c0>
certs = (b'QrGssGY:&j>8LJDm?G+3nBUXe(99bi[IK$GaiMxG', b'/3[D7DCj8&FBw8<gkEte0dz0pEX*sSKoZLn8NsI(', b'5&s70tV[iBxDAs7fnHJYJ@?^&clIE+s..K$@?hpO', b'PG:.j=cd1m5uDS2nfQHXZ3?&oQ3yz4}psbu8xW<b')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_ok___True_1/certs/public_keys'
client_key = 'ok', location = '*', success = True

    @pytest.mark.parametrize(
        "client_key, location, success",
        [
            ('ok', zmq.auth.CURVE_ALLOW_ANY, True),
            ('ok', "public_keys", True),
            ('bad', "public_keys", False),
            (None, "public_keys", False),
        ],
    )
    async def test_curve(self, certs, public_keys_dir, client_key, location, success):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:276: AttributeError
__________ TestAsyncioAuthentication.test_curve[ok-public_keys-True] ___________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff5959150>
certs = (b'=ww(yo-.=BhZ-E[cbigcwmr1x@4*d^t+{L#:sE/!', b'z#rlj!X275(S*K7)WB2]4v*u+o[:iB)[RV5L5f*C', b'g{Ni.@G0Hh57BD%IKX}*1CsSpfNxf!)zz@a^^@-1', b'E/epcK:3s1EciU^N1E$NHJGrI.i@#/h2U0nHAeN$')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_ok_public_keys_True1/certs/public_keys'
client_key = 'ok', location = 'public_keys', success = True

    @pytest.mark.parametrize(
        "client_key, location, success",
        [
            ('ok', zmq.auth.CURVE_ALLOW_ANY, True),
            ('ok', "public_keys", True),
            ('bad', "public_keys", False),
            (None, "public_keys", False),
        ],
    )
    async def test_curve(self, certs, public_keys_dir, client_key, location, success):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:276: AttributeError
_________ TestAsyncioAuthentication.test_curve[bad-public_keys-False] __________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff5959180>
certs = (b'ZD*4pBdna<zC8-Y}O-l85wjZTIi$En)?R#B!DfzD', b'eqb>(1nhmXK?i6(2CBBq8^uTuW8=n]q!#Qs<(hmO', b'w+bR@1R:G5EJ.6[H+[(4}@x4+Kvr!cgwMc&rIg:-', b'>DC2zXr9.D@TX:v?0t{)t&7uT9!j@/=Dv%XMXUOy')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_bad_public_keys_Fal1/certs/public_keys'
client_key = 'bad', location = 'public_keys', success = False

    @pytest.mark.parametrize(
        "client_key, location, success",
        [
            ('ok', zmq.auth.CURVE_ALLOW_ANY, True),
            ('ok', "public_keys", True),
            ('bad', "public_keys", False),
            (None, "public_keys", False),
        ],
    )
    async def test_curve(self, certs, public_keys_dir, client_key, location, success):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:276: AttributeError
_________ TestAsyncioAuthentication.test_curve[None-public_keys-False] _________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff59591e0>
certs = (b'(#}tPsrSZ0..(WYa[@wq=KW2F@uvvXZNC&-tOb8b', b'[Kv:Vi2Fx+Kz&/#6?7r$D%&Fg*Gf76qA:y/-A^9P', b'?n@LSL^bOfnWV3o<S6FfW-:c#Vw>G#{h5XZ9g?MV', b'wl@AWg02pcCKd}{&I90z%d/n5&0Wph:7FZJ):0Ch')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_None_public_keys_Fa1/certs/public_keys'
client_key = None, location = 'public_keys', success = False

    @pytest.mark.parametrize(
        "client_key, location, success",
        [
            ('ok', zmq.auth.CURVE_ALLOW_ANY, True),
            ('ok', "public_keys", True),
            ('bad', "public_keys", False),
            (None, "public_keys", False),
        ],
    )
    async def test_curve(self, certs, public_keys_dir, client_key, location, success):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:276: AttributeError
____________ TestAsyncioAuthentication.test_curve_callback[True-ok] ____________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff59595a0>
certs = (b'ga@&pORZSM4I!a6+VBr>]1i=:/3E9MQxiW1&5:KH', b'*tN.3tyl?9ymt)6YOpA?-Uy-YjY#2p.n7z/+j(*1', b'haJ3C3:QD&Fq0eV*=oyz6T*WcNmO)u*C9StoAbqx', b'7z!?UW^ybegJ0FDAAfcXaI1:*QM:&VE&c8y<5Y!H')
key = 'ok', async_ = True

    @pytest.mark.parametrize("key", ["ok", "wrong"])
    @pytest.mark.parametrize("async_", [True, False])
    async def test_curve_callback(self, certs, key, async_):
        """threaded auth - CURVE with callback authentication"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:301: AttributeError
__________ TestAsyncioAuthentication.test_curve_callback[True-wrong] ___________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff59595d0>
certs = (b'+]odg17pW(J]JMyiYu^bo[={0Rf%ch4Ij36+fu}l', b'Xp&EZS7-]QzK5C4(eztxL9rQ$v.^SCo7m%/IjUBo', b'@ssxS%8gR}0T.@s&d&OGV!gPaD25E#yvQ3dc2cU3', b'l)@[dd{xJ^@[hYw?=!p{lI$afl%ga1k=<3$9(@<.')
key = 'wrong', async_ = True

    @pytest.mark.parametrize("key", ["ok", "wrong"])
    @pytest.mark.parametrize("async_", [True, False])
    async def test_curve_callback(self, certs, key, async_):
        """threaded auth - CURVE with callback authentication"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:301: AttributeError
___________ TestAsyncioAuthentication.test_curve_callback[False-ok] ____________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff5959630>
certs = (b'le@qHJ:DXzV=^FKv1z&1(:ig@<cvio[Ac)1]VK0(', b'c43g{kpr7s3L/2edP=o$RKHPOID&U/+?-0rdXT!{', b'LZE7IOZ{d:qP@0ZkS]qpcC0r.Qk2Aq])ya(tPr9H', b'9WAzvwE{Mi(QgCk*^PUk72IJuhtXX0aKV2mQGkTG')
key = 'ok', async_ = False

    @pytest.mark.parametrize("key", ["ok", "wrong"])
    @pytest.mark.parametrize("async_", [True, False])
    async def test_curve_callback(self, certs, key, async_):
        """threaded auth - CURVE with callback authentication"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:301: AttributeError
__________ TestAsyncioAuthentication.test_curve_callback[False-wrong] __________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff5959990>
certs = (b'wBoCteEfF*>k9?s:sx3yt(uactwX6reMv@N.tb]$', b'Fe$)65UCjA)xI57.97k@axU8RfE>b$Taxa26(5eY', b'*4&dq9lDfQF*vx4p0]X(L]O+8G0d3?bhz*4{oRKU', b')JB+s]nL$V]LG>s-zYz%S:kdN)zpJ^*8Cq!DfaYN')
key = 'wrong', async_ = False

    @pytest.mark.parametrize("key", ["ok", "wrong"])
    @pytest.mark.parametrize("async_", [True, False])
    async def test_curve_callback(self, certs, key, async_):
        """threaded auth - CURVE with callback authentication"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:301: AttributeError
_________________ TestAsyncioAuthentication.test_curve_user_id _________________

self = <zmq.tests.test_auth.TestAsyncioAuthentication object at 0x7ffff5959a80>
certs = (b'nH7}!PGvuM0jQT=ppw@rJ&xZUe(JDv<!Q(8mt>sQ', b'Vo3g!muJwdXk>(3eXpS.!nABk)-eE8:Ekp5^Q(ZJ', b'(z6S#EU4+2Q3(4Kzd<k}Bco!B5Zb(?}tv:[E{X{6', b'6V9M>W&?BDChJ5gHWH>Uw+fs0<UN+1MLugv=60bb')
public_keys_dir = '/tmp/guix-build-python-pyzmq-25.0.2.drv-0/pytest-of-nixbld/pytest-0/test_curve_user_id1/certs/public_keys'

    @skip_pypy
    async def test_curve_user_id(self, certs, public_keys_dir):
        """threaded auth - CURVE"""
>       self.auth.allow('127.0.0.1')
E       AttributeError: 'NoneType' object has no attribute 'allow'

zmq/tests/test_auth.py:337: AttributeError
=============================== warnings summary ===============================
zmq/tests/test_poll.py:159
  /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/zmq/tests/test_poll.py:159: PytestUnknownMarkWarning: Unknown pytest.mark.flaky - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @mark.flaky(reruns=3)

zmq/tests/test_poll.py:194
  /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/zmq/tests/test_poll.py:194: PytestUnknownMarkWarning: Unknown pytest.mark.flaky - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @mark.flaky(reruns=3)

zmq/tests/test_retry_eintr.py:60
  /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/zmq/tests/test_retry_eintr.py:60: PytestUnknownMarkWarning: Unknown pytest.mark.flaky - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @mark.flaky(reruns=3)

zmq/tests/test_socket.py:589
  /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/zmq/tests/test_socket.py:589: PytestUnknownMarkWarning: Unknown pytest.mark.large - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @mark.large

zmq/tests/test_win32_shim.py:23
  /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/zmq/tests/test_win32_shim.py:23: PytestUnknownMarkWarning: Unknown pytest.mark.new_console - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @mark.new_console

zmq/tests/test_win32_shim.py:25
  /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/zmq/tests/test_win32_shim.py:25: PytestUnknownMarkWarning: Unknown pytest.mark.new_console - is this a typo?  You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html
    @mark.new_console

zmq/tests/test_auth.py::test_ioloop_authenticator
  /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/zmq/tests/test_auth.py:409: DeprecationWarning: zmq.auth.ioloop.IOLoopAuthenticator is deprecated. Use zmq.auth.asyncio.AsyncioAuthenticator
    from zmq.auth.ioloop import IOLoopAuthenticator

zmq/tests/test_auth.py::test_ioloop_authenticator
zmq/tests/test_zmqstream.py::test_callable_check
zmq/tests/test_zmqstream.py::test_on_recv_basic
zmq/tests/test_zmqstream.py::test_on_recv_wake
zmq/tests/test_zmqstream.py::test_on_recv_async
zmq/tests/test_zmqstream.py::test_on_recv_async_error
zmq/tests/test_zmqstream.py::test_shadow_socket
zmq/tests/test_zmqstream.py::test_shadow_socket_close
  /gnu/store/9kmpn99l328qx5q5gyn6hs9dk5hm3mmg-python-pytest-7.1.3/lib/python3.10/site-packages/_pytest/runner.py:136: RuntimeWarning: coroutine 'io_loop' was never awaited
    item.funcargs = None  # type: ignore[attr-defined]
  Enable tracemalloc to get traceback where the object was allocated.
  See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.

zmq/tests/test_cython.py::test_cython[3]
  /gnu/store/wxd86lkvbcnzcb5libq3l7ppp73mb4h0-python-cython-0.29.32/lib/python3.10/site-packages/pyximport/pyximport.py:51: DeprecationWarning: the imp module is deprecated in favour of importlib and slated for removal in Python 3.12; see the module's documentation for alternative uses
    import imp

zmq/tests/test_future.py: 17 warnings
  /gnu/store/admrhn4m8ygm4xrna08kd27y72j62zji-python-tornado-5.1.1/lib/python3.10/site-packages/tornado/platform/asyncio.py:126: DeprecationWarning: There is no current event loop
    old_loop = asyncio.get_event_loop()

zmq/tests/test_imports.py::test_eventloop
  /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/zmq/tests/test_imports.py:51: DeprecationWarning: zmq.eventloop.ioloop is deprecated in pyzmq 17. pyzmq now works with default tornado and asyncio eventloops.
    from zmq.eventloop import ioloop, zmqstream

zmq/tests/test_socket.py::TestSocket::test_int_sockopts
zmq/tests/test_socket.py::TestSocket::test_int_sockopts
zmq/tests/test_socket.py::TestSocket::test_mockable
  /tmp/guix-build-python-pyzmq-25.0.2.drv-0/pyzmq-25.0.2/zmq/sugar/socket.py:332: DeprecationWarning: Socket.socket_type is deprecated, use Socket.type
    warn("Socket.socket_type is deprecated, use Socket.type", DeprecationWarning)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_null - Attribut...
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_deny - Attribut...
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_allow - Attribu...
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_plain[True-correct-True]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_plain[False-correct-False]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_plain[True-incorrect-False]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[ok-*-True]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[ok-public_keys-True]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[bad-public_keys-False]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve[None-public_keys-False]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[True-ok]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[True-wrong]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[False-ok]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_callback[False-wrong]
FAILED zmq/tests/test_auth.py::TestThreadAuthentication::test_curve_user_id
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_null - Attribu...
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_deny - Attribu...
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_allow - Attrib...
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_plain[True-correct-True]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_plain[False-correct-False]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_plain[True-incorrect-False]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[ok-*-True]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[ok-public_keys-True]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[bad-public_keys-False]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve[None-public_keys-False]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[True-ok]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[True-wrong]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[False-ok]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_callback[False-wrong]
FAILED zmq/tests/test_auth.py::TestAsyncioAuthentication::test_curve_user_id
ERROR zmq/tests/test_zmqstream.py::test_callable_check - TypeError: cannot un...
ERROR zmq/tests/test_zmqstream.py::test_on_recv_basic - TypeError: cannot unp...
ERROR zmq/tests/test_zmqstream.py::test_on_recv_wake - TypeError: cannot unpa...
ERROR zmq/tests/test_zmqstream.py::test_on_recv_async - TypeError: cannot unp...
ERROR zmq/tests/test_zmqstream.py::test_on_recv_async_error - TypeError: cann...
====== 30 failed, 298 passed, 31 skipped, 37 warnings, 5 errors in 44.37s ======

Perhaps the tests expect a working resolver (getaddrinfo) ? This doesn't work in the Guix minimal build container.

minrk commented 1 year ago

This looks like pytest isn't set up properly. Can you test with pyzmq 25.1? I think some configuration files were missing from the sdist in 25.0.2.

minrk commented 1 year ago

You might also try with pytest --asyncio-mode auto

Apteryks commented 1 year ago

Thank you, these two tests indeed now pass with 25.1. There's also zmq/tests/draft.py that is removed in the Guix package, because they fail like:

=================================== FAILURES ===================================
_____________________ TestDraftSockets.test_client_server ______________________

self = <zmq.tests.test_draft.TestDraftSockets testMethod=test_client_server>

    def test_client_server(self):
        client, server = self.create_bound_pair(zmq.CLIENT, zmq.SERVER)
        client.send(b'request')
        msg = self.recv(server, copy=False)
>       assert msg.routing_id is not None

zmq/tests/test_draft.py:22: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zmq/sugar/frame.py:96: in routing_id
    return self.get('routing_id')
zmq/backend/cython/message.pyx:399: in zmq.backend.cython.message.Frame.get
    _check_rc(-1)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   raise Again(errno)
E   zmq.error.Again: Resource temporarily unavailable

zmq/backend/cython/checkrc.pxd:22: Again
_______________________ TestDraftSockets.test_radio_dish _______________________

self = <zmq.tests.test_draft.TestDraftSockets testMethod=test_radio_dish>

    def test_radio_dish(self):
        dish, radio = self.create_bound_pair(zmq.DISH, zmq.RADIO)
        dish.rcvtimeo = 250
        group = 'mygroup'
>       dish.join(group)

zmq/tests/test_draft.py:31: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
zmq/backend/cython/socket.pyx:718: in zmq.backend.cython.socket.Socket.join
    _check_rc(rc)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   raise ZMQError(errno)
E   zmq.error.ZMQError: Invalid argument

zmq/backend/cython/checkrc.pxd:28: ZMQError

Would you have an idea for these as well?

Thank you!

minrk commented 1 year ago

If you haven't built with drafts, those tests should be skipped if pyzmq is not built with the draft API, which is the default.

Apteryks commented 1 year ago

OK; weird, I'll have to investigate. The build should be pretty vanilla, with the default options chosen by python setup.py build and python setup.py install; see: https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/python-xyz.scm#n11846

Apteryks commented 1 year ago

Ah, the --enable-drafts is a zeromq build option, which is enabled in Guix: https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/networking.scm#n1350.

Perhaps the draft tests should also be skipped when there is no networking such as in this minimal, isolated build container?

minrk commented 1 year ago

Strange. I guess it might be a problem to build against draft-enabled libzmq and then build pyzmq without the draft symbols defined (that doesn't quite make sense to me, but it's possible). If so, you should probably make the two match in the guix packaging by setting the environment variable ZMQ_DRAFT_API=1 when building pyzmq.

I don't think the no networking case quite makes sense, since this is a networking library. All the other tests use the network (only localhost), just like these. I don't think that's related to the failures.

Apteryks commented 1 year ago

Hi! I confirm that setting ZMQ_DRAFT_API to 1 before the build makes the test_draft.py test pass. Perhaps pyzmq should autodetect whether zeromq is built with such support and match it automatically?

Thanks!

minrk commented 1 year ago

Perhaps pyzmq should autodetect whether zeromq is built with such support and match it automatically?

That would be reasonable. It would require build-time execution, which isn't available when e.g. cross-compiling, but we can do this for a default when available.