Merge lp:~jml/launchpad/still-more-tests-for-ec2 into lp:launchpad

Proposed by Jonathan Lange
Status: Merged
Approved by: Eleanor Berger
Approved revision: no longer in the source branch.
Merged at revision: 10840
Proposed branch: lp:~jml/launchpad/still-more-tests-for-ec2
Merge into: lp:launchpad
Diff against target: 91 lines (+47/-2)
2 files modified
lib/devscripts/ec2test/remote.py (+4/-2)
lib/devscripts/ec2test/tests/test_remote.py (+43/-0)
To merge this branch: bzr merge lp:~jml/launchpad/still-more-tests-for-ec2
Reviewer Review Type Date Requested Status
Eleanor Berger (community) Approve
Review via email: mp+24503@code.launchpad.net

Commit message

Include all of the make output in the body of ec2 mail. Add some unrelated unit tests for ec2 test.

Description of the change

Hello reviewer,

This branch adds a couple more tests for the ec2-side of ec2test and "fixes" an issue where error messages that occurred during 'make' but before the actual test run were not included in the email body, but instead included in the attachment.

A typical email for a successful test run is pasted below. It's got way too much information in it (whatever happened to "don't make me think"?), but I figure that it shouldn't be the job of the ec2 testing framework to make it less so.

jml

Tests started at approximately Fri, 30 Apr 2010 11:12:58 UTC
bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/launchpad/devel/, revision 10825

Merged with
bzr+ssh://bazaar.launchpad.net/~jml/launchpad/still-more-tests-for-ec2, revision 10797 (commit message: Include the full makefile. Point to the attachment)

DEPENDENCY BRANCHES USED

- lpreview
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/bzr-lpreview/devel/
   23

- testresources
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/testresources/dev/
   16

- launchpad-loggerhead
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/launchpad-loggerhead/devel/
   54

- dulwich
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/dulwich/devel/
   418

- bzr-builder
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/bzr-builder/trunk/
   64

- bzr-loom
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/bzr-loom/trunk/
   47

- bzr-svn
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/bzr-svn/devel/
   2708

- pygpgme
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/pygpgme/devel/
   49

- shipit
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/shipit/trunk/
   8905

- pygettextpo
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/pygettextpo/trunk/
   23

- bzr-git
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/bzr-git/devel/
   253

- old_xmlplus
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/dtdparser/trunk/
   4

- subvertpy
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/subvertpy/trunk/
   2040

- mailman
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/mailman/2.1/
   976

- loggerhead
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/loggerhead/devel/
   176

- cscvs
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/launchpad-cscvs/devel/
   432

- bzr-hg
   bzr+ssh://bazaar.launchpad.net/~launchpad-pqm/bzr-hg/devel/
   281

TEST RESULTS FOLLOW

