diff options
author | Jonathan Abrahams <jonathan@mongodb.com> | 2018-09-27 16:59:46 -0400 |
---|---|---|
committer | Jonathan Abrahams <jonathan@mongodb.com> | 2018-10-03 15:22:30 -0400 |
commit | b665d7a575ca08c6d6157f35f2d4bb6bf38a8388 (patch) | |
tree | b72b6840c676bb77d6aaf3cc73d2dd37611fc09a | |
parent | 58501015eff7961dc378abe1d49e064a3dcf3dbc (diff) | |
download | mongo-b665d7a575ca08c6d6157f35f2d4bb6bf38a8388.tar.gz |
SERVER-33853 Define a new test tag, test_disabled, to temporarily disable a test
-rw-r--r-- | buildscripts/resmokelib/config.py | 3 | ||||
-rw-r--r-- | buildscripts/resmokelib/parser.py | 9 | ||||
-rw-r--r-- | buildscripts/tests/resmokelib/test_selector.py | 22 |
3 files changed, 32 insertions, 2 deletions
diff --git a/buildscripts/resmokelib/config.py b/buildscripts/resmokelib/config.py index d797785ecab..a9280428d75 100644 --- a/buildscripts/resmokelib/config.py +++ b/buildscripts/resmokelib/config.py @@ -260,6 +260,9 @@ EVERGREEN_VERSION_ID = None # If set, then any jstests that have any of the specified tags will be excluded from the suite(s). EXCLUDE_WITH_ANY_TAGS = None +# A tag which is implicited excluded. This is useful for temporarily disabling a test. +EXCLUDED_TAG = "__TEMPORARILY_DISABLED__" + # If true, then a test failure or error will cause resmoke.py to exit and not run any more tests. FAIL_FAST = None diff --git a/buildscripts/resmokelib/parser.py b/buildscripts/resmokelib/parser.py index fd92055c1da..83c5c26ff76 100644 --- a/buildscripts/resmokelib/parser.py +++ b/buildscripts/resmokelib/parser.py @@ -73,7 +73,9 @@ def _make_parser(): # pylint: disable=too-many-statements parser.add_option("--excludeWithAnyTags", action="append", dest="exclude_with_any_tags", metavar="TAG1,TAG2", help=("Comma separated list of tags. Any jstest that contains any of the" - " specified tags will be excluded from any suites that are run.")) + " specified tags will be excluded from any suites that are run." + " The tag '{}' is implicitly part of this list.".format( + _config.EXCLUDED_TAG))) parser.add_option("-f", "--findSuites", action="store_true", dest="find_suites", help="Lists the names of the suites that will execute the specified tests.") @@ -387,7 +389,10 @@ def _update_config_vars(values): # pylint: disable=too-many-statements _config.DBPATH_PREFIX = _expand_user(config.pop("dbpath_prefix")) _config.DBTEST_EXECUTABLE = _expand_user(config.pop("dbtest_executable")) _config.DRY_RUN = config.pop("dry_run") - _config.EXCLUDE_WITH_ANY_TAGS = _tags_from_list(config.pop("exclude_with_any_tags")) + # EXCLUDE_WITH_ANY_TAGS will always contain the implicitly defined EXCLUDED_TAG. + _config.EXCLUDE_WITH_ANY_TAGS = [_config.EXCLUDED_TAG] + _config.EXCLUDE_WITH_ANY_TAGS.extend( + utils.default_if_none(_tags_from_list(config.pop("exclude_with_any_tags")), [])) _config.FAIL_FAST = not config.pop("continue_on_failure") _config.INCLUDE_WITH_ANY_TAGS = _tags_from_list(config.pop("include_with_any_tags")) _config.JOBS = config.pop("jobs") diff --git a/buildscripts/tests/resmokelib/test_selector.py b/buildscripts/tests/resmokelib/test_selector.py index edba22ba7b3..852272aecee 100644 --- a/buildscripts/tests/resmokelib/test_selector.py +++ b/buildscripts/tests/resmokelib/test_selector.py @@ -5,6 +5,7 @@ from __future__ import absolute_import import fnmatch import unittest +import buildscripts.resmokelib.parser as parser import buildscripts.resmokelib.selector as selector import buildscripts.resmokelib.utils.globstar as globstar import buildscripts.resmokelib.config @@ -497,6 +498,27 @@ class TestFilterTests(unittest.TestCase): selected) self.assertEqual(["dir/subdir1/test11.js"], excluded) + def test_jstest_exclude_with_any_tags(self): + config = { + "roots": ["dir/subdir1/*.js", "dir/subdir2/*.js", "dir/subdir3/a/*.js"], + "exclude_with_any_tags": ["tag2"] + } + selected, excluded = selector.filter_tests("js_test", config, self.test_file_explorer) + self.assertEqual(["dir/subdir1/test11.js", "dir/subdir2/test21.js"], excluded) + self.assertEqual(["dir/subdir1/test12.js", "dir/subdir3/a/test3a1.js"], selected) + + def test_filter_temporarily_disabled_tests(self): + parser.parse_command_line() + test_file_explorer = MockTestFileExplorer() + test_file_explorer.tags = { + "dir/subdir1/test11.js": ["tag1", "tag2", "__TEMPORARILY_DISABLED__"], + "dir/subdir1/test12.js": ["tag3"], "dir/subdir2/test21.js": ["tag2", "tag4"] + } + config = {"roots": ["dir/subdir1/*.js", "dir/subdir2/*.js"]} + selected, excluded = selector.filter_tests("js_test", config, test_file_explorer) + self.assertEqual(["dir/subdir1/test11.js"], excluded) + self.assertEqual(["dir/subdir1/test12.js", "dir/subdir2/test21.js"], selected) + def test_jstest_force_include(self): config = { "roots": ["dir/subdir1/*.js", "dir/subdir2/*.js", "dir/subdir3/a/*.js"], |