Skip to content

Commit 515ea42

Browse files
committed
chore: pytestify ssl_config
1 parent e648cd4 commit 515ea42

File tree

1 file changed

+65
-74
lines changed

1 file changed

+65
-74
lines changed

test/test_ssl_config.py

Lines changed: 65 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,68 @@
1-
import unittest
2-
import ssl
3-
from unittest.mock import patch, MagicMock
4-
from tableauserverclient import Server
5-
from tableauserverclient.server.endpoint import Endpoint
61
import logging
2+
from unittest.mock import MagicMock
73

4+
import pytest
85

9-
class TestSSLConfig(unittest.TestCase):
10-
@patch("requests.session")
11-
@patch("tableauserverclient.server.endpoint.Endpoint.set_parameters")
12-
def setUp(self, mock_set_parameters, mock_session):
13-
"""Set up test fixtures with mocked session and request validation"""
14-
# Mock the session
15-
self.mock_session = MagicMock()
16-
mock_session.return_value = self.mock_session
17-
18-
# Mock request preparation
19-
self.mock_request = MagicMock()
20-
self.mock_session.prepare_request.return_value = self.mock_request
21-
22-
# Create server instance with mocked components
23-
self.server = Server("http://test")
24-
25-
def test_default_ssl_config(self):
26-
"""Test that by default, no custom SSL context is used"""
27-
self.assertIsNone(self.server._ssl_context)
28-
self.assertNotIn("verify", self.server.http_options)
29-
30-
@patch("ssl.create_default_context")
31-
def test_weak_dh_config(self, mock_create_context):
32-
"""Test that weak DH keys can be allowed when configured"""
33-
# Setup mock SSL context
34-
mock_context = MagicMock()
35-
mock_create_context.return_value = mock_context
36-
37-
# Configure SSL with weak DH
38-
self.server.configure_ssl(allow_weak_dh=True)
39-
40-
# Verify SSL context was created and configured correctly
41-
mock_create_context.assert_called_once()
42-
mock_context.set_dh_parameters.assert_called_once_with(min_key_bits=512)
43-
44-
# Verify context was added to http options
45-
self.assertEqual(self.server.http_options["verify"], mock_context)
46-
47-
@patch("ssl.create_default_context")
48-
def test_disable_weak_dh_config(self, mock_create_context):
49-
"""Test that SSL config can be reset to defaults"""
50-
# Setup mock SSL context
51-
mock_context = MagicMock()
52-
mock_create_context.return_value = mock_context
53-
54-
# First enable weak DH
55-
self.server.configure_ssl(allow_weak_dh=True)
56-
self.assertIsNotNone(self.server._ssl_context)
57-
self.assertIn("verify", self.server.http_options)
58-
59-
# Then disable it
60-
self.server.configure_ssl(allow_weak_dh=False)
61-
self.assertIsNone(self.server._ssl_context)
62-
self.assertNotIn("verify", self.server.http_options)
63-
64-
@patch("ssl.create_default_context")
65-
def test_warning_on_weak_dh(self, mock_create_context):
66-
"""Test that a warning is logged when enabling weak DH keys"""
67-
logging.getLogger().setLevel(logging.WARNING)
68-
with self.assertLogs(level="WARNING") as log:
69-
self.server.configure_ssl(allow_weak_dh=True)
70-
self.assertTrue(
71-
any("WARNING: Allowing weak Diffie-Hellman keys" in record for record in log.output),
72-
"Expected warning about weak DH keys was not logged",
73-
)
74-
75-
76-
if __name__ == "__main__":
77-
unittest.main()
6+
import tableauserverclient as TSC
7+
8+
9+
@pytest.fixture(scope="function")
10+
def server():
11+
"""Fixture to create a TSC.Server instance for testing."""
12+
server = TSC.Server("http://test", False)
13+
14+
# Fake signin
15+
server._site_id = "dad65087-b08b-4603-af4e-2887b8aafc67"
16+
server._auth_token = "j80k54ll2lfMZ0tv97mlPvvSCRyD0DOM"
17+
18+
return server
19+
20+
21+
def test_default_ssl_config(server):
22+
"""Test that by default, no custom SSL context is used"""
23+
assert server._ssl_context is None
24+
assert "verify" not in server.http_options
25+
26+
27+
def test_weak_dh_config(server, monkeypatch):
28+
"""Test that weak DH keys can be allowed when configured"""
29+
mock_context = MagicMock()
30+
mock_create_context = MagicMock(return_value=mock_context)
31+
monkeypatch.setattr("ssl.create_default_context", mock_create_context)
32+
33+
server.configure_ssl(allow_weak_dh=True)
34+
35+
mock_create_context.assert_called_once()
36+
mock_context.set_dh_parameters.assert_called_once_with(min_key_bits=512)
37+
assert server.http_options["verify"] == mock_context
38+
39+
40+
def test_disable_weak_dh_config(server, monkeypatch):
41+
"""Test that SSL config can be reset to defaults"""
42+
mock_context = MagicMock()
43+
mock_create_context = MagicMock(return_value=mock_context)
44+
monkeypatch.setattr("ssl.create_default_context", mock_create_context)
45+
46+
# First enable weak DH
47+
server.configure_ssl(allow_weak_dh=True)
48+
assert server._ssl_context is not None
49+
assert "verify" in server.http_options
50+
51+
# Then disable it
52+
server.configure_ssl(allow_weak_dh=False)
53+
assert server._ssl_context is None
54+
assert "verify" not in server.http_options
55+
56+
57+
def test_warning_on_weak_dh(server, monkeypatch, caplog):
58+
"""Test that a warning is logged when enabling weak DH keys"""
59+
mock_context = MagicMock()
60+
mock_create_context = MagicMock(return_value=mock_context)
61+
monkeypatch.setattr("ssl.create_default_context", mock_create_context)
62+
63+
with caplog.at_level(logging.WARNING):
64+
server.configure_ssl(allow_weak_dh=True)
65+
66+
assert any(
67+
"Allowing weak Diffie-Hellman keys" in record.getMessage() for record in caplog.records
68+
), "Expected warning about weak DH keys was not logged"

0 commit comments

Comments
 (0)