diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:50:09 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:50:09 +0000 |
commit | f3fbd1c0586ff6ec7895991e6c28f61a503c36a8 (patch) | |
tree | 48d008fd3df8c0e73271a4b18474e0aac6dbfe33 /packages/Python/lldbsuite/test/api | |
parent | 2fc5d2d1dfaf623ce4e24cd8590565902f8c557c (diff) |
Notes
Diffstat (limited to 'packages/Python/lldbsuite/test/api')
7 files changed, 98 insertions, 39 deletions
diff --git a/packages/Python/lldbsuite/test/api/check_public_api_headers/TestPublicAPIHeaders.py b/packages/Python/lldbsuite/test/api/check_public_api_headers/TestPublicAPIHeaders.py index 0d0507f1d70c3..0ed2df3ceab17 100644 --- a/packages/Python/lldbsuite/test/api/check_public_api_headers/TestPublicAPIHeaders.py +++ b/packages/Python/lldbsuite/test/api/check_public_api_headers/TestPublicAPIHeaders.py @@ -8,8 +8,9 @@ from __future__ import print_function import os, re +from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil class SBDirCheckerCase(TestBase): diff --git a/packages/Python/lldbsuite/test/api/listeners/Makefile b/packages/Python/lldbsuite/test/api/listeners/Makefile new file mode 100644 index 0000000000000..fbedeab4cb9b1 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/listeners/Makefile @@ -0,0 +1,6 @@ +LEVEL = ../../make + +C_SOURCES := main.c + +include $(LEVEL)/Makefile.rules + diff --git a/packages/Python/lldbsuite/test/api/listeners/TestListener.py b/packages/Python/lldbsuite/test/api/listeners/TestListener.py new file mode 100644 index 0000000000000..bd8c204e78cb5 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/listeners/TestListener.py @@ -0,0 +1,55 @@ +""" +Test that we can listen to modules loaded events. +""" + +from __future__ import print_function + +import copy +import os +import time + +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +import six + +class ListenToModuleLoadedEvents (TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + self.build() + + def test_receiving_breakpoint_added (self): + """Test that we get breakpoint added events, waiting on event classes on the debugger""" + + my_listener = lldb.SBListener("test_listener") + + my_listener.StartListeningForEventClass(self.dbg, lldb.SBTarget.GetBroadcasterClassName(), lldb.SBTarget.eBroadcastBitBreakpointChanged) + + exe = os.path.join (os.getcwd(), "a.out") + + target = self.dbg.CreateTarget(exe) + + bkpt = target.BreakpointCreateByName("main") + + event = lldb.SBEvent() + my_listener.WaitForEvent(1, event) + + self.assertTrue(event.IsValid(), "Got a valid event.") + self.assertTrue(lldb.SBBreakpoint.EventIsBreakpointEvent(event), "It is a breakpoint event.") + self.assertTrue(lldb.SBBreakpoint.GetBreakpointEventTypeFromEvent(event) == lldb.eBreakpointEventTypeAdded, "It is a breakpoint added event.") + self.assertTrue(bkpt == lldb.SBBreakpoint.GetBreakpointFromEvent(event), "It is our breakpoint.") + + # Now make sure if we stop listening for events we don't get them: + + my_listener.StopListeningForEventClass(self.dbg, lldb.SBTarget.GetBroadcasterClassName(), lldb.SBTarget.eBroadcastBitBreakpointChanged) + my_listener.StopListeningForEvents(target.GetBroadcaster(), lldb.SBTarget.eBroadcastBitBreakpointChanged) + + bkpt2 = target.BreakpointCreateByName("main") + my_listener.WaitForEvent(1, event) + self.assertTrue(not event.IsValid(), "We don't get events we aren't listening to.") diff --git a/packages/Python/lldbsuite/test/api/listeners/main.c b/packages/Python/lldbsuite/test/api/listeners/main.c new file mode 100644 index 0000000000000..f930e51191582 --- /dev/null +++ b/packages/Python/lldbsuite/test/api/listeners/main.c @@ -0,0 +1,7 @@ +#include <stdio.h> + +int +main() +{ + printf ("Hello there.\n"); +} diff --git a/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py b/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py index 67dca2273d8ab..ca2b986ce740e 100644 --- a/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py +++ b/packages/Python/lldbsuite/test/api/multiple-debuggers/TestMultipleDebuggers.py @@ -5,21 +5,21 @@ from __future__ import print_function import os, re -from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil -import lldb import subprocess +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + class TestMultipleSimultaneousDebuggers(TestBase): mydir = TestBase.compute_mydir(__file__) - @skipIfi386 @skipIfNoSBHeaders - @expectedFailureFreeBSD("llvm.org/pr20282") - @expectedFailureLinux("llvm.org/pr20282") - @expectedFailureWindows # Test crashes @expectedFlakeyDarwin() + @expectedFailureAll(archs="i[3-6]86", bugnumber="multi-process-driver.cpp creates an x64 target") + @expectedFailureAll(oslist=["windows", "linux", "freebsd"], bugnumber="llvm.org/pr20282") def test_multiple_debuggers(self): env = {self.dylibPath : self.getLLDBLibraryEnvVal()} diff --git a/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py b/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py index 9963cf23a8c6e..7959bb73de020 100644 --- a/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py +++ b/packages/Python/lldbsuite/test/api/multithreaded/TestMultithreaded.py @@ -6,8 +6,9 @@ from __future__ import print_function import os, re +from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * -import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test import lldbutil import subprocess class SBBreakpointCallbackCase(TestBase): @@ -36,7 +37,6 @@ class SBBreakpointCallbackCase(TestBase): @skipIfNoSBHeaders @skipIfWindows # clang-cl does not support throw or catch (llvm.org/pr24538) @expectedFlakeyFreeBSD - @expectedFlakeyLinux # Driver occasionally returns '1' as exit status @expectedFailureAll("llvm.org/pr23139", oslist=["linux"], compiler="gcc", compiler_version=[">=","4.9"], archs=["x86_64"]) def test_sb_api_listener_event_process_state(self): """ Test that a registered SBListener receives events when a process @@ -51,7 +51,7 @@ class SBBreakpointCallbackCase(TestBase): @skipIfNoSBHeaders @skipIfWindows # clang-cl does not support throw or catch (llvm.org/pr24538) @expectedFlakeyFreeBSD - @expectedFailureLinux + @expectedFailureAll(oslist=["linux"]) def test_sb_api_listener_resume(self): """ Test that a process can be resumed from a non-main thread. """ self.build_and_test('driver.cpp listener_test.cpp test_listener_resume.cpp', diff --git a/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp b/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp index 0a698d1081d47..a79c5cb2a08bc 100644 --- a/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp +++ b/packages/Python/lldbsuite/test/api/multithreaded/test_listener_event_process_state.cpp @@ -18,7 +18,6 @@ using namespace std; // listener thread control extern atomic<bool> g_done; -multithreaded_queue<string> g_thread_descriptions; multithreaded_queue<string> g_frame_functions; extern SBListener g_listener; @@ -30,26 +29,21 @@ void listener_func() { if (got_event) { if (!event.IsValid()) throw Exception("event is not valid in listener thread"); - - // send process description - SBProcess process = SBProcess::GetProcessFromEvent(event); - SBStream description; - - for (int i = 0; i < process.GetNumThreads(); ++i) { - // send each thread description - description.Clear(); - SBThread thread = process.GetThreadAtIndex(i); - thread.GetDescription(description); - g_thread_descriptions.push(description.GetData()); - - // send each frame function name - uint32_t num_frames = thread.GetNumFrames(); - for(int j = 0; j < num_frames; ++j) { - const char* function_name = thread.GetFrameAtIndex(j).GetSymbol().GetName(); - if (function_name) - g_frame_functions.push(function_name); + // send process description + SBProcess process = SBProcess::GetProcessFromEvent(event); + SBStream description; + + for (int i = 0; i < process.GetNumThreads(); ++i) { + // send each thread description + SBThread thread = process.GetThreadAtIndex(i); + // send each frame function name + uint32_t num_frames = thread.GetNumFrames(); + for(int j = 0; j < num_frames; ++j) { + const char* function_name = thread.GetFrameAtIndex(j).GetSymbol().GetName(); + if (function_name) + g_frame_functions.push(string(function_name)); + } } - } } } } @@ -57,12 +51,8 @@ void listener_func() { void check_listener(SBDebugger &dbg) { // check thread description bool got_description = false; - string desc = g_thread_descriptions.pop(5, got_description); - if (!got_description) - throw Exception("Expected at least one thread description string"); - - // check at least one frame has a function name - desc = g_frame_functions.pop(5, got_description); - if (!got_description) - throw Exception("Expected at least one frame function name string"); + string func_name = g_frame_functions.pop(5, got_description); + + if(got_description == false) + throw Exception("Expected at least one frame function"); } |