autotest: Add a base predicate to skylab dynamic_suite.

BUG=chromium:920393
TEST=Ran run_suite_skylab locally.

Change-Id: Ic7fe50aa78768c3236da08d75708528ca1d01bc9
Reviewed-on: https://chromium-review.googlesource.com/c/1405899
Tested-by: Xixuan Wu <xixuan@chromium.org>
Commit-Queue: Xixuan Wu <xixuan@chromium.org>
Reviewed-by: Allen Li <ayatane@chromium.org>
diff --git a/server/cros/dynamic_suite/suite.py b/server/cros/dynamic_suite/suite.py
index b9bca4f..fbca315 100644
--- a/server/cros/dynamic_suite/suite.py
+++ b/server/cros/dynamic_suite/suite.py
@@ -700,7 +700,7 @@
     @return a callable that takes a ControlData and looks for |name| in that
             ControlData object's suite member.
     """
-    return lambda t: name in t.suite_tag_parts
+    return suite_common.name_in_tag_predicate(name)
 
 
 def create_fs_getter(autotest_dir):
@@ -1322,7 +1322,8 @@
     find_and_parse_tests = _deprecated_suite_method(find_and_parse_tests)
     find_possible_tests = _deprecated_suite_method(find_possible_tests)
     create_fs_getter = _deprecated_suite_method(create_fs_getter)
-    name_in_tag_predicate = _deprecated_suite_method(name_in_tag_predicate)
+    name_in_tag_predicate = _deprecated_suite_method(
+            suite_common.name_in_tag_predicate)
     name_in_tag_similarity_predicate = _deprecated_suite_method(
             name_in_tag_similarity_predicate)
     test_name_equals_predicate = _deprecated_suite_method(
@@ -1409,7 +1410,7 @@
             build = suite_common.get_test_source_build(builds, **dargs)
             cf_getter = _create_ds_getter(build, devserver)
 
-        return cls([name_in_tag_predicate(name)],
+        return cls([suite_common.name_in_tag_predicate(name)],
                    name, builds, board, cf_getter, **dargs)
 
 
diff --git a/server/cros/dynamic_suite/suite_common.py b/server/cros/dynamic_suite/suite_common.py
index 88b3f70..1430039 100644
--- a/server/cros/dynamic_suite/suite_common.py
+++ b/server/cros/dynamic_suite/suite_common.py
@@ -383,3 +383,16 @@
                control_data.ControlData.get_test_time_index(t.time),
                reverse=True)
     return tests
+
+
+def name_in_tag_predicate(name):
+    """Returns predicate that takes a control file and looks for |name|.
+
+    Builds a predicate that takes in a parsed control file (a ControlData)
+    and returns True if the SUITE tag is present and contains |name|.
+
+    @param name: the suite name to base the predicate on.
+    @return a callable that takes a ControlData and looks for |name| in that
+            ControlData object's suite member.
+    """
+    return lambda t: name in t.suite_tag_parts
diff --git a/venv/skylab_suite/cros_suite.py b/venv/skylab_suite/cros_suite.py
index 4c73401..d13554b 100644
--- a/venv/skylab_suite/cros_suite.py
+++ b/venv/skylab_suite/cros_suite.py
@@ -404,7 +404,8 @@
                 self.test_source_build, self.ds)
         tests = suite_common.retrieve_for_suite(
                 cf_getter, self.suite_name)
-        return suite_common.filter_tests(tests)
+        return suite_common.filter_tests(
+                tests, suite_common.name_in_tag_predicate(self.suite_name))
 
     def _get_available_bots(self):
         """Get available bots for suites."""