summaryrefslogtreecommitdiff
path: root/Mailman/bin/testall.py
diff options
context:
space:
mode:
authorbwarsaw2007-04-17 21:37:49 +0000
committerbwarsaw2007-04-17 21:37:49 +0000
commitcca5c6b455aa894078573f45f3dd2c0901e0103e (patch)
treeb0e3c481fae7bb44c9c27c258735f8318cadb530 /Mailman/bin/testall.py
parent69b250129cac1edc2aef339127bdd9446b8ee5e7 (diff)
downloadmailman-cca5c6b455aa894078573f45f3dd2c0901e0103e.tar.gz
mailman-cca5c6b455aa894078573f45f3dd2c0901e0103e.tar.zst
mailman-cca5c6b455aa894078573f45f3dd2c0901e0103e.zip
Diffstat (limited to 'Mailman/bin/testall.py')
-rw-r--r--Mailman/bin/testall.py59
1 files changed, 51 insertions, 8 deletions
diff --git a/Mailman/bin/testall.py b/Mailman/bin/testall.py
index 61fa98dd8..b6dc07ec2 100644
--- a/Mailman/bin/testall.py
+++ b/Mailman/bin/testall.py
@@ -17,15 +17,26 @@
"""Mailman unit test driver."""
+from __future__ import with_statement
+
import os
import re
+import grp
+import pwd
import sys
+import shutil
import optparse
+import tempfile
import unittest
+import Mailman
+import Mailman.testing
+
from Mailman import Version
+from Mailman.configuration import config
+from Mailman.database.dbcontext import dbcontext
from Mailman.i18n import _
-from Mailman.initialize import initialize
+from Mailman.initialize import initialize_1, initialize_2
__i18n_templates__ = True
@@ -63,8 +74,6 @@ Reduce verbosity by 1 (but not below 0)."""))
parser.add_option('-e', '--stderr',
default=False, action='store_true',
help=_('Propagate log errors to stderr.'))
- parser.add_option('-C', '--config',
- help=_('Alternative configuration file to use'))
opts, args = parser.parse_args()
return parser, opts, args
@@ -137,14 +146,48 @@ def main():
global basedir
parser, opts, args = parseargs()
- initialize(opts.config, propagate_logs=opts.stderr)
if not args:
args = ['.']
- import Mailman
- basedir = os.path.dirname(Mailman.__file__)
- runner = unittest.TextTestRunner(verbosity=opts.verbosity)
- results = runner.run(suite(args))
+ # Set up the testing configuration file both for this process, and for all
+ # sub-processes testing will spawn (e.g. the qrunners).
+ #
+ # Calculate various temporary files needed by the test suite, but only for
+ # those files which must also go into shared configuration file.
+ cfg_in = os.path.join(os.path.dirname(Mailman.testing.__file__),
+ 'testing.cfg.in')
+ fd, cfg_out = tempfile.mkstemp(suffix='.cfg')
+ os.close(fd)
+ shutil.copyfile(cfg_in, cfg_out)
+
+ initialize_1(cfg_out, propagate_logs=opts.stderr)
+ mailman_uid = pwd.getpwnam(config.MAILMAN_USER).pw_uid
+ mailman_gid = grp.getgrnam(config.MAILMAN_GROUP).gr_gid
+ os.chmod(cfg_out, 0660)
+ os.chown(cfg_out, mailman_uid, mailman_gid)
+
+ fd, config.dbfile = tempfile.mkstemp(dir=config.DATA_DIR, suffix='.db')
+ os.close(fd)
+ os.chmod(config.dbfile, 0660)
+ os.chown(config.dbfile, mailman_uid, mailman_gid)
+
+ # Patch ups
+ test_engine_url = 'sqlite:///' + config.dbfile
+ config.SQLALCHEMY_ENGINE_URL = test_engine_url
+
+ with open(cfg_out, 'a') as fp:
+ print >> fp, 'SQLALCHEMY_ENGINE_URL = "%s"' % test_engine_url
+
+ initialize_2()
+
+ try:
+ basedir = os.path.dirname(Mailman.__file__)
+ runner = unittest.TextTestRunner(verbosity=opts.verbosity)
+ results = runner.run(suite(args))
+ finally:
+ os.remove(cfg_out)
+ os.remove(config.dbfile)
+
sys.exit(bool(results.failures or results.errors))