aboutsummaryrefslogtreecommitdiff
path: root/src/test/bt_test.py
blob: f9ca79efde84802a242b3ec3377923f55fae89f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# Copyright 2013-2019, The Tor Project, Inc
# See LICENSE for licensing information

"""
bt_test.py

This file tests the output from test-bt-cl to make sure it's as expected.

Example usage:

$ ./src/test/test-bt-cl crash | ./src/test/bt_test.py
OK
$ ./src/test/test-bt-cl assert | ./src/test/bt_test.py
OK

"""

from __future__ import print_function
import sys


def matches(lines, funcs):
    if len(lines) < len(funcs):
        return False
    try:
        for l, f in zip(lines, funcs):
            l.index(f)
    except ValueError:
        return False
    else:
        return True

FUNCNAMES = "crash oh_what a_tangled_web we_weave main".split()

LINES = sys.stdin.readlines()

for I in range(len(LINES)):
    if matches(LINES[I:], FUNCNAMES):
        print("OK")
        sys.exit(0)

print("BAD")

for l in LINES:
    print("{}".format(l), end="")

if (sys.platform.startswith('freebsd') or sys.platform.startswith('netbsd') or
    sys.platform.startswith('openbsd') or sys.platform.startswith('darwin')):
    # See bug #17808 if you know how to fix backtraces on BSD-derived systems
    print("Test failed; but {} is known to have backtrace problems."
          .format(sys.platform))
    print("Treating as 'SKIP'.")
    sys.exit(77)

sys.exit(1)