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
|
# 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)
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user