66import pytest
77
88from pymobiledevice3 .cli import syslog as syslog_module
9- from pymobiledevice3 .services .os_trace import SyslogEntry , SyslogLabel , SyslogLogLevel
9+ from pymobiledevice3 .services .os_trace import (
10+ OS_TRACE_RELAY_STREAM_FLAGS_DEFAULT ,
11+ OsActivityStreamFlag ,
12+ SyslogEntry ,
13+ SyslogLabel ,
14+ SyslogLogLevel ,
15+ )
1016
1117pytestmark = [pytest .mark .cli ]
1218
1319_FAKE_SERVICE_PROVIDER = object ()
1420
1521
1622class _FakeOsTraceService :
23+ last_pid = None
24+ last_stream_flags = None
25+
1726 def __init__ (self , entries ):
1827 self ._entries = entries
1928
20- async def syslog (self , pid = - 1 ):
29+ async def syslog (self , pid = - 1 , stream_flags = OS_TRACE_RELAY_STREAM_FLAGS_DEFAULT , ** _kwargs ):
30+ type(self ).last_pid = pid
31+ type(self ).last_stream_flags = stream_flags
2132 for entry in self ._entries :
2233 yield entry
2334
@@ -34,6 +45,12 @@ def _create_syslog_entry(message: str) -> SyslogEntry:
3445 )
3546
3647
48+ def _create_syslog_entry_with_level (message : str , level : SyslogLogLevel ) -> SyslogEntry :
49+ entry = _create_syslog_entry (message )
50+ entry .level = level
51+ return entry
52+
53+
3754def _create_syslog_entries (messages : list [str ]) -> list [SyslogEntry ]:
3855 return [_create_syslog_entry (message ) for message in messages ]
3956
@@ -55,6 +72,8 @@ async def _run_syslog_live(
5572 "include_label" : False ,
5673 "regex" : [],
5774 "insensitive_regex" : [],
75+ "no_debug" : False ,
76+ "no_info" : False ,
5877 }
5978 kwargs .update (syslog_live_kwargs )
6079
@@ -244,6 +263,50 @@ async def test_syslog_live_regex_filters_and_writes_plain_output_to_out(monkeypa
244263 assert out_lines == printed_lines
245264
246265
266+ @pytest .mark .asyncio
267+ async def test_syslog_live_no_debug_suppresses_only_debug (monkeypatch , capsys ):
268+ entries = [
269+ _create_syslog_entry_with_level ("info line" , SyslogLogLevel .INFO ),
270+ _create_syslog_entry_with_level ("debug line" , SyslogLogLevel .DEBUG ),
271+ _create_syslog_entry_with_level ("notice line" , SyslogLogLevel .NOTICE ),
272+ _create_syslog_entry_with_level ("error line" , SyslogLogLevel .ERROR ),
273+ ]
274+
275+ printed_lines , _ = await _run_syslog_live (
276+ monkeypatch ,
277+ capsys ,
278+ entries ,
279+ no_debug = True ,
280+ )
281+
282+ assert len (printed_lines ) == 3
283+ assert printed_lines [0 ].endswith ("info line" )
284+ assert printed_lines [1 ].endswith ("notice line" )
285+ assert printed_lines [2 ].endswith ("error line" )
286+ assert _FakeOsTraceService .last_stream_flags == (OS_TRACE_RELAY_STREAM_FLAGS_DEFAULT & ~ OsActivityStreamFlag .DEBUG )
287+
288+
289+ @pytest .mark .asyncio
290+ async def test_syslog_live_no_info_suppresses_only_info (monkeypatch , capsys ):
291+ entries = [
292+ _create_syslog_entry_with_level ("info line" , SyslogLogLevel .INFO ),
293+ _create_syslog_entry_with_level ("debug line" , SyslogLogLevel .DEBUG ),
294+ _create_syslog_entry_with_level ("notice line" , SyslogLogLevel .NOTICE ),
295+ ]
296+
297+ printed_lines , _ = await _run_syslog_live (
298+ monkeypatch ,
299+ capsys ,
300+ entries ,
301+ no_info = True ,
302+ )
303+
304+ assert len (printed_lines ) == 2
305+ assert printed_lines [0 ].endswith ("debug line" )
306+ assert printed_lines [1 ].endswith ("notice line" )
307+ assert _FakeOsTraceService .last_stream_flags == (OS_TRACE_RELAY_STREAM_FLAGS_DEFAULT & ~ OsActivityStreamFlag .INFO )
308+
309+
247310def test_format_json_line_with_label ():
248311 entry = SyslogEntry (
249312 pid = 42 ,
0 commit comments