From d83096135c42657a3c9a0a04b939023bcecc403a Mon Sep 17 00:00:00 2001 From: Michael Grosse Huelsewiesche Date: Fri, 21 Feb 2025 18:05:10 -0500 Subject: [PATCH] Fix proxy tests for real this time, and actually test the proxy values make it to post --- segment/analytics/request.py | 6 +++--- segment/analytics/test/test_client.py | 19 +++++++++++++++--- segment/analytics/test/test_consumer.py | 17 ++++++++++++++-- segment/analytics/test/test_request.py | 26 ++++++++++++++++++------- 4 files changed, 53 insertions(+), 15 deletions(-) diff --git a/segment/analytics/request.py b/segment/analytics/request.py index 1f5a56e..4118e2c 100644 --- a/segment/analytics/request.py +++ b/segment/analytics/request.py @@ -45,14 +45,14 @@ def post(write_key, host=None, gzip=False, timeout=15, proxies=None, oauth_manag kwargs = { "data": data, "headers": headers, - "timeout": 15, + "timeout": timeout, } if proxies: kwargs['proxies'] = proxies - res = None + try: - res = _session.post(url, data=data, headers=headers, timeout=timeout) + res = _session.post(url, **kwargs) except Exception as e: log.error(e) raise e diff --git a/segment/analytics/test/test_client.py b/segment/analytics/test/test_client.py index 87dc63a..eb68400 100644 --- a/segment/analytics/test/test_client.py +++ b/segment/analytics/test/test_client.py @@ -344,6 +344,19 @@ def test_default_timeout_15(self): self.assertEqual(consumer.timeout, 15) def test_proxies(self): - client = Client('testsecret', proxies={'http':'203.243.63.16:80','https':'203.243.63.16:80'}) - success, msg = client.identify('userId', {'trait': 'value'}) - self.assertTrue(success) + proxies={'http':'203.243.63.16:80','https':'203.243.63.16:80'} + client = Client('testsecret', proxies=proxies) + def mock_post_fn(*args, **kwargs): + res = mock.Mock() + res.status_code = 200 + res.json.return_value = {'code': 'success', 'message': 'success'} + return res + + with mock.patch('segment.analytics.request._session.post', side_effect=mock_post_fn) as mock_post: + success, msg = client.identify('userId', {'trait': 'value'}) + client.flush() + self.assertTrue(success) + mock_post.assert_called_once() + args, kwargs = mock_post.call_args + self.assertIn('proxies', kwargs) + self.assertEqual(kwargs['proxies'], proxies) \ No newline at end of file diff --git a/segment/analytics/test/test_consumer.py b/segment/analytics/test/test_consumer.py index f60f20e..8371726 100644 --- a/segment/analytics/test/test_consumer.py +++ b/segment/analytics/test/test_consumer.py @@ -200,10 +200,23 @@ def mock_post_fn(_, data, **kwargs): @classmethod def test_proxies(cls): - consumer = Consumer(None, 'testsecret', proxies={'http':'203.243.63.16:80','https':'203.243.63.16:80'}) + proxies = {'http': '203.243.63.16:80', 'https': '203.243.63.16:80'} + consumer = Consumer(None, 'testsecret', proxies=proxies) track = { 'type': 'track', 'event': 'python event', 'userId': 'userId' } - consumer.request([track]) + + def mock_post_fn(*args, **kwargs): + res = mock.Mock() + res.status_code = 200 + res.json.return_value = {'code': 'success', 'message': 'success'} + return res + + with mock.patch('segment.analytics.request._session.post', side_effect=mock_post_fn) as mock_post: + consumer.request([track]) + mock_post.assert_called_once() + args, kwargs = mock_post.call_args + cls().assertIn('proxies', kwargs) + cls().assertEqual(kwargs['proxies'], proxies) diff --git a/segment/analytics/test/test_request.py b/segment/analytics/test/test_request.py index 9a49666..5ffca00 100644 --- a/segment/analytics/test/test_request.py +++ b/segment/analytics/test/test_request.py @@ -2,6 +2,7 @@ import unittest import json import requests +from unittest import mock from segment.analytics.request import post, DatetimeSerializer @@ -53,10 +54,21 @@ def test_should_timeout(self): }], timeout=0.0001) def test_proxies(self): - res = post('testsecret', batch=[{ - 'userId': 'userId', - 'event': 'python event', - 'type': 'track', - 'proxies': {'http':'203.243.63.16:80','https':'203.243.63.16:80'} - }]) - self.assertEqual(res.status_code, 200) + proxies = {'http': '203.243.63.16:80', 'https': '203.243.63.16:80'} + def mock_post_fn(*args, **kwargs): + res = mock.Mock() + res.status_code = 200 + res.json.return_value = {'code': 'success', 'message': 'success'} + return res + + with mock.patch('segment.analytics.request._session.post', side_effect=mock_post_fn) as mock_post: + res = post('testsecret', proxies= proxies, batch=[{ + 'userId': 'userId', + 'event': 'python event', + 'type': 'track' + }]) + self.assertEqual(res.status_code, 200) + mock_post.assert_called_once() + args, kwargs = mock_post.call_args + self.assertIn('proxies', kwargs) + self.assertEqual(kwargs['proxies'], proxies)