|
12 | 12 |
|
13 | 13 | try:
|
14 | 14 | from snowflake.connector import Error
|
15 |
| - from snowflake.connector.network import SnowflakeRestful |
| 15 | + from snowflake.connector.network import ( |
| 16 | + PATWithExternalSessionAuth, |
| 17 | + SnowflakeAuth, |
| 18 | + SnowflakeRestful, |
| 19 | + ) |
16 | 20 | from snowflake.connector.vendored.requests import HTTPError, Response
|
17 | 21 | except ImportError:
|
18 | 22 | # skipping old driver test
|
@@ -85,3 +89,57 @@ def test_json_serialize_uuid(u):
|
85 | 89 | assert (json.dumps(u, cls=SnowflakeRestfulJsonEncoder)) == f'"{u}"'
|
86 | 90 |
|
87 | 91 | assert json.dumps({"u": u, "a": 42}, cls=SnowflakeRestfulJsonEncoder) == expected
|
| 92 | + |
| 93 | + |
| 94 | +def test_fetch_auth(): |
| 95 | + """Test checks that PATWithExternalSessionAuth is used instead of SnowflakeAuth when external_session_id is provided.""" |
| 96 | + connection = mock_connection() |
| 97 | + rest = SnowflakeRestful( |
| 98 | + host="test.snowflakecomputing.com", port=443, connection=connection |
| 99 | + ) |
| 100 | + rest._token = "test-token" |
| 101 | + rest._master_token = "test-master-token" |
| 102 | + |
| 103 | + captured_auth = None |
| 104 | + |
| 105 | + def mock_request(**kwargs): |
| 106 | + nonlocal captured_auth |
| 107 | + captured_auth = kwargs.get("auth") |
| 108 | + mock_response = unittest.mock.MagicMock() |
| 109 | + mock_response.status_code = 200 |
| 110 | + mock_response.json.return_value = {"success": True} |
| 111 | + return mock_response |
| 112 | + |
| 113 | + with unittest.mock.patch( |
| 114 | + "snowflake.connector.network.requests.Session" |
| 115 | + ) as mock_session_class: |
| 116 | + mock_session = unittest.mock.MagicMock() |
| 117 | + mock_session_class.return_value = mock_session |
| 118 | + mock_session.request = mock_request |
| 119 | + |
| 120 | + # Call fetch without providing external_session_id - should use SnowflakeAuth |
| 121 | + rest.fetch( |
| 122 | + method="POST", |
| 123 | + full_url="https://test.snowflakecomputing.com/test", |
| 124 | + headers={}, |
| 125 | + data={}, |
| 126 | + ) |
| 127 | + assert isinstance(captured_auth, SnowflakeAuth) |
| 128 | + |
| 129 | + with unittest.mock.patch( |
| 130 | + "snowflake.connector.network.requests.Session" |
| 131 | + ) as mock_session_class: |
| 132 | + mock_session = unittest.mock.MagicMock() |
| 133 | + mock_session_class.return_value = mock_session |
| 134 | + mock_session.request = mock_request |
| 135 | + |
| 136 | + # Call fetch with providing external_session_id - should use PATWithExternalSessionAuth |
| 137 | + rest.fetch( |
| 138 | + method="POST", |
| 139 | + full_url="https://test.snowflakecomputing.com/test", |
| 140 | + headers={}, |
| 141 | + data={}, |
| 142 | + external_session_id="dummy-external-session-id", |
| 143 | + ) |
| 144 | + assert isinstance(captured_auth, PATWithExternalSessionAuth) |
| 145 | + assert captured_auth.external_session_id == "dummy-external-session-id" |
0 commit comments