| """ |
| 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) |