Bug 1042097 - Upload Android tombstones to blobber; r=dminor
This commit is contained in:
@@ -2,12 +2,14 @@
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
import glob
|
||||
import time
|
||||
import re
|
||||
import os
|
||||
import tempfile
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from automation import Automation
|
||||
from devicemanager import DMError
|
||||
@@ -128,8 +130,51 @@ class RemoteAutomation(Automation):
|
||||
else:
|
||||
print "%s not found" % traces
|
||||
|
||||
def deleteTombstones(self):
|
||||
# delete any existing tombstone files from device
|
||||
remoteDir = "/data/tombstones"
|
||||
try:
|
||||
self._devicemanager.shellCheckOutput(['rm', '-r', remoteDir], root=True)
|
||||
except DMError:
|
||||
# This may just indicate that the tombstone directory is missing
|
||||
pass
|
||||
|
||||
def checkForTombstones(self):
|
||||
# pull any tombstones from device and move to MOZ_UPLOAD_DIR
|
||||
remoteDir = "/data/tombstones"
|
||||
blobberUploadDir = os.environ.get('MOZ_UPLOAD_DIR', None)
|
||||
if blobberUploadDir:
|
||||
if not os.path.exists(blobberUploadDir):
|
||||
os.mkdir(blobberUploadDir)
|
||||
if self._devicemanager.dirExists(remoteDir):
|
||||
# copy tombstone files from device to local blobber upload directory
|
||||
try:
|
||||
self._devicemanager.shellCheckOutput(['chmod', '777', remoteDir], root=True)
|
||||
self._devicemanager.shellCheckOutput(['chmod', '666', os.path.join(remoteDir, '*')], root=True)
|
||||
self._devicemanager.getDirectory(remoteDir, blobberUploadDir, False)
|
||||
except DMError:
|
||||
# This may just indicate that no tombstone files are present
|
||||
pass
|
||||
self.deleteTombstones()
|
||||
# add a .txt file extension to each tombstone file name, so
|
||||
# that blobber will upload it
|
||||
for f in glob.glob(os.path.join(blobberUploadDir, "tombstone_??")):
|
||||
# add a unique integer to the file name, in case there are
|
||||
# multiple tombstones generated with the same name, for
|
||||
# instance, after multiple robocop tests
|
||||
for i in xrange(1, sys.maxint):
|
||||
newname = "%s.%d.txt" % (f, i)
|
||||
if not os.path.exists(newname):
|
||||
os.rename(f, newname)
|
||||
break
|
||||
else:
|
||||
print "%s does not exist; tombstone check skipped" % remoteDir
|
||||
else:
|
||||
print "MOZ_UPLOAD_DIR not defined; tombstone check skipped"
|
||||
|
||||
def checkForCrashes(self, directory, symbolsPath):
|
||||
self.checkForANRs()
|
||||
self.checkForTombstones()
|
||||
|
||||
logcat = self._devicemanager.getLogcat(filterOutRegexps=fennecLogcatFilters)
|
||||
javaException = mozcrash.check_for_java_exception(logcat)
|
||||
|
||||
@@ -269,6 +269,7 @@ class RemoteReftest(RefTest):
|
||||
else:
|
||||
self.SERVER_STARTUP_TIMEOUT = 90
|
||||
self.automation.deleteANRs()
|
||||
self.automation.deleteTombstones()
|
||||
|
||||
def findPath(self, paths, filename = None):
|
||||
for path in paths:
|
||||
|
||||
@@ -240,6 +240,7 @@ class MochiRemote(Mochitest):
|
||||
self.remoteLog = options.remoteLogFile
|
||||
self.localLog = options.logFile
|
||||
self._automation.deleteANRs()
|
||||
self._automation.deleteTombstones()
|
||||
self.certdbNew = True
|
||||
|
||||
# structured logging
|
||||
|
||||
Reference in New Issue
Block a user