annotate tests/basic_test_result.py @ 38935:27a54096c92e

linelog: fix infinite loop vulnerability Checking `len(lines)` is not a great way of detecting infinite loops, as demonstrated in the added test. Therefore check instruction count instead. The original C implementation does not have this problem. There are a few other places where the C implementation enforces more strictly, like `a1 <= a2`, `b1 <= b2`, `rev > 0`. But they are optional. Test Plan: Add a test. The old code forces the test to time out. Differential Revision: https://phab.mercurial-scm.org/D4151
author Jun Wu <quark@fb.com>
date Mon, 06 Aug 2018 22:24:00 -0700
parents f4a214300957
children 2372284d9457
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38621
f4a214300957 run-tests: add missing life-cycle methods on the example custom test result
Boris Feld <boris.feld@octobus.net>
parents: 38616
diff changeset
1 from __future__ import absolute_import, print_function
38616
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
2
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
3 import unittest
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
4
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
5 class TestResult(unittest._TextTestResult):
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
6
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
7 def __init__(self, options, *args, **kwargs):
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
8 super(TestResult, self).__init__(*args, **kwargs)
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
9 self._options = options
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
10
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
11 # unittest.TestResult didn't have skipped until 2.7. We need to
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
12 # polyfill it.
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
13 self.skipped = []
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
14
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
15 # We have a custom "ignored" result that isn't present in any Python
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
16 # unittest implementation. It is very similar to skipped. It may make
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
17 # sense to map it into skip some day.
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
18 self.ignored = []
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
19
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
20 self.times = []
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
21 self._firststarttime = None
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
22 # Data stored for the benefit of generating xunit reports.
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
23 self.successes = []
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
24 self.faildata = {}
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
25
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
26 def addFailure(self, test, reason):
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
27 print("FAILURE!", test, reason)
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
28
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
29 def addSuccess(self, test):
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
30 print("SUCCESS!", test)
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
31
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
32 def addError(self, test, err):
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
33 print("ERR!", test, err)
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
34
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
35 # Polyfill.
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
36 def addSkip(self, test, reason):
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
37 print("SKIP!", test, reason)
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
38
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
39 def addIgnore(self, test, reason):
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
40 print("IGNORE!", test, reason)
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
41
38621
f4a214300957 run-tests: add missing life-cycle methods on the example custom test result
Boris Feld <boris.feld@octobus.net>
parents: 38616
diff changeset
42 def onStart(self, test):
f4a214300957 run-tests: add missing life-cycle methods on the example custom test result
Boris Feld <boris.feld@octobus.net>
parents: 38616
diff changeset
43 print("ON_START!", test)
f4a214300957 run-tests: add missing life-cycle methods on the example custom test result
Boris Feld <boris.feld@octobus.net>
parents: 38616
diff changeset
44
f4a214300957 run-tests: add missing life-cycle methods on the example custom test result
Boris Feld <boris.feld@octobus.net>
parents: 38616
diff changeset
45 def onEnd(self):
f4a214300957 run-tests: add missing life-cycle methods on the example custom test result
Boris Feld <boris.feld@octobus.net>
parents: 38616
diff changeset
46 print("ON_END!")
f4a214300957 run-tests: add missing life-cycle methods on the example custom test result
Boris Feld <boris.feld@octobus.net>
parents: 38616
diff changeset
47
38616
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
48 def addOutputMismatch(self, test, ret, got, expected):
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
49 return False
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
50
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
51 def stopTest(self, test, interrupted=False):
c44ae5997869 run-tests: add support for external test result
Boris Feld <boris.feld@octobus.net>
parents:
diff changeset
52 super(TestResult, self).stopTest(test)