blob: cf66cd1b5a72c8cfe885e05b7cc2f84a4264692d [file] [log] [blame]
"""
A script that runs the tests with --collect-only, but instead of just printing
the tests' names, prints the information added by the tools.decorators.known_failure
decorator.
This is basically a wrapper around the `nosetests` command, so it takes the
same arguments, though it appends some arguments to sys.argv. In particular,
if you want to look at particular kinds of known failures, use the `-a`
parameter on this script as you would for any of the known_failures attributes.
In addition, you should call it from the same directory from which you'd call
`nosetests`.
"""
import json
import os
import sys
from functools import partial
import nose
class PrintJiraURLPlugin(nose.plugins.Plugin):
enabled = True
def options(self, parser, env):
super(PrintJiraURLPlugin, self).configure(parser, env)
def testName(self, test):
_, test_module, test_name = test.address()
test_method_name = test_name.split('.')[-1]
test_method = getattr(test.test, test_method_name)
get_attr_for_current_method = partial(
nose.plugins.attrib.get_method_attr,
method=test_method,
cls=test.test,
)
failure_annotations = get_attr_for_current_method(attr_name='known_failure')
return json.dumps({
'module': test_module,
'name': test_name,
'failure_annotations': failure_annotations
})
if __name__ == '__main__':
argv = sys.argv + ['--collect-only', '-v']
# The tests need a CASSANDRA_VERSION or CASSANDRA_DIR environment variable
# to run at all, so we specify it here. However, we have to do so by
# modifying os.environ, rather than using the env parameter to nose.main,
# because env does not do what you think it does:
# http://stackoverflow.com/a/28611124
os.environ['CASSANDRA_VERSION'] = 'git:trunk'
nose.main(addplugins=[PrintJiraURLPlugin()], argv=argv)