1 """ 2 Test lldb Python API object's default constructor and make sure it is invalid 3 after initial construction. 4 5 There are also some cases of boundary condition testings sprinkled throughout 6 the tests where None is passed to SB API which expects (const char *) in the 7 C++ API counterpart. Passing None should not crash lldb! 8 9 There are three exceptions to the above general rules, though; API objects 10 SBCommadnReturnObject, SBStream, and SBSymbolContextList, are all valid objects 11 after default construction. 12 """ 13 14 import os, time 15 import re 16 import unittest2 17 import lldb, lldbutil 18 from lldbtest import * 19 20 class APIDefaultConstructorTestCase(TestBase): 21 22 mydir = os.path.join("python_api", "default-constructor") 23 24 @python_api_test 25 def test_SBAddress(self): 26 obj = lldb.SBAddress() 27 if self.TraceOn(): 28 print obj 29 self.assertFalse(obj) 30 # Do fuzz testing on the invalid obj, it should not crash lldb. 31 import sb_address 32 sb_address.fuzz_obj(obj) 33 34 @python_api_test 35 def test_SBBlock(self): 36 obj = lldb.SBBlock() 37 if self.TraceOn(): 38 print obj 39 self.assertFalse(obj) 40 # Do fuzz testing on the invalid obj, it should not crash lldb. 41 import sb_block 42 sb_block.fuzz_obj(obj) 43 44 @python_api_test 45 def test_SBBreakpoint(self): 46 obj = lldb.SBBreakpoint() 47 if self.TraceOn(): 48 print obj 49 self.assertFalse(obj) 50 # Do fuzz testing on the invalid obj, it should not crash lldb. 51 import sb_breakpoint 52 sb_breakpoint.fuzz_obj(obj) 53 54 @python_api_test 55 def test_SBBreakpointLocation(self): 56 obj = lldb.SBBreakpointLocation() 57 if self.TraceOn(): 58 print obj 59 self.assertFalse(obj) 60 # Do fuzz testing on the invalid obj, it should not crash lldb. 61 import sb_breakpointlocation 62 sb_breakpointlocation.fuzz_obj(obj) 63 64 @python_api_test 65 def test_SBBroadcaster(self): 66 obj = lldb.SBBroadcaster() 67 if self.TraceOn(): 68 print obj 69 self.assertFalse(obj) 70 # Do fuzz testing on the invalid obj, it should not crash lldb. 71 import sb_broadcaster 72 sb_broadcaster.fuzz_obj(obj) 73 74 @python_api_test 75 def test_SBCommandReturnObject(self): 76 """SBCommandReturnObject object is valid after default construction.""" 77 obj = lldb.SBCommandReturnObject() 78 if self.TraceOn(): 79 print obj 80 self.assertTrue(obj) 81 82 @python_api_test 83 def test_SBCommunication(self): 84 obj = lldb.SBCommunication() 85 if self.TraceOn(): 86 print obj 87 self.assertFalse(obj) 88 # Do fuzz testing on the invalid obj, it should not crash lldb. 89 import sb_communication 90 sb_communication.fuzz_obj(obj) 91 92 @python_api_test 93 def test_SBCompileUnit(self): 94 obj = lldb.SBCompileUnit() 95 if self.TraceOn(): 96 print obj 97 self.assertFalse(obj) 98 # Do fuzz testing on the invalid obj, it should not crash lldb. 99 import sb_compileunit 100 sb_compileunit.fuzz_obj(obj) 101 102 @python_api_test 103 def test_SBDebugger(self): 104 obj = lldb.SBDebugger() 105 if self.TraceOn(): 106 print obj 107 self.assertFalse(obj) 108 # Do fuzz testing on the invalid obj, it should not crash lldb. 109 import sb_debugger 110 sb_debugger.fuzz_obj(obj) 111 112 @python_api_test 113 def test_SBError(self): 114 obj = lldb.SBError() 115 if self.TraceOn(): 116 print obj 117 self.assertFalse(obj) 118 # Do fuzz testing on the invalid obj, it should not crash lldb. 119 import sb_error 120 sb_error.fuzz_obj(obj) 121 122 @python_api_test 123 def test_SBEvent(self): 124 obj = lldb.SBEvent() 125 # This is just to test that typemap, as defined in lldb.swig, works. 126 obj2 = lldb.SBEvent(0, "abc") 127 if self.TraceOn(): 128 print obj 129 self.assertFalse(obj) 130 # Do fuzz testing on the invalid obj, it should not crash lldb. 131 import sb_event 132 sb_event.fuzz_obj(obj) 133 134 @python_api_test 135 def test_SBFileSpec(self): 136 obj = lldb.SBFileSpec() 137 # This is just to test that FileSpec(None) does not crash. 138 obj2 = lldb.SBFileSpec(None, True) 139 if self.TraceOn(): 140 print obj 141 self.assertFalse(obj) 142 # Do fuzz testing on the invalid obj, it should not crash lldb. 143 import sb_filespec 144 sb_filespec.fuzz_obj(obj) 145 146 @python_api_test 147 def test_SBFrame(self): 148 obj = lldb.SBFrame() 149 if self.TraceOn(): 150 print obj 151 self.assertFalse(obj) 152 # Do fuzz testing on the invalid obj, it should not crash lldb. 153 import sb_frame 154 sb_frame.fuzz_obj(obj) 155 156 @python_api_test 157 def test_SBFunction(self): 158 obj = lldb.SBFunction() 159 if self.TraceOn(): 160 print obj 161 self.assertFalse(obj) 162 # Do fuzz testing on the invalid obj, it should not crash lldb. 163 import sb_function 164 sb_function.fuzz_obj(obj) 165 166 @python_api_test 167 def test_SBInputReader(self): 168 obj = lldb.SBInputReader() 169 if self.TraceOn(): 170 print obj 171 self.assertFalse(obj) 172 # Do fuzz testing on the invalid obj, it should not crash lldb. 173 import sb_inputreader 174 sb_inputreader.fuzz_obj(obj) 175 176 @python_api_test 177 def test_SBInstruction(self): 178 obj = lldb.SBInstruction() 179 if self.TraceOn(): 180 print obj 181 self.assertFalse(obj) 182 # Do fuzz testing on the invalid obj, it should not crash lldb. 183 import sb_instruction 184 sb_instruction.fuzz_obj(obj) 185 186 @python_api_test 187 def test_SBInstructionList(self): 188 obj = lldb.SBInstructionList() 189 if self.TraceOn(): 190 print obj 191 self.assertFalse(obj) 192 # Do fuzz testing on the invalid obj, it should not crash lldb. 193 import sb_instructionlist 194 sb_instructionlist.fuzz_obj(obj) 195 196 @python_api_test 197 def test_SBLineEntry(self): 198 obj = lldb.SBLineEntry() 199 if self.TraceOn(): 200 print obj 201 self.assertFalse(obj) 202 # Do fuzz testing on the invalid obj, it should not crash lldb. 203 import sb_lineentry 204 sb_lineentry.fuzz_obj(obj) 205 206 @python_api_test 207 def test_SBListener(self): 208 obj = lldb.SBListener() 209 if self.TraceOn(): 210 print obj 211 self.assertFalse(obj) 212 # Do fuzz testing on the invalid obj, it should not crash lldb. 213 import sb_listener 214 sb_listener.fuzz_obj(obj) 215 216 @python_api_test 217 def test_SBModule(self): 218 obj = lldb.SBModule() 219 if self.TraceOn(): 220 print obj 221 self.assertFalse(obj) 222 # Do fuzz testing on the invalid obj, it should not crash lldb. 223 import sb_module 224 sb_module.fuzz_obj(obj) 225 226 @python_api_test 227 def test_SBProcess(self): 228 obj = lldb.SBProcess() 229 if self.TraceOn(): 230 print obj 231 self.assertFalse(obj) 232 # Do fuzz testing on the invalid obj, it should not crash lldb. 233 import sb_process 234 sb_process.fuzz_obj(obj) 235 236 @python_api_test 237 def test_SBSection(self): 238 obj = lldb.SBSection() 239 if self.TraceOn(): 240 print obj 241 self.assertFalse(obj) 242 # Do fuzz testing on the invalid obj, it should not crash lldb. 243 import sb_section 244 sb_section.fuzz_obj(obj) 245 246 @python_api_test 247 def test_SBStream(self): 248 """SBStream object is valid after default construction.""" 249 obj = lldb.SBStream() 250 if self.TraceOn(): 251 print obj 252 self.assertTrue(obj) 253 254 @python_api_test 255 def test_SBStringList(self): 256 obj = lldb.SBStringList() 257 if self.TraceOn(): 258 print obj 259 self.assertFalse(obj) 260 # Do fuzz testing on the invalid obj, it should not crash lldb. 261 import sb_stringlist 262 sb_stringlist.fuzz_obj(obj) 263 264 @python_api_test 265 def test_SBSymbol(self): 266 obj = lldb.SBSymbol() 267 if self.TraceOn(): 268 print obj 269 self.assertFalse(obj) 270 # Do fuzz testing on the invalid obj, it should not crash lldb. 271 import sb_symbol 272 sb_symbol.fuzz_obj(obj) 273 274 @python_api_test 275 def test_SBSymbolContext(self): 276 obj = lldb.SBSymbolContext() 277 if self.TraceOn(): 278 print obj 279 self.assertFalse(obj) 280 # Do fuzz testing on the invalid obj, it should not crash lldb. 281 import sb_symbolcontext 282 sb_symbolcontext.fuzz_obj(obj) 283 284 @python_api_test 285 def test_SBSymbolContextList(self): 286 """SBSymbolContextList object is valid after default construction.""" 287 obj = lldb.SBSymbolContextList() 288 if self.TraceOn(): 289 print obj 290 self.assertTrue(obj) 291 292 @python_api_test 293 def test_SBTarget(self): 294 obj = lldb.SBTarget() 295 if self.TraceOn(): 296 print obj 297 self.assertFalse(obj) 298 # Do fuzz testing on the invalid obj, it should not crash lldb. 299 import sb_target 300 sb_target.fuzz_obj(obj) 301 302 @python_api_test 303 def test_SBThread(self): 304 obj = lldb.SBThread() 305 if self.TraceOn(): 306 print obj 307 self.assertFalse(obj) 308 # Do fuzz testing on the invalid obj, it should not crash lldb. 309 import sb_thread 310 sb_thread.fuzz_obj(obj) 311 312 @python_api_test 313 def test_SBType(self): 314 try: 315 obj = lldb.SBType() 316 if self.TraceOn(): 317 print obj 318 self.assertFalse(obj) 319 # If we reach here, the test fails. 320 self.fail("lldb.SBType() should fail, not succeed!") 321 except: 322 # Exception is expected. 323 return 324 325 # Unreachable code because lldb.SBType() should fail. 326 # Do fuzz testing on the invalid obj, it should not crash lldb. 327 import sb_type 328 sb_type.fuzz_obj(obj) 329 330 @python_api_test 331 def test_SBTypeList(self): 332 """SBTypeList object is valid after default construction.""" 333 obj = lldb.SBTypeList() 334 if self.TraceOn(): 335 print obj 336 self.assertTrue(obj) 337 338 @python_api_test 339 def test_SBValue(self): 340 obj = lldb.SBValue() 341 if self.TraceOn(): 342 print obj 343 self.assertFalse(obj) 344 # Do fuzz testing on the invalid obj, it should not crash lldb. 345 import sb_value 346 sb_value.fuzz_obj(obj) 347 348 @python_api_test 349 def test_SBValueList(self): 350 obj = lldb.SBValueList() 351 if self.TraceOn(): 352 print obj 353 self.assertFalse(obj) 354 # Do fuzz testing on the invalid obj, it should not crash lldb. 355 import sb_valuelist 356 sb_valuelist.fuzz_obj(obj) 357 358 @python_api_test 359 def test_SBWatchpoint(self): 360 obj = lldb.SBWatchpoint() 361 if self.TraceOn(): 362 print obj 363 self.assertFalse(obj) 364 # Do fuzz testing on the invalid obj, it should not crash lldb. 365 import sb_watchpoint 366 sb_watchpoint.fuzz_obj(obj) 367 368 369 if __name__ == '__main__': 370 import atexit 371 lldb.SBDebugger.Initialize() 372 atexit.register(lambda: lldb.SBDebugger.Terminate()) 373 unittest2.main() 374