multiple exceptions can lose too much context

Bug #1488296 reported by Robert Collins
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
testtools
Triaged
High
Unassigned

Bug Description

I had this test code:

        fixture = self.useFixture(command.get_run_command())

and when it blew up like so:

======================================================================
ERROR: testrepository.tests.test_testcommand.TestTestCommand.test_list_tests_multiple_profiles
----------------------------------------------------------------------
traceback-1: {{{
Traceback (most recent call last):
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/fixtures/fixture.py", line 208, in setUp
    raise SetupError(details)
fixtures.fixture.SetupError: {}
}}}

Traceback (most recent call last):
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/fixtures/fixture.py", line 197, in setUp
    self._setUp()
  File "testrepository/testcommand.py", line 246, in _setUp
    self._instance = self._instance_source.obtain_instance(self._profile)
  File "testrepository/testcommand.py", line 845, in obtain_instance
    out = out.decode('utf-8')
  File "/home/robertc/.virtualenvs/scratch/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb3 in position 0: invalid start byte

I couldn't tell where the failure was coming from. I haven't dug into what frame hiding was going on.

Revision history for this message
Robert Collins (lifeless) wrote :

The raw stacks:
(Pdb) sys.modules['traceback2'].print_tb(exc_info[1][0][2])
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/fixtures/fixture.py", line 197, in setUp
    self._setUp()
  File "testrepository/testcommand.py", line 246, in _setUp
    self._instance = self._instance_source.obtain_instance(self._profile)
  File "testrepository/testcommand.py", line 845, in obtain_instance
    out = out.decode('utf-8')
  File "/home/robertc/.virtualenvs/scratch/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
(Pdb) sys.modules['traceback2'].print_tb(exc_info[1][1][2])
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/fixtures/fixture.py", line 208, in setUp
    raise SetupError(details)

Which suggests we're trimming too much inside of fixtures, perhaps.

Revision history for this message
Robert Collins (lifeless) wrote :

(Pdb) sys.modules['traceback2'].print_tb(exc_info[2])
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/testtools/testcase.py", line 666, in useFixture
    fixture.setUp()
  File "testrepository/testcommand.py", line 469, in setUp
    self.test_ids = self.list_tests(self._instance_source.default_profiles)
  File "testrepository/testcommand.py", line 519, in list_tests
    ids = self._list_tests(profile)
  File "testrepository/testcommand.py", line 531, in _list_tests
    self.ui, self._instance_source, self._parser, profile) as runner:
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/fixtures/fixture.py", line 152, in __enter__
    self.setUp()
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/fixtures/fixture.py", line 212, in setUp
    raise MultipleExceptions(*errors)

so we're missing the frame that called into the fixture at this step. But - its also raising M.E., so I need to dig more.

Revision history for this message
Robert Collins (lifeless) wrote :
Download full text (4.4 KiB)

And here's the first error at the first except -
(Pdb) sys.modules['traceback2'].print_tb(err[2])
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/fixtures/fixture.py", line 197, in setUp
    self._setUp()
  File "testrepository/testcommand.py", line 246, in _setUp
    self._instance = self._instance_source.obtain_instance(self._profile)
  File "testrepository/testcommand.py", line 845, in obtain_instance
    out = out.decode('utf-8')
  File "/home/robertc/.virtualenvs/scratch/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)

...
and here it is:
(Pdb) sys.modules['traceback2'].print_stack(err[2].tb_frame)
  File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/robertc/.virtualenvs/scratch/lib/python2.7/site-packages/testtools/run.py", line 267, in <module>
    main(sys.argv, sys.stdout)
  File "/home/robertc/.virtualenvs/scratch/lib/python2.7/site-packages/testtools/run.py", line 264, in main
    stdout=stdout)
  File "/home/robertc/.virtualenvs/scratch/lib/python2.7/site-packages/testtools/run.py", line 187, in __init__
    self.runTests()
  File "/home/robertc/.virtualenvs/scratch/lib/python2.7/site-packages/testtools/run.py", line 221, in runTests
    self.result = testRunner.run(self.test)
  File "/home/robertc/.virtualenvs/scratch/lib/python2.7/site-packages/testtools/run.py", line 107, in run
    return test.run(result)
  File "/usr/lib/python2.7/unittest/suite.py", line 108, in run
    test(result)
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/unittest2/suite.py", line 87, in __call__
    return self.run(*args, **kwds)
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/unittest2/suite.py", line 126, in run
    test(result)
  File "/usr/lib/python2.7/unittest/suite.py", line 70, in __call__
    return self.run(*args, **kwds)
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/testresources/__init__.py", line 260, in run
    test(result)
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/unittest2/case.py", line 673, in __call__
    return self.run(*args, **kwds)
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/testtools/testcase.py", line 606, in run
    return run_test.run(result)
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/testtools/runtest.py", line 80, in run
    return self._run_one(actual_result)
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/testtools/runtest.py", line 94, in _run_one
    return self._run_prepared_result(ExtendedToOriginalDecorator(result))
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/testtools/runtest.py", line 108, in _run_prepared_result
    self._run_core()
  File "/home/robertc/.virtualenvs/scratch/local/lib/python2.7/site-packages/testtools/runtest.py", line 144, in _run_core
    self.case._run_test_method, self.result):
  File "/home/robe...

Read more...

Revision history for this message
Jonathan Lange (jml) wrote :

Related to #1188420 perhaps?

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.