1""" 2Test that we are able to broadcast and receive diagnostic events from lldb 3""" 4import lldb 5from lldbsuite.test.lldbtest import * 6from lldbsuite.test.decorators import * 7import lldbsuite.test.lldbutil as lldbutil 8import threading 9 10 11class TestDiagnosticReporting(TestBase): 12 13 mydir = TestBase.compute_mydir(__file__) 14 15 eBroadcastBitStopDiagnosticThread = (1 << 0) 16 17 def setUp(self): 18 TestBase.setUp(self) 19 self.diagnostic_events = [] 20 21 def fetch_events(self): 22 event = lldb.SBEvent() 23 24 done = False 25 while not done: 26 if self.listener.WaitForEvent(1, event): 27 event_mask = event.GetType() 28 if event.BroadcasterMatchesRef(self.test_broadcaster): 29 if event_mask & self.eBroadcastBitStopDiagnosticThread: 30 done = True 31 elif event.BroadcasterMatchesRef(self.diagnostic_broadcaster): 32 self.diagnostic_events.append( 33 lldb.SBDebugger.GetDiagnosticFromEvent(event)) 34 35 def test_dwarf_symbol_loading_diagnostic_report(self): 36 """Test that we are able to fetch diagnostic events""" 37 self.listener = lldb.SBListener("lldb.diagnostic.listener") 38 self.test_broadcaster = lldb.SBBroadcaster('lldb.broadcaster.test') 39 self.listener.StartListeningForEvents( 40 self.test_broadcaster, self.eBroadcastBitStopDiagnosticThread) 41 42 self.diagnostic_broadcaster = self.dbg.GetBroadcaster() 43 self.diagnostic_broadcaster.AddListener( 44 self.listener, lldb.SBDebugger.eBroadcastBitWarning) 45 self.diagnostic_broadcaster.AddListener( 46 self.listener, lldb.SBDebugger.eBroadcastBitError) 47 48 listener_thread = threading.Thread(target=self.fetch_events) 49 listener_thread.start() 50 51 self.yaml2obj("minidump.yaml", self.getBuildArtifact("minidump.core")) 52 53 self.dbg.CreateTarget(None) 54 self.target = self.dbg.GetSelectedTarget() 55 self.process = self.target.LoadCore( 56 self.getBuildArtifact("minidump.core")) 57 58 self.test_broadcaster.BroadcastEventByType( 59 self.eBroadcastBitStopDiagnosticThread) 60 listener_thread.join() 61 62 self.assertEquals(len(self.diagnostic_events), 1) 63 64 diagnostic_event = self.diagnostic_events[0] 65 self.assertEquals( 66 diagnostic_event.GetValueForKey("type").GetStringValue(100), 67 "warning") 68 self.assertEquals( 69 diagnostic_event.GetValueForKey("message").GetStringValue(100), 70 "unable to retrieve process ID from minidump file, setting process ID to 1" 71 ) 72