-
Notifications
You must be signed in to change notification settings - Fork 5.7k
/
Copy pathtest_logger.py
117 lines (96 loc) · 3.06 KB
/
test_logger.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import logging
from unittest.mock import patch
from openhands.core.logger import SensitiveDataFilter
@patch.dict(
'os.environ',
{
'API_SECRET': 'super-secret-123',
'AUTH_TOKEN': 'auth-token-456',
'NORMAL_VAR': 'normal-value',
},
clear=True,
)
def test_sensitive_data_filter_basic():
# Create a filter instance
filter = SensitiveDataFilter()
# Create a log record with sensitive data
record = logging.LogRecord(
name='test_logger',
level=logging.INFO,
pathname='test.py',
lineno=1,
msg='API Secret: super-secret-123, Token: auth-token-456, Normal: normal-value',
args=(),
exc_info=None,
)
# Apply the filter
filter.filter(record)
# Check that sensitive data is masked but normal data isn't
assert '******' in record.msg
assert 'super-secret-123' not in record.msg
assert 'auth-token-456' not in record.msg
assert 'normal-value' in record.msg
@patch.dict('os.environ', {}, clear=True)
def test_sensitive_data_filter_empty_values():
# Test with empty environment variables
filter = SensitiveDataFilter()
record = logging.LogRecord(
name='test_logger',
level=logging.INFO,
pathname='test.py',
lineno=1,
msg='No sensitive data here',
args=(),
exc_info=None,
)
# Apply the filter
filter.filter(record)
# Message should remain unchanged
assert record.msg == 'No sensitive data here'
@patch.dict('os.environ', {'API_KEY': 'secret-key-789'}, clear=True)
def test_sensitive_data_filter_multiple_occurrences():
# Test with multiple occurrences of the same sensitive data
filter = SensitiveDataFilter()
# Create a message with multiple occurrences of the same sensitive data
record = logging.LogRecord(
name='test_logger',
level=logging.INFO,
pathname='test.py',
lineno=1,
msg='Key1: secret-key-789, Key2: secret-key-789',
args=(),
exc_info=None,
)
# Apply the filter
filter.filter(record)
# Check that all occurrences are masked
assert record.msg.count('******') == 2
assert 'secret-key-789' not in record.msg
@patch.dict(
'os.environ',
{
'secret_KEY': 'secret-value-1',
'API_secret': 'secret-value-2',
'TOKEN_code': 'secret-value-3',
},
clear=True,
)
def test_sensitive_data_filter_case_sensitivity():
# Test with different case variations in environment variable names
filter = SensitiveDataFilter()
record = logging.LogRecord(
name='test_logger',
level=logging.INFO,
pathname='test.py',
lineno=1,
msg='Values: secret-value-1, secret-value-2, secret-value-3',
args=(),
exc_info=None,
)
# Apply the filter
filter.filter(record)
# Check that all sensitive values are masked regardless of case
assert 'secret-value-1' not in record.msg
assert 'secret-value-2' not in record.msg
assert 'secret-value-3' not in record.msg
assert record.msg.count('******') == 3