@@ -91,6 +91,16 @@ async def read_stream(stream: FakeFileStream):
9191 "stdin_error" : dict (ec = (0xDEADBEEF ,), stdout = (), stdin = "Failed" , write = OSError (), expect_exc = OSError ),
9292 "stdin_close_closed" : dict (stdout = (b" \n " , b"2\n " , b"3\n " , b" \n " ), stdin = "Stdin" , stdin_close = eshutdown_exc ),
9393 "stdin_close_fail" : dict (ec = (0xDEADBEEF ,), stdout = (), stdin = "Failed" , stdin_close = OSError (), expect_exc = OSError ),
94+ "mask_global" : dict (
95+ command = "USE='secret=secret_pass' do task" ,
96+ init_log_mask_re = r"secret\s*=\s*([A-Z-a-z0-9_\-]+)" ,
97+ masked_cmd = "USE='secret=<*masked*>' do task" ,
98+ ),
99+ "mask_local" : dict (
100+ command = "USE='secret=secret_pass' do task" ,
101+ log_mask_re = r"secret\s*=\s*([A-Z-a-z0-9_\-]+)" ,
102+ masked_cmd = "USE='secret=<*masked*>' do task" ,
103+ ),
94104}
95105
96106
@@ -112,6 +122,8 @@ def pytest_generate_tests(metafunc):
112122 "stdin_error" ,
113123 "stdin_close_closed" ,
114124 "stdin_close_fail" ,
125+ "mask_global" ,
126+ "mask_local" ,
115127 ],
116128 indirect = True ,
117129 )
@@ -131,7 +143,7 @@ def exec_result(run_parameters):
131143 stdout_res = tuple ([elem for elem in run_parameters ["stdout" ] if isinstance (elem , bytes )])
132144
133145 return exec_helpers .async_api .ExecResult (
134- cmd = command ,
146+ cmd = run_parameters . get ( "masked_cmd" , command ) ,
135147 stdin = run_parameters .get ("stdin" , None ),
136148 stdout = stdout_res ,
137149 stderr = (),
@@ -190,16 +202,24 @@ def logger(mocker):
190202
191203
192204async def test_special_cases (create_subprocess_shell , exec_result , logger , run_parameters ) -> None :
193- runner = exec_helpers .async_api .Subprocess ()
205+ runner = exec_helpers .async_api .Subprocess (log_mask_re = run_parameters . get ( "init_log_mask_re" , None ) )
194206 if "expect_exc" not in run_parameters :
195207 res = await runner .execute (
196- command , stdin = run_parameters .get ("stdin" , None ), verbose = run_parameters .get ("verbose" , None )
208+ command = run_parameters .get ("command" , command ),
209+ stdin = run_parameters .get ("stdin" , None ),
210+ verbose = run_parameters .get ("verbose" , None ),
211+ log_mask_re = run_parameters .get ("log_mask_re" , None ),
197212 )
198213 level = logging .INFO if run_parameters .get ("verbose" , False ) else logging .DEBUG
199- assert logger .mock_calls [0 ] == mock .call .log (level = level , msg = command_log )
200- assert logger .mock_calls [- 1 ] == mock .call .log (
201- level = level , msg = "Command {result.cmd!r} exit code: {result.exit_code!s}" .format (result = res )
214+
215+ command_for_log = run_parameters .get ("masked_cmd" , command )
216+ command_log = "Executing command:\n {!r}\n " .format (command_for_log .rstrip ())
217+ result_log = "Command {command!r} exit code: {result.exit_code!s}" .format (
218+ command = command_for_log .rstrip (), result = res
202219 )
220+
221+ assert logger .mock_calls [0 ] == mock .call .log (level = level , msg = command_log )
222+ assert logger .mock_calls [- 1 ] == mock .call .log (level = level , msg = result_log )
203223 assert res == exec_result
204224 else :
205225 with pytest .raises (run_parameters ["expect_exc" ]):
0 commit comments