|
5 | 5 |
|
6 | 6 | from __future__ import annotations |
7 | 7 |
|
| 8 | +import logging |
8 | 9 | from unittest.mock import Mock, PropertyMock |
9 | 10 |
|
10 | 11 | from snowflake.connector.network import SnowflakeRestful |
@@ -57,3 +58,51 @@ def fake_request_exec(**_): |
57 | 58 | del rest._master_token |
58 | 59 | rest._renew_session() |
59 | 60 | assert rest._connection.errorhandler.called # error |
| 61 | + |
| 62 | + |
| 63 | +def test_mask_token_when_renew_session(caplog): |
| 64 | + caplog.set_level(logging.DEBUG) |
| 65 | + OLD_SESSION_TOKEN = "old_session_token" |
| 66 | + OLD_MASTER_TOKEN = "old_master_token" |
| 67 | + NEW_SESSION_TOKEN = "new_session_token" |
| 68 | + NEW_MASTER_TOKEN = "new_master_token" |
| 69 | + connection = mock_connection() |
| 70 | + connection.errorhandler = Mock(return_value=None) |
| 71 | + type(connection)._probe_connection = PropertyMock(return_value=False) |
| 72 | + |
| 73 | + rest = SnowflakeRestful( |
| 74 | + host="testaccount.snowflakecomputing.com", port=443, connection=connection |
| 75 | + ) |
| 76 | + rest._token = OLD_SESSION_TOKEN |
| 77 | + rest._master_token = OLD_MASTER_TOKEN |
| 78 | + |
| 79 | + # inject a fake method (success) |
| 80 | + def fake_request_exec(**_): |
| 81 | + return { |
| 82 | + "success": True, |
| 83 | + "data": { |
| 84 | + "sessionToken": NEW_SESSION_TOKEN, |
| 85 | + "masterToken": NEW_MASTER_TOKEN, |
| 86 | + }, |
| 87 | + } |
| 88 | + |
| 89 | + rest._request_exec = fake_request_exec |
| 90 | + |
| 91 | + # no secrets recorded when renew succeed |
| 92 | + rest._renew_session() |
| 93 | + assert "new_session_token" not in caplog.text |
| 94 | + assert "new_master_token" not in caplog.text |
| 95 | + assert "old_session_token" not in caplog.text |
| 96 | + assert "old_master_token" not in caplog.text |
| 97 | + |
| 98 | + def fake_request_exec(**_): |
| 99 | + return {"success": False, "message": "failed to renew session", "code": 987654} |
| 100 | + |
| 101 | + rest._request_exec = fake_request_exec |
| 102 | + |
| 103 | + # no secrets recorded when renew failed |
| 104 | + rest._renew_session() |
| 105 | + assert "new_session_token" not in caplog.text |
| 106 | + assert "new_master_token" not in caplog.text |
| 107 | + assert "old_session_token" not in caplog.text |
| 108 | + assert "old_master_token" not in caplog.text |
0 commit comments