This looks good, thanks for the test. One thing, I tend not to do:
self.assertTrue(main_breakpoint.IsValid() and main_breakpoint.GetNumLocations() == 1, VALID_BREAKPOINT)
but rather GetNumLocations() >= 1. When you are setting a breakpoint by name, you never know when some system component is going to have a function with the same name - yes there are even "main" symbols in shared libraries on some systems. You can work around this by limiting the breakpoint to the main executable but you really don't care that there is ONLY one location so that's not really necessary. And when setting breakpoints by source location you never know when some compiler is going to emit two line table entries for one source line, and this would cause a spurious failure...