~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_trace.py

  • Committer: Martin
  • Date: 2010-05-03 20:57:39 UTC
  • mto: This revision was merged to the branch mainline in revision 5204.
  • Revision ID: gzlist@googlemail.com-20100503205739-n326zdvevv0rmruh
Retain original stack and error message when translating to ValueError in bencode

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011 Canonical Ltd
 
1
# Copyright (C) 2005-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
20
20
 
21
21
from cStringIO import StringIO
22
22
import errno
23
 
import logging
24
23
import os
25
24
import re
26
25
import sys
27
26
import tempfile
28
27
 
29
28
from bzrlib import (
30
 
    debug,
31
29
    errors,
32
30
    trace,
33
31
    )
34
 
from bzrlib.tests import features, TestCaseInTempDir, TestCase
 
32
from bzrlib.tests import TestCaseInTempDir, TestCase
35
33
from bzrlib.trace import (
36
34
    mutter, mutter_callsite, report_exception,
37
35
    set_verbosity_level, get_verbosity_level, is_quiet, is_verbose, be_quiet,
83
81
            pass
84
82
        msg = _format_exception()
85
83
        self.assertEquals(msg,
86
 
            "bzr: out of memory\nUse -Dmem_dump to dump memory to a file.\n")
87
 
 
88
 
    def test_format_mem_dump(self):
89
 
        self.requireFeature(features.meliae)
90
 
        debug.debug_flags.add('mem_dump')
91
 
        try:
92
 
            raise MemoryError()
93
 
        except MemoryError:
94
 
            pass
95
 
        msg = _format_exception()
96
 
        self.assertStartsWith(msg,
97
 
            "bzr: out of memory\nMemory dumped to ")
 
84
            "bzr: out of memory\n")
98
85
 
99
86
    def test_format_os_error(self):
100
87
        try:
114
101
        msg = _format_exception()
115
102
        # Even though Windows and Linux differ for 'os.rmdir', they both give
116
103
        # 'No such file' for open()
117
 
        # However it now gets translated so we can not test for a specific message
118
 
        self.assertContainsRe(msg,
119
 
            r'^bzr: ERROR: \[Errno .*\] .*nosuchfile')
120
 
 
121
 
    def test_format_pywintypes_error(self):
122
 
        self.requireFeature(features.pywintypes)
123
 
        import pywintypes, win32file
124
 
        try:
125
 
            win32file.RemoveDirectory('nosuchfile22222')
126
 
        except pywintypes.error:
127
 
            pass
128
 
        msg = _format_exception()
129
 
        # GZ 2010-05-03: Formatting for pywintypes.error is basic, a 3-tuple
130
 
        #                with errno, function name, and locale error message
131
 
        self.assertContainsRe(msg,
132
 
            r"^bzr: ERROR: \(2, 'RemoveDirectory[AW]?', .*\)")
133
 
            
134
 
    def test_format_sockets_error(self):
135
 
        try:
136
 
            import socket
137
 
            sock = socket.socket()
138
 
            sock.send("This should fail.")
139
 
        except socket.error:
140
 
            pass
141
 
        msg = _format_exception()
142
 
        
143
 
        self.assertNotContainsRe(msg,
144
 
            r"Traceback (most recent call last):")
 
104
        self.assertContainsRe(msg,
 
105
            r'^bzr: ERROR: \[Errno .*\] No such file.*nosuchfile')
145
106
 
146
107
    def test_format_unicode_error(self):
147
108
        try:
255
216
        # have to do a replaceent here as well.
256
217
        self.assertContainsRe(log, "ascii argument: \xb5".decode('utf8',
257
218
            'replace'))
258
 
 
 
219
        
259
220
    def test_show_error(self):
260
221
        show_error('error1')
261
222
        show_error(u'error2 \xb5 blah')
315
276
        # set up.
316
277
        self.overrideAttr(sys, 'stderr', StringIO())
317
278
        # Set the log file to something that cannot exist
318
 
        self.overrideEnv('BZR_LOG', os.getcwd() + '/no-dir/bzr.log')
 
279
        # FIXME: A bit dangerous: we are not in an isolated dir here -- vilajam
 
280
        # 20100125
 
281
        os.environ['BZR_LOG'] = os.getcwd() + '/no-dir/bzr.log'
319
282
        self.overrideAttr(trace, '_bzr_log_filename')
320
283
        logf = trace._open_bzr_log()
321
284
        self.assertIs(None, logf)
347
310
        self.assertEqual(0, get_verbosity_level())
348
311
 
349
312
 
