summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mailman/commands/tests/test_conf.py7
-rw-r--r--src/mailman/core/logging.py3
-rw-r--r--src/mailman/docs/NEWS.rst3
-rw-r--r--src/mailman/testing/layers.py33
-rw-r--r--src/mailman/testing/nose.py9
5 files changed, 23 insertions, 32 deletions
diff --git a/src/mailman/commands/tests/test_conf.py b/src/mailman/commands/tests/test_conf.py
index 307151c74..04ce4c9b5 100644
--- a/src/mailman/commands/tests/test_conf.py
+++ b/src/mailman/commands/tests/test_conf.py
@@ -110,4 +110,9 @@ class TestConf(unittest.TestCase):
self.command.process(self.args)
last_line = ''
for line in output.getvalue().splitlines():
- self.assertTrue(line > last_line)
+ if not line.startswith('['):
+ # This is a continuation line. --sort doesn't sort these.
+ continue
+ self.assertTrue(line > last_line,
+ '{} !> {}'.format(line, last_line))
+ last_line = line
diff --git a/src/mailman/core/logging.py b/src/mailman/core/logging.py
index 7554c3651..c80535fc1 100644
--- a/src/mailman/core/logging.py
+++ b/src/mailman/core/logging.py
@@ -117,8 +117,7 @@ def initialize(propagate=None):
# sublogs. The root logger should log to stderr.
logging.basicConfig(format=config.logging.root.format,
datefmt=config.logging.root.datefmt,
- level=as_log_level(config.logging.root.level),
- stream=sys.stderr)
+ level=as_log_level(config.logging.root.level))
# Create the sub-loggers. Note that we'll redirect flufl.lock to
# mailman.locks.
for logger_config in config.logger_configs:
diff --git a/src/mailman/docs/NEWS.rst b/src/mailman/docs/NEWS.rst
index 6572c9a7b..552b396ac 100644
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -16,7 +16,8 @@ Development
-----------
* Mailman 3 no longer uses ``zc.buildout`` and tests are now run by the
``nose2`` test runner. See ``src/mailman/docs/START.rst`` for details on
- how to build Mailman and run the test suite.
+ how to build Mailman and run the test suite. Also, use ``-P`` to select a
+ test pattern and ``-E`` to enable stderr debugging in runners.
* Use the ``enum34`` package instead of ``flufl.enum``.
REST
diff --git a/src/mailman/testing/layers.py b/src/mailman/testing/layers.py
index 6d150815f..2d2552f93 100644
--- a/src/mailman/testing/layers.py
+++ b/src/mailman/testing/layers.py
@@ -143,7 +143,6 @@ class ConfigLayer(MockAndMonkeyLayer):
if cls.stderr:
test_config += dedent("""
[logging.root]
- propagate: yes
level: debug
""")
# Enable log message propagation and reset the log paths so that the
@@ -154,7 +153,7 @@ class ConfigLayer(MockAndMonkeyLayer):
continue
logger_name = 'mailman.' + sub_name
log = logging.getLogger(logger_name)
- #log.propagate = True
+ log.propagate = cls.stderr
# Reopen the file to a new path that tests can get at. Instead of
# using the configuration file path though, use a path that's
# specific to the logger so that tests can find expected output
@@ -170,15 +169,16 @@ class ConfigLayer(MockAndMonkeyLayer):
propagate: yes
level: debug
"""), dict(name=sub_name, path=path))
- # zope.testing sets up logging before we get to our own initialization
- # function. This messes with the root logger, so explicitly set it to
- # go to stderr.
+ # The root logger will already have a handler, but it's not the right
+ # handler. Remove that and set our own.
if cls.stderr:
console = logging.StreamHandler(sys.stderr)
formatter = logging.Formatter(config.logging.root.format,
config.logging.root.datefmt)
console.setFormatter(formatter)
- logging.getLogger().addHandler(console)
+ root = logging.getLogger()
+ del root.handlers[:]
+ root.addHandler(console)
# Write the configuration file for subprocesses and set up the config
# object to pass that properly on the -C option.
config_file = os.path.join(cls.var_dir, 'test.cfg')
@@ -209,27 +209,6 @@ class ConfigLayer(MockAndMonkeyLayer):
# Flag to indicate that loggers should propagate to the console.
stderr = False
- @classmethod
- def enable_stderr(cls):
- """Enable stderr logging if -e/--stderr is given.
-
- We used to hack our way into the zc.testing framework, but that was
- undocumented and way too fragile. Well, this probably is too, but now
- we just scan sys.argv for -e/--stderr and enable logging if found.
- Then we remove the option from sys.argv. This works because this
- method is called before zope.testrunner sees the options.
-
- As a bonus, we'll check an environment variable too.
- """
- if '-e' in sys.argv:
- cls.stderr = True
- sys.argv.remove('-e')
- if '--stderr' in sys.argv:
- cls.stderr = True
- sys.argv.remove('--stderr')
- if len(os.environ.get('MM_VERBOSE_TESTLOG', '').strip()) > 0:
- cls.stderr = True
-
# The top of our source tree, for tests that care (e.g. hooks.txt).
root_directory = None
diff --git a/src/mailman/testing/nose.py b/src/mailman/testing/nose.py
index 86a3e6a01..8ac85a756 100644
--- a/src/mailman/testing/nose.py
+++ b/src/mailman/testing/nose.py
@@ -47,12 +47,19 @@ class NosePlugin(Plugin):
def __init__(self):
super(NosePlugin, self).__init__()
self.patterns = []
+ self.stderr = False
+ def set_stderr(ignore):
+ self.stderr = True
self.addArgument(self.patterns, 'P', 'pattern',
'Add a test matching pattern')
+ self.addFlag(set_stderr, 'E', 'stderr',
+ 'Enable stderr logging to sub-runners')
def startTestRun(self, event):
MockAndMonkeyLayer.testing_mode = True
- ConfigLayer.enable_stderr()
+ if ( self.stderr or
+ len(os.environ.get('MM_VERBOSE_TESTLOG', '').strip()) > 0):
+ ConfigLayer.stderr = True
def getTestCaseNames(self, event):
if len(self.patterns) == 0: