From a42d1dcf7b3cc6cb05eb4fb327d324dbb2dca86c Mon Sep 17 00:00:00 2001 From: sfaiss <44982288+sfaiss@users.noreply.github.com> Date: Sun, 27 Aug 2023 22:07:21 +0200 Subject: [PATCH] Fix for #36: default SSL context instead of preconfigured SSL context is used (#38) Fixed typing error on SSLContext isinstance --- doipclient/client.py | 2 +- tests/test_client.py | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/doipclient/client.py b/doipclient/client.py index 414b945..d38b73b 100644 --- a/doipclient/client.py +++ b/doipclient/client.py @@ -774,7 +774,7 @@ def _connect(self): self._udp_sock.bind((self._client_ip_address, 0)) if self._use_secure: - if isinstance(self._use_secure, type(ssl.SSLContext)): + if isinstance(self._use_secure, ssl.SSLContext): ssl_context = self._use_secure else: ssl_context = ssl.create_default_context() diff --git a/tests/test_client.py b/tests/test_client.py index f9676c8..1a2158b 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -695,18 +695,29 @@ def test_exception_from_blocking_ssl_socket(mock_socket, mocker): def test_use_secure_uses_default_ssl_context(mock_socket, mocker): """Wrap socket with default SSL-context when use_secure=True""" - mocked_context = mocker.patch.object(ssl, "SSLContext", autospec=True) + mocked_default_context = mocker.patch.object(ssl, "create_default_context", autospec=True) sut = DoIPClient( test_ip, test_logical_address, use_secure=True, activation_type=None ) - mocked_wrap_socket = mocked_context.return_value.wrap_socket - mocked_wrap_socket.assert_called_once_with(mock_socket) + mocked_default_wrap_socket = mocked_default_context.return_value.wrap_socket + mocked_default_wrap_socket.assert_called_once_with(mock_socket) def test_use_secure_with_external_ssl_context(mock_socket, mocker): """Wrap socket with user provided SSL-context when use_secure=ssl_context""" - mocked_context = mocker.patch.object(ssl, "SSLContext", autospec=True) + original_context = ssl.SSLContext + mocked_external_context = mocker.patch.object(ssl, "SSLContext", autospec=True) + mocked_default_context = mocker.patch.object(ssl, "create_default_context", autospec=True) + + # Unmock the SSLContext + ssl.SSLContext = original_context + sut = DoIPClient( - test_ip, test_logical_address, use_secure=mocked_context, activation_type=None + test_ip, test_logical_address, use_secure=mocked_external_context, activation_type=None ) - mocked_context.wrap_socket.assert_called_once_with(mock_socket) + + mocked_default_wrap_socket = mocked_default_context.return_value.wrap_socket + assert not mocked_default_wrap_socket.called, "Socket should *not* get wrapped using default context." + + mocked_external_wrap_socket = mocked_external_context.wrap_socket + mocked_external_wrap_socket.assert_called_once_with(mock_socket)