From a2d5994a55f4055def6ed0a9b0d3af2c9ca4a6d4 Mon Sep 17 00:00:00 2001 From: Yang An Date: Tue, 5 May 2026 13:23:28 +1000 Subject: [PATCH] Make raw request header test Accept-Encoding resilient --- .../azure/cli/core/tests/test_util.py | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_util.py b/src/azure-cli-core/azure/cli/core/tests/test_util.py index 37c5e21c91f..ae329ed65b7 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_util.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_util.py @@ -23,6 +23,20 @@ class TestUtils(unittest.TestCase): + def _assert_headers(self, request_headers, expected_headers): + actual_headers = dict(request_headers) + + encodings = { + encoding.strip().lower() + for encoding in actual_headers.get('Accept-Encoding', '').split(',') + if encoding.strip() + } + self.assertIn('gzip', encodings) + self.assertIn('deflate', encodings) + + actual_headers.pop('Accept-Encoding', None) + self.assertDictEqual(actual_headers, expected_headers) + def test_load_json_from_file(self): _, pathname = tempfile.mkstemp() @@ -257,7 +271,6 @@ def test_send_raw_requests(self, send_mock, get_raw_token_mock): expected_header = { 'User-Agent': get_az_rest_user_agent(), - 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', @@ -282,7 +295,7 @@ def test_send_raw_requests(self, send_mock, get_raw_token_mock): self.assertEqual(request.url, 'https://myaccount.blob.core.windows.net/mycontainer/myblob?timeout=30&sv=2019-02-02&srt=s&ss=bf') self.assertEqual(request.body, '{"b1": "v1"}') # Verify no Authorization header - self.assertDictEqual(dict(request.headers), expected_header) + self._assert_headers(request.headers, expected_header) self.assertEqual(send_mock.call_args[1]["verify"], not should_disable_connection_verify()) # Test Authorization header is skipped @@ -291,7 +304,7 @@ def test_send_raw_requests(self, send_mock, get_raw_token_mock): get_raw_token_mock.assert_not_called() request = send_mock.call_args[0][1] - self.assertDictEqual(dict(request.headers), expected_header) + self._assert_headers(request.headers, expected_header) # Test Authorization header is already provided send_raw_request(cli_ctx, 'GET', full_arm_rest_url, @@ -300,7 +313,7 @@ def test_send_raw_requests(self, send_mock, get_raw_token_mock): get_raw_token_mock.assert_not_called() request = send_mock.call_args[0][1] - self.assertDictEqual(dict(request.headers), {**expected_header, 'Authorization': 'Basic ABCDE'}) + self._assert_headers(request.headers, {**expected_header, 'Authorization': 'Basic ABCDE'}) # Test Authorization header is auto appended send_raw_request(cli_ctx, 'GET', full_arm_rest_url, @@ -309,7 +322,7 @@ def test_send_raw_requests(self, send_mock, get_raw_token_mock): get_raw_token_mock.assert_called_with(mock.ANY, test_arm_active_directory_resource_id, subscription=subscription_id) request = send_mock.call_args[0][1] - self.assertDictEqual(dict(request.headers), expected_header_with_auth) + self._assert_headers(request.headers, expected_header_with_auth) # Test ARM Subscriptions - List # https://learn.microsoft.com/en-us/rest/api/resources/subscriptions/list @@ -320,7 +333,7 @@ def test_send_raw_requests(self, send_mock, get_raw_token_mock): get_raw_token_mock.assert_called_with(mock.ANY, test_arm_active_directory_resource_id) request = send_mock.call_args[0][1] self.assertEqual(request.url, test_arm_endpoint.rstrip('/') + '/subscriptions?api-version=2020-01-01') - self.assertDictEqual(dict(request.headers), expected_header_with_auth) + self._assert_headers(request.headers, expected_header_with_auth) # Test ARM Tenants - List # https://learn.microsoft.com/en-us/rest/api/resources/tenants/list @@ -331,7 +344,7 @@ def test_send_raw_requests(self, send_mock, get_raw_token_mock): get_raw_token_mock.assert_called_with(mock.ANY, test_arm_active_directory_resource_id) request = send_mock.call_args[0][1] self.assertEqual(request.url, test_arm_endpoint.rstrip('/') + '/tenants?api-version=2020-01-01') - self.assertDictEqual(dict(request.headers), expected_header_with_auth) + self._assert_headers(request.headers, expected_header_with_auth) # Test ARM resource ID # /subscriptions/00000001-0000-0000-0000-000000000000/resourcegroups/02?api-version=2019-07-01 @@ -341,7 +354,7 @@ def test_send_raw_requests(self, send_mock, get_raw_token_mock): get_raw_token_mock.assert_called_with(mock.ANY, test_arm_active_directory_resource_id, subscription=subscription_id) request = send_mock.call_args[0][1] self.assertEqual(request.url, full_arm_rest_url) - self.assertDictEqual(dict(request.headers), expected_header_with_auth) + self._assert_headers(request.headers, expected_header_with_auth) # Test full ARM URL # https://management.azure.com/subscriptions/00000001-0000-0000-0000-000000000000/resourcegroups/02?api-version=2019-07-01