Home | History | Annotate | Download | only in default-constructor
      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