~bzr-pqm/bzr/bzr.dev

4763.2.4 by John Arbash Meinel
merge bzr.2.1 in preparation for NEWS entry.
1
# Copyright (C) 2009, 2010 Canonical Ltd
4584.3.21 by Martin Pool
Start adding tests for apport
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
17
18
from StringIO import StringIO
19
import sys
20
21
4634.128.18 by Martin Pool
Update apport crash tests
22
import os
23
24
25
from bzrlib import (
26
    config,
27
    crash,
5003.2.1 by Vincent Ladeuil
Avoid infinite recursion when probing for apport.
28
    osutils,
29
    symbol_versioning,
4660.1.1 by Vincent Ladeuil
Let user decide what command is used to run the test suite.
30
    tests,
5003.2.1 by Vincent Ladeuil
Avoid infinite recursion when probing for apport.
31
    )
32
33
from bzrlib.tests import features
34
35
36
class TestApportReporting(tests.TestCaseInTempDir):
37
38
    _test_needs_features = [features.apport]
4584.3.21 by Martin Pool
Start adding tests for apport
39
4634.128.18 by Martin Pool
Update apport crash tests
40
    def test_apport_report(self):
41
        crash_dir = osutils.joinpath((self.test_base_dir, 'crash'))
42
        os.mkdir(crash_dir)
43
        os.environ['APPORT_CRASH_DIR'] = crash_dir
44
        self.assertEquals(crash_dir, config.crash_dir())
5003.2.1 by Vincent Ladeuil
Avoid infinite recursion when probing for apport.
45
4634.128.18 by Martin Pool
Update apport crash tests
46
        stderr = StringIO()
47
4584.3.21 by Martin Pool
Start adding tests for apport
48
        try:
49
            raise AssertionError("my error")
50
        except AssertionError, e:
51
            pass
4634.128.18 by Martin Pool
Update apport crash tests
52
53
        crash_filename = crash.report_bug_to_apport(sys.exc_info(),
54
            stderr)
55
56
        # message explaining the crash
57
        self.assertContainsRe(stderr.getvalue(),
58
            "    apport-bug %s" % crash_filename)
59
60
        crash_file = open(crash_filename)
61
        try:
62
            report = crash_file.read()
63
        finally:
64
            crash_file.close()
65
66
        self.assertContainsRe(report,
67
            '(?m)^BzrVersion:') # should be in the traceback
68
        self.assertContainsRe(report, 'my error')
69
        self.assertContainsRe(report, 'AssertionError')
4797.33.9 by Martin Pool
Call apport add_proc_info to make sure necessary fields are present
70
        # see https://bugs.launchpad.net/bzr/+bug/528114
71
        self.assertContainsRe(report, 'ExecutablePath')
4634.128.18 by Martin Pool
Update apport crash tests
72
        self.assertContainsRe(report, 'test_apport_report')
4584.3.22 by Martin Pool
further tweaks to and tests of bzr apport reporting
73
        # should also be in there
4660.1.2 by Vincent Ladeuil
Review feedback, fix typo and more cleanups.
74
        self.assertContainsRe(report, '(?m)^CommandLine:')