Bug 1042097 - Upload Android tombstones to blobber; r=dminor

This commit is contained in:
Geoff Brown
2014-08-11 11:55:28 -06:00
parent 185bfe9300
commit 86d444e03c
3 changed files with 47 additions and 0 deletions

View File

@@ -2,12 +2,14 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this # 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/. # file, You can obtain one at http://mozilla.org/MPL/2.0/.
import glob
import time import time
import re import re
import os import os
import tempfile import tempfile
import shutil import shutil
import subprocess import subprocess
import sys
from automation import Automation from automation import Automation
from devicemanager import DMError from devicemanager import DMError
@@ -128,8 +130,51 @@ class RemoteAutomation(Automation):
else: else:
print "%s not found" % traces 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): def checkForCrashes(self, directory, symbolsPath):
self.checkForANRs() self.checkForANRs()
self.checkForTombstones()
logcat = self._devicemanager.getLogcat(filterOutRegexps=fennecLogcatFilters) logcat = self._devicemanager.getLogcat(filterOutRegexps=fennecLogcatFilters)
javaException = mozcrash.check_for_java_exception(logcat) javaException = mozcrash.check_for_java_exception(logcat)

View File

@@ -269,6 +269,7 @@ class RemoteReftest(RefTest):
else: else:
self.SERVER_STARTUP_TIMEOUT = 90 self.SERVER_STARTUP_TIMEOUT = 90
self.automation.deleteANRs() self.automation.deleteANRs()
self.automation.deleteTombstones()
def findPath(self, paths, filename = None): def findPath(self, paths, filename = None):
for path in paths: for path in paths:

View File

@@ -240,6 +240,7 @@ class MochiRemote(Mochitest):
self.remoteLog = options.remoteLogFile self.remoteLog = options.remoteLogFile
self.localLog = options.logFile self.localLog = options.logFile
self._automation.deleteANRs() self._automation.deleteANRs()
self._automation.deleteTombstones()
self.certdbNew = True self.certdbNew = True
# structured logging # structured logging