rm -f lib/canonical/launchpad/icing/build/launchpad.js
rm -f -r lazr-js/build
make -C sourcecode/pygettextpo clean
make[1]: Entering directory `/var/launchpad/tmp/sourcecode/pygettextpo'
rm -rf build dist gettextpo.so gettextpo.html
make[1]: Leaving directory `/var/launchpad/tmp/sourcecode/pygettextpo'
# XXX gary 2009-11-16 bug 483782
# The pygettextpo Makefile should have this next line in it for its make
# clean, and then we should remove this line.
rm -f sourcecode/pygpgme/gpgme/*.so
if test -f sourcecode/mailman/Makefile; then \
               make -C sourcecode/mailman clean; \
       fi
find . -path ./eggs -prune -false -o \
               -type f \( -name '*.o' -o -name '*.so' -o -name '*.la' -o \
           -name '*.lo' -o -name '*.py[co]' -o -name '*.dll' \) \
           -print0 | xargs -r0 rm -f
rm -f -r bin
rm -f -r parts
rm -f -r develop-eggs
rm -f .installed.cfg
rm -f -r build
rm -f thread*.request
rm -f -r lib/mailman
rm -f -rf lib/canonical/launchpad/icing/build/*
rm -f -r /var/tmp/bazaar.launchpad.dev
rm -f lib/canonical/launchpad/apidoc/wadl*.xml lib/canonical/launchpad/apidoc/*.html
rm -f -rf lib/canonical/launchpad/apidoc.tmp
rm -f bzr-version-info.py
rm -f _pythonpath.py
rm -f +config-overrides.zcml
rm -f -rf \
                         /var/tmp/builddmaster \
                         /var/tmp/bzrsync \
                         /var/tmp/codehosting.test \
                         /var/tmp/codeimport \
                         /var/tmp/fatsam.appserver \
                         /var/tmp/lperr \
                         /var/tmp/lperr.test \
                         /var/tmp/mailman \
                         /var/tmp/mailman-xmlrpc.test \
                         /var/tmp/ppa \
                         /var/tmp/ppa.test \
                         /var/tmp/zeca
# /var/tmp/launchpad_mailqueue is created read-only on ec2test
# instances.
if [ -w /var/tmp/launchpad_mailqueue ]; then rm -f -rf /var/tmp/launchpad_mailqueue; fi
rm -f -f lp.sfood lp-clustered.sfood lp-clustered.dot lp-clustered.svg
utilities/shhh.py PYTHONPATH= python2.5 bootstrap.py\
               --setup-source=ez_setup.py \
               --download-base=download-cache/dist --eggs=eggs
rm -f /var/launchpad/test/bin/py
utilities/shhh.py PYTHONPATH= ./bin/buildout \
               configuration:instance_name=development -c buildout.cfg
scripts/update-bzr-version-info.sh
Creating bzr-version-info.py at revno 10825
utilities/shhh.py make -C sourcecode build PYTHON=python2.5 \
           PYTHON_VERSION=2.5 LPCONFIG=development
utilities/shhh.py LPCONFIG=development /var/launchpad/test/bin/py -t buildmailman.py
mkdir -p lib/canonical/launchpad/apidoc.tmp
LPCONFIG=development /var/launchpad/test/bin/py ./utilities/create-lp-wadl-and-apidoc.py "lib/canonical/launchpad/apidoc.tmp/wadl-development-%(version)s.xml"
Unknown entry URL:
                   archive_dependency
Unknown entry URL:
                   archive_subscriber
Unknown entry URL:
                   binary_package_release_download_count
Unknown entry URL:
                   branch_subscription
Unknown entry URL:
                   bug_branch
Unknown entry URL:
                   bug_nomination
Unknown entry URL:
                   code_import
Unknown entry URL:
                   code_review_comment
Unknown entry URL:
                   code_review_vote_reference
Unknown entry URL:
                   country
Unknown entry URL:
                   distribution_mirror
Unknown entry URL:
                   gpg_key
Unknown entry URL:
                   h_w_driver_name
Unknown entry URL:
                   h_w_driver_package_name
Unknown entry URL:
                   hwdb
Unknown entry URL:
                   object_with_translation_imports
Unknown entry URL:
                   package_upload
Unknown entry URL:
                   packageset
Unknown entry URL:
                   preview_diff
Unknown entry URL:
                   source_package_recipe
Unknown entry URL:
                   source_package_recipe_build
Unknown entry URL:
                   specification
Unknown entry URL:
                   specification_branch
Unknown entry URL:
                   ssh_key
Unknown entry URL:
                   structural_subscription
Unknown entry URL:
                   structural_subscription_target
Unknown entry URL:
                   temporary_blob
Unknown entry URL:
                   translation_import_queue_entry
Unknown entry URL:
                   archive_dependency
Unknown entry URL:
                   archive_subscriber
Unknown entry URL:
                   binary_package_release_download_count
Unknown entry URL:
                   branch_subscription
Unknown entry URL:
                   bug_branch
Unknown entry URL:
                   bug_nomination
Unknown entry URL:
                   code_import
Unknown entry URL:
                   code_review_comment
Unknown entry URL:
                   code_review_vote_reference
Unknown entry URL:
                   country
Unknown entry URL:
                   distribution_mirror
Unknown entry URL:
                   gpg_key
Unknown entry URL:
                   h_w_driver_name
Unknown entry URL:
                   h_w_driver_package_name
Unknown entry URL:
                   hwdb
Unknown entry URL:
                   object_with_translation_imports
Unknown entry URL:
                   package_upload
Unknown entry URL:
                   packageset
Unknown entry URL:
                   preview_diff
Unknown entry URL:
                   source_package_recipe
Unknown entry URL:
                   source_package_recipe_build
Unknown entry URL:
                   specification
Unknown entry URL:
                   specification_branch
Unknown entry URL:
                   ssh_key
Unknown entry URL:
                   structural_subscription
Unknown entry URL:
                   structural_subscription_target
Unknown entry URL:
                   temporary_blob
Unknown entry URL:
                   translation_import_queue_entry
Writing WADL for version beta to lib/canonical/launchpad/apidoc.tmp/wadl-development-beta.xml.
Writing apidoc for version beta to lib/canonical/launchpad/apidoc.tmp/beta.html
Writing WADL for version 1.0 to lib/canonical/launchpad/apidoc.tmp/wadl-development-1.0.xml.
Writing apidoc for version 1.0 to lib/canonical/launchpad/apidoc.tmp/1.0.html
Writing WADL for version devel to lib/canonical/launchpad/apidoc.tmp/wadl-development-devel.xml.
Writing apidoc for version devel to lib/canonical/launchpad/apidoc.tmp/devel.html
Unknown entry URL:
                   archive_dependency
Unknown entry URL:
                   archive_subscriber
Unknown entry URL:
                   binary_package_release_download_count
Unknown entry URL:
                   branch_subscription
Unknown entry URL:
                   bug_branch
Unknown entry URL:
                   bug_nomination
Unknown entry URL:
                   code_import
Unknown entry URL:
                   code_review_comment
Unknown entry URL:
                   code_review_vote_reference
Unknown entry URL:
                   country
Unknown entry URL:
                   distribution_mirror
Unknown entry URL:
                   gpg_key
Unknown entry URL:
                   h_w_driver_name
Unknown entry URL:
                   h_w_driver_package_name
Unknown entry URL:
                   hwdb
Unknown entry URL:
                   object_with_translation_imports
Unknown entry URL:
                   package_upload
Unknown entry URL:
                   packageset
Unknown entry URL:
                   preview_diff
Unknown entry URL:
                   source_package_recipe
Unknown entry URL:
                   source_package_recipe_build
Unknown entry URL:
                   specification
Unknown entry URL:
                   specification_branch
Unknown entry URL:
                   ssh_key
Unknown entry URL:
                   structural_subscription
Unknown entry URL:
                   structural_subscription_target
Unknown entry URL:
                   temporary_blob
Unknown entry URL:
                   translation_import_queue_entry
mv lib/canonical/launchpad/apidoc.tmp/* lib/canonical/launchpad/apidoc
rmdir lib/canonical/launchpad/apidoc.tmp
# We absolutely do not want to include the lazr.testing module and its
# jsTestDriver test harness modifications in the lazr.js and launchpad.js
# roll-up files. They fiddle with built-in functions! See Bug 482340.
utilities/shhh.py bin/jsbuild -b lazr-js/build -x testing/ -c lazr-js/build/yui
utilities/shhh.py bin/jsbuild \
                \
               -n launchpad \
               -s lib/canonical/launchpad/javascript \
               -b lib/canonical/launchpad/icing/build \
               /var/launchpad/test/lib/canonical/launchpad/icing/yui/yui/yui-base-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/yui/yui-log-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/yui/yui-later-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/oop/oop-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/event/event-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/event/event-key-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/event-custom/event-custom-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/event-simulate/event-simulate-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/dom/dom-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/node/node-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/node-focusmanager/node-focusmanager-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/node/node-event-simulate-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/dump/dump-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/io/io-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/json/json-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/attribute/attribute-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/base/base-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/substitute/substitute-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/anim/anim-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/classnamemanager/classnamemanager-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/plugin/plugin-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/pluginhost/pluginhost-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/widget/widget-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/widget/widget-position-ext-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/cookie/cookie-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/widget/widget-position-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/widget/widget-position-ext-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/widget/widget-stack-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/widget/widget-stdmod-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/overlay/overlay-min.js /var/launchpad/test/lib/canonical/launchpad/icing/yui/node-menunav/node-menunav-min.js \
               /var/launchpad/test/lib/lp/code/javascript/branch.bugspeclinks.js /var/launchpad/test/lib/lp/code/javascript/branchmergeproposal.reviewcomment.js /var/launchpad/test/lib/lp/code/javascript/branchmergeproposal.status.js /var/launchpad/test/lib/lp/code/javascript/productseries-setbranch.js /var/launchpad/test/lib/lp/code/javascript/branch.subscription.js /var/launchpad/test/lib/lp/code/javascript/branch.status.js /var/launchpad/test/lib/lp/code/javascript/branchmergeproposal.diff.js \
               lib/canonical/launchpad/icing/lazr/build/lazr.js
utilities/shhh.py bin/jssize
utilities/shhh.py bin/sprite-util create-css
utilities/shhh.py bin/combine-css
# Run all tests. test_on_merge.py takes care of setting up the
# database.
/var/launchpad/test/bin/py -t ./test_on_merge.py --subunit -vvv
2010-04-30 11:22:04 INFO Applying patches to unreplicated environment.
2010-04-30 11:22:04 INFO Applying trusted.sql
2010-04-30 11:22:04 INFO Applying patch-2207-00-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-00-1.sql
2010-04-30 11:22:04 INFO Applying patch-2207-00-2.sql
2010-04-30 11:22:04 INFO Applying patch-2207-00-3.sql
2010-04-30 11:22:04 INFO Applying patch-2207-01-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-02-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-03-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-04-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-05-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-06-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-08-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-09-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-10-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-11-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-12-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-14-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-15-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-15-1.sql
2010-04-30 11:22:04 INFO Applying patch-2207-16-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-17-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-18-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-19-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-19-1.sql
2010-04-30 11:22:04 INFO Applying patch-2207-20-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-21-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-23-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-24-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-25-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-26-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-27-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-28-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-28-1.sql
2010-04-30 11:22:04 INFO Applying patch-2207-29-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-30-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-31-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-32-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-33-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-34-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-35-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-35-1.sql
2010-04-30 11:22:04 INFO Applying patch-2207-35-2.sql
2010-04-30 11:22:04 INFO Applying patch-2207-36-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-37-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-38-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-39-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-40-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-41-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-42-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-43-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-44-0.sql
2010-04-30 11:22:04 INFO Applying patch-2207-45-0.sql
2010-04-30 11:22:04 INFO Applying comments.sql
2010-04-30 11:22:43 WARNING No permissions specified for [u'public.lp_account', u'public.lp_teamparticipation', u'public.lp_personlocation', u'public.bug_update_latest_patch_uploaded(integer)', u'public.lp_person']
Running tests.
xvfb-run -s '-screen 0 1024x768x24' /var/launchpad/test/bin/test --subunit -vvv

No handlers could be found for logger "lazr.smtptest"
No handlers could be found for logger "lazr.smtptest"
No handlers could be found for logger "lazr.smtptest"

Started ['/tmp/tmp9408Kx.mozrunner/mozrunner-firefox', '-profile', '/tmp/tmp9408Kx.mozrunner', 'http://bugs.launchpad.dev:8085/windmill-serv/start.html']
No handlers could be found for logger "lazr.smtptest"

Started ['/tmp/tmpUCaXGu.mozrunner/mozrunner-firefox', '-profile', '/tmp/tmpUCaXGu.mozrunner', 'http://code.launchpad.dev:8085/windmill-serv/start.html']
No handlers could be found for logger "lazr.smtptest"
No handlers could be found for logger "lazr.smtptest"

Started ['/tmp/tmpgbsfyH.mozrunner/mozrunner-firefox', '-profile', '/tmp/tmpgbsfyH.mozrunner', 'http://launchpad.dev:8085/windmill-serv/start.html']
No handlers could be found for logger "lazr.smtptest"

Started ['/tmp/tmphwYsyb.mozrunner/mozrunner-firefox', '-profile', '/tmp/tmphwYsyb.mozrunner', 'http://launchpad.dev:8085/windmill-serv/start.html']
No handlers could be found for logger "lazr.smtptest"

Started ['/tmp/tmpKNdZ4u.mozrunner/mozrunner-firefox', '-profile', '/tmp/tmpKNdZ4u.mozrunner', 'http://translations.launchpad.dev:8085/windmill-serv/start.html']
No handlers could be found for logger "lazr.smtptest"
Iterating with success flag 0 against

To post a comment you must log in.
Revision history for this message
Eleanor Berger (intellectronica) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/devscripts/ec2test/remote.py'
2--- lib/devscripts/ec2test/remote.py 2010-04-28 11:37:02 +0000
3+++ lib/devscripts/ec2test/remote.py 2010-05-09 12:56:33 +0000
4@@ -190,6 +190,9 @@
5 conn.send_email(self.pqm_message)
6 summary_file.write(
7 '\n\nSUBMITTED TO PQM:\n%s\n' % (subject,))
8+
9+ summary_file.write(
10+ '\n(See the attached file for the complete log)\n')
11 except:
12 summary_file.write('\n\nERROR IN TESTRUNNER\n\n')
13 traceback.print_exc(file=summary_file)
14@@ -259,8 +262,7 @@
15 # Only write to stdout if we are running as the foreground process.
16 echo_to_stdout = not self.daemonized
17 result = SummaryResult(summary_file)
18- subunit_server = subunit.TestProtocolServer(
19- result, FlagFallStream(summary_file, 'Running tests.'))
20+ subunit_server = subunit.TestProtocolServer(result, summary_file)
21 for line in input_stream:
22 subunit_server.lineReceived(line)
23 out_file.write(line)
24
25=== modified file 'lib/devscripts/ec2test/tests/test_remote.py'
26--- lib/devscripts/ec2test/tests/test_remote.py 2010-04-28 11:59:31 +0000
27+++ lib/devscripts/ec2test/tests/test_remote.py 2010-05-09 12:56:33 +0000
28@@ -6,6 +6,7 @@
29 __metaclass__ = type
30
31 from StringIO import StringIO
32+import sys
33 import unittest
34
35 from devscripts.ec2test.remote import SummaryResult
36@@ -14,6 +15,14 @@
37 class TestSummaryResult(unittest.TestCase):
38 """Tests for `SummaryResult`."""
39
40+ def makeException(self, factory=None, *args, **kwargs):
41+ if factory is None:
42+ factory = RuntimeError
43+ try:
44+ raise factory(*args, **kwargs)
45+ except:
46+ return sys.exc_info()
47+
48 def test_printError(self):
49 # SummaryResult.printError() prints out the name of the test, the kind
50 # of error and the details of the error in a nicely-formatted way.
51@@ -24,6 +33,40 @@
52 result.double_line, result.single_line)
53 self.assertEqual(expected, stream.getvalue())
54
55+ def test_addError(self):
56+ # SummaryResult.addError() prints a nicely-formatted error.
57+ #
58+ # First, use printError to build the error text we expect.
59+ test = self
60+ stream = StringIO()
61+ result = SummaryResult(stream)
62+ error = self.makeException()
63+ result.printError(
64+ 'ERROR', test, result._exc_info_to_string(error, test))
65+ expected = stream.getvalue()
66+ # Now, call addError and check that it matches.
67+ stream = StringIO()
68+ result = SummaryResult(stream)
69+ result.addError(test, error)
70+ self.assertEqual(expected, stream.getvalue())
71+
72+ def test_addFailure(self):
73+ # SummaryResult.addFailure() prints a nicely-formatted error.
74+ #
75+ # First, use printError to build the error text we expect.
76+ test = self
77+ stream = StringIO()
78+ result = SummaryResult(stream)
79+ error = self.makeException(test.failureException)
80+ result.printError(
81+ 'FAILURE', test, result._exc_info_to_string(error, test))
82+ expected = stream.getvalue()
83+ # Now, call addFailure and check that it matches.
84+ stream = StringIO()
85+ result = SummaryResult(stream)
86+ result.addFailure(test, error)
87+ self.assertEqual(expected, stream.getvalue())
88+
89
90 def test_suite():
91 return unittest.TestLoader().loadTestsFromName(__name__)