350
 
class TestLogging(TestCase):
351
 
    """Check logging functionality robustly records information"""
352
 
 
353
 
    def test_note(self):
354
 
        trace.note("Noted")
355
 
        self.assertEqual("    INFO  Noted\n", self.get_log())
356
 
 
357
 
    def test_warning(self):
358
 
        trace.warning("Warned")
359
 
        self.assertEqual(" WARNING  Warned\n", self.get_log())
360
 
 
361
 
    def test_log(self):
362
 
        logging.getLogger("bzr").error("Errored")
363
 
        self.assertEqual("   ERROR  Errored\n", self.get_log())
364
 
 
365
 
    def test_log_sub(self):
366
 
        logging.getLogger("bzr.test_log_sub").debug("Whispered")
367
 
        self.assertEqual("   DEBUG  Whispered\n", self.get_log())
368
 
 
369
 
    def test_log_unicode_msg(self):
370
 
        logging.getLogger("bzr").debug(u"\xa7")
371
 
        self.assertEqual(u"   DEBUG  \xa7\n", self.get_log())
372
 
 
373
 
    def test_log_unicode_arg(self):
374
 
        logging.getLogger("bzr").debug("%s", u"\xa7")
375
 
        self.assertEqual(u"   DEBUG  \xa7\n", self.get_log())
376
 
 
377
 
    def test_log_utf8_msg(self):
378
 
        logging.getLogger("bzr").debug("\xc2\xa7")
379
 
        self.assertEqual(u"   DEBUG  \xa7\n", self.get_log())
380
 
 
381
 
    def test_log_utf8_arg(self):
382
 
        logging.getLogger("bzr").debug("%s", "\xc2\xa7")
383
 
        self.assertEqual(u"   DEBUG  \xa7\n", self.get_log())
384
 
 
385
 
    def test_log_bytes_msg(self):
386
 
        logging.getLogger("bzr").debug("\xa7")
387
 
        log = self.get_log()
388
 
        self.assertContainsString(log, "UnicodeDecodeError: ")
389
 
        self.assertContainsString(log,
390
 
            "Logging record unformattable: '\\xa7' % ()\n")
391
 
 
392
 
    def test_log_bytes_arg(self):
393
 
        logging.getLogger("bzr").debug("%s", "\xa7")
394
 
        log = self.get_log()
395
 
        self.assertContainsString(log, "UnicodeDecodeError: ")
396
 
        self.assertContainsString(log,
397
 
            "Logging record unformattable: '%s' % ('\\xa7',)\n")
398
 
 
399
 
    def test_log_mixed_strings(self):
400
 
        logging.getLogger("bzr").debug(u"%s", "\xa7")
401
 
        log = self.get_log()
402
 
        self.assertContainsString(log, "UnicodeDecodeError: ")
403
 
        self.assertContainsString(log,
404
 
            "Logging record unformattable: u'%s' % ('\\xa7',)\n")
405
 
 
406
 
    def test_log_repr_broken(self):
407
 
        class BadRepr(object):
408
 
            def __repr__(self):
409
 
                raise ValueError("Broken object")
410
 
        logging.getLogger("bzr").debug("%s", BadRepr())
411
 
        log = self.get_log()
412
 
        self.assertContainsRe(log, "ValueError: Broken object\n")
413
 
        self.assertContainsRe(log, "Logging record unformattable: '%s' % .*\n")
414
 
 
415
 
 
416
313
class TestBzrLog(TestCaseInTempDir):
417
314
 
418
315
    def test_log_rollover(self):
423
320
        _rollover_trace_maybe(temp_log_name)
424
321
        # should have been rolled over
425
322
        self.assertFalse(os.access(temp_log_name, os.R_OK))
426
 
 
427
 
 
428
 
class TestTraceConfiguration(TestCaseInTempDir):
429
 
 
430
 
    def test_default_config(self):
431
 
        config = trace.DefaultConfig()
432
 
        self.overrideAttr(trace, "_bzr_log_filename", None)
433
 
        trace._bzr_log_filename = None
434
 
        expected_filename = trace._get_bzr_log_filename()
435
 
        self.assertEqual(None, trace._bzr_log_filename)
436
 
        config.__enter__()
437
 
        try:
438
 
            # Should have entered and setup a default filename.
439
 
            self.assertEqual(expected_filename, trace._bzr_log_filename)
440
 
        finally:
441
 
            config.__exit__(None, None, None)
442
 
            # Should have exited and cleaned up.
443
 
            self.assertEqual(None, trace._bzr_log_filename)