Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests failed on macos #552

Open
natsukium opened this issue May 11, 2023 · 0 comments
Open

tests failed on macos #552

natsukium opened this issue May 11, 2023 · 0 comments
Labels
bug Something isn't working

Comments

@natsukium
Copy link

Hi, thank you for developing websockify and novnc.
It is very useful.

I now run the unit tests on macos but got the following error.

error log
============================= test session starts ==============================
platform darwin -- Python 3.10.10, pytest-7.2.0, pluggy-1.0.0
rootdir: /private/tmp/nix-build-python3.10-websockify-0.11.0.drv-0/source
collected 64 items                                                             

tests/test_auth_plugins.py ....                                          [  6%]
tests/test_token_plugins.py .............                                [ 26%]
tests/test_websocket.py .................                                [ 53%]
tests/test_websocketproxy.py .....                                       [ 60%]
tests/test_websocketserver.py .....                                      [ 68%]
tests/test_websockifyserver.py ................F...                      [100%]

=================================== FAILURES ===================================
__________ WebSockifyServerTestCase.test_socket_set_keepalive_options __________

self = <test_websockifyserver.WebSockifyServerTestCase testMethod=test_socket_set_keepalive_options>

    def test_socket_set_keepalive_options(self):
        keepcnt = 12
        keepidle = 34
        keepintvl = 56
    
        server = self._get_server(daemon=False, ssl_only=0, idle_timeout=1)
>       sock = server.socket('localhost',
                             tcp_keepcnt=keepcnt,
                             tcp_keepidle=keepidle,
                             tcp_keepintvl=keepintvl)

tests/test_websockifyserver.py:375: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

host = 'localhost', port = None, connect = False, prefer_ipv6 = False
unix_socket = None, use_ssl = False, tcp_keepalive = True, tcp_keepcnt = 12
tcp_keepidle = 34, tcp_keepintvl = 56

    @staticmethod
    def socket(host, port=None, connect=False, prefer_ipv6=False,
               unix_socket=None, use_ssl=False, tcp_keepalive=True,
               tcp_keepcnt=None, tcp_keepidle=None, tcp_keepintvl=None):
        """ Resolve a host (and optional port) to an IPv4 or IPv6
        address. Create a socket. Bind to it if listen is set,
        otherwise connect to it. Return the socket.
        """
        flags = 0
        if host == '':
            host = None
        if connect and not (port or unix_socket):
            raise Exception("Connect mode requires a port")
        if use_ssl and not ssl:
            raise Exception("SSL socket requested but Python SSL module not loaded.");
        if not connect and use_ssl:
            raise Exception("SSL only supported in connect mode (for now)")
        if not connect:
            flags = flags | socket.AI_PASSIVE
    
        if not unix_socket:
            addrs = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM,
                    socket.IPPROTO_TCP, flags)
            if not addrs:
                raise Exception("Could not resolve host '%s'" % host)
            addrs.sort(key=lambda x: x[0])
            if prefer_ipv6:
                addrs.reverse()
            sock = socket.socket(addrs[0][0], addrs[0][1])
    
            if  tcp_keepalive:
                sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
                if tcp_keepcnt:
                    sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPCNT,
                                    tcp_keepcnt)
                if tcp_keepidle:
>                   sock.setsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE,
                                    tcp_keepidle)
E                   AttributeError: module 'socket' has no attribute 'TCP_KEEPIDLE'. Did you mean: 'TCP_KEEPALIVE'?

websockify/websockifyserver.py:458: AttributeError
=============================== warnings summary ===============================
websockify/token_plugins.py:39
  /private/tmp/nix-build-python3.10-websockify-0.11.0.drv-0/source/websockify/token_plugins.py:39: DeprecationWarning: invalid escape sequence '\s'
    tok, target = re.split(':\s', line)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_websockifyserver.py::WebSockifyServerTestCase::test_socket_set_keepalive_options - AttributeError: module 'socket' has no attribute 'TCP_KEEPIDLE'. Did you me...
=================== 1 failed, 63 passed, 1 warning in 2.24s ====================

socket.TCP_KEEPIDLE is not defined on macos, and I suppose it would be better to use socket.TCP_KEEPALIVE on Python 3.10 and above on macos. (https://docs.python.org/3/library/socket.html#constants)
For Python 3.9 and below, it would be better to check the attribute and skip the test, like TCP_KEEPCNT.

I know little about sockets, so that I may be wrong, but I'd be happy to check.

@CendioOssman CendioOssman added the bug Something isn't working label May 11, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants