forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			46 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import sys, glob, os, subprocess, logging
 | |
| 
 | |
| __all__ = [
 | |
|     "addCommonOptions",
 | |
|     "checkForCrashes",
 | |
|     ]
 | |
| 
 | |
| log = logging.getLogger()
 | |
| 
 | |
| def addCommonOptions(parser, defaults={}):
 | |
|     parser.add_option("--xre-path",
 | |
|                       action = "store", type = "string", dest = "xrePath",
 | |
|                       # individual scripts will set a sane default
 | |
|                       default = None,
 | |
|                       help = "absolute path to directory containing XRE (probably xulrunner)")
 | |
|     if 'SYMBOLS_PATH' not in defaults:
 | |
|         defaults['SYMBOLS_PATH'] = None
 | |
|     parser.add_option("--symbols-path",
 | |
|                       action = "store", type = "string", dest = "symbolsPath",
 | |
|                       default = defaults['SYMBOLS_PATH'],
 | |
|                       help = "absolute path to directory containing breakpad symbols")
 | |
| 
 | |
| def checkForCrashes(dumpDir, symbolsPath, testName=None):
 | |
|   stackwalkPath = os.environ.get('MINIDUMP_STACKWALK', None)
 | |
|   # try to get the caller's filename if no test name is given
 | |
|   if testName is None:
 | |
|       try:
 | |
|           testName = os.path.basename(sys._getframe(1).f_code.co_filename)
 | |
|       except:
 | |
|           testName = "unknown"
 | |
| 
 | |
|   foundCrash = False
 | |
|   dumps = glob.glob(os.path.join(dumpDir, '*.dmp'))
 | |
|   for d in dumps:
 | |
|     log.info("TEST-UNEXPECTED-FAIL | %s | application crashed (minidump found)", testName)
 | |
|     if symbolsPath and stackwalkPath:
 | |
|       nullfd = open(os.devnull, 'w')
 | |
|       # eat minidump_stackwalk errors
 | |
|       subprocess.call([stackwalkPath, d, symbolsPath], stderr=nullfd)
 | |
|       nullfd.close()
 | |
|     os.remove(d)
 | |
|     extra = os.path.splitext(d)[0] + ".extra"
 | |
|     if os.path.exists(extra):
 | |
|         os.remove(extra)
 | |
|     foundCrash = True
 | |
|   return foundCrash
 | 
