diff options
Diffstat (limited to 'testing/tps/tps/phase.py')
-rw-r--r-- | testing/tps/tps/phase.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/testing/tps/tps/phase.py b/testing/tps/tps/phase.py new file mode 100644 index 000000000..397c90796 --- /dev/null +++ b/testing/tps/tps/phase.py @@ -0,0 +1,69 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# 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 re + +class TPSTestPhase(object): + + lineRe = re.compile( + r'^(.*?)test phase (?P<matchphase>[^\s]+): (?P<matchstatus>.*)$') + + def __init__(self, phase, profile, testname, testpath, logfile, env, + firefoxRunner, logfn, ignore_unused_engines=False): + self.phase = phase + self.profile = profile + self.testname = str(testname) # this might be passed in as unicode + self.testpath = testpath + self.logfile = logfile + self.env = env + self.firefoxRunner = firefoxRunner + self.log = logfn + self.ignore_unused_engines = ignore_unused_engines + self._status = None + self.errline = '' + + @property + def status(self): + return self._status if self._status else 'unknown' + + def run(self): + # launch Firefox + args = [ '-tps', self.testpath, + '-tpsphase', self.phase, + '-tpslogfile', self.logfile ] + + if self.ignore_unused_engines: + args.append('--ignore-unused-engines') + + self.log('\nLaunching Firefox for phase %s with args %s\n' % + (self.phase, str(args))) + self.firefoxRunner.run(env=self.env, + args=args, + profile=self.profile) + + # parse the logfile and look for results from the current test phase + found_test = False + f = open(self.logfile, 'r') + for line in f: + + # skip to the part of the log file that deals with the test we're running + if not found_test: + if line.find('Running test %s' % self.testname) > -1: + found_test = True + else: + continue + + # look for the status of the current phase + match = self.lineRe.match(line) + if match: + if match.group('matchphase') == self.phase: + self._status = match.group('matchstatus') + break + + # set the status to FAIL if there is TPS error + if line.find('CROSSWEAVE ERROR: ') > -1 and not self._status: + self._status = 'FAIL' + self.errline = line[line.find('CROSSWEAVE ERROR: ') + len('CROSSWEAVE ERROR: '):] + + f.close() |