~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_crash.py

  • Committer: John Arbash Meinel
  • Date: 2010-02-10 17:52:08 UTC
  • mfrom: (5021 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5023.
  • Revision ID: john@arbash-meinel.com-20100210175208-bubuwav4uqigu291
Merge bzr.dev 5021 to resolve NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2009, 2010, 2011 Canonical Ltd
 
1
# Copyright (C) 2009, 2010 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
 
18
 
import doctest
19
 
import os
20
18
from StringIO import StringIO
21
19
import sys
22
20
 
 
21
 
 
22
import os
 
23
 
 
24
 
23
25
from bzrlib import (
24
26
    config,
25
27
    crash,
26
28
    osutils,
27
 
    plugin,
 
29
    symbol_versioning,
28
30
    tests,
29
31
    )
30
32
 
38
40
    def test_apport_report(self):
39
41
        crash_dir = osutils.joinpath((self.test_base_dir, 'crash'))
40
42
        os.mkdir(crash_dir)
41
 
        self.overrideEnv('APPORT_CRASH_DIR', crash_dir)
 
43
        os.environ['APPORT_CRASH_DIR'] = crash_dir
42
44
        self.assertEquals(crash_dir, config.crash_dir())
43
45
 
44
 
        self.overrideAttr(
45
 
            plugin,
46
 
            'plugin_warnings',
47
 
            {'example': ['Failed to load plugin foo']})
48
 
 
49
46
        stderr = StringIO()
50
47
 
51
48
        try:
70
67
            '(?m)^BzrVersion:') # should be in the traceback
71
68
        self.assertContainsRe(report, 'my error')
72
69
        self.assertContainsRe(report, 'AssertionError')
73
 
        # see https://bugs.launchpad.net/bzr/+bug/528114
74
 
        self.assertContainsRe(report, 'ExecutablePath')
75
70
        self.assertContainsRe(report, 'test_apport_report')
76
71
        # should also be in there
77
72
        self.assertContainsRe(report, '(?m)^CommandLine:')
78
 
        self.assertContainsRe(
79
 
            report,
80
 
            'Failed to load plugin foo')
81
 
 
82
 
 
83
 
class TestNonApportReporting(tests.TestCase):
84
 
    """Reporting of crash-type bugs without apport.
85
 
    
86
 
    This should work in all environments.
87
 
    """
88
 
 
89
 
    def setup_fake_plugins(self):
90
 
        def fake_plugins():
91
 
            fake = plugin.PlugIn('fake_plugin', plugin)
92
 
            fake.version_info = lambda: (1, 2, 3)
93
 
            return {"fake_plugin": fake}
94
 
        self.overrideAttr(plugin, 'plugins', fake_plugins)
95
 
 
96
 
    def test_report_bug_legacy(self):
97
 
        self.setup_fake_plugins()
98
 
        err_file = StringIO()
99
 
        try:
100
 
            raise AssertionError("my error")
101
 
        except AssertionError, e:
102
 
            pass
103
 
        crash.report_bug_legacy(sys.exc_info(), err_file)
104
 
        report = err_file.getvalue()
105
 
        for needle in [
106
 
            "bzr: ERROR: exceptions.AssertionError: my error",
107
 
            r"Traceback \(most recent call last\):",
108
 
            r"plugins: fake_plugin\[1\.2\.3\]",
109
 
            ]:
110
 
            self.assertContainsRe(
111
 
                    report,
112
 
                    needle)