[autotest] Add suite_enumerator.py
suite_enumerator.py is a command line tool that enumerates all tests
in a given dynamic_suite-based test suite.
I also did some refactoring so that code which imports
dynamic_suite.py will be able to easily enumerate all tests in a suite
as well.
BUG=chromium-os:26667
TEST=unit tests
TEST=./test_suites/suite_enumerator.py -a /path/to/autotest/files bvt
STATUS=Fixed
Change-Id: I16cc89eae0d04b6b19b8715ae9e3787bdd4f656d
Reviewed-on: https://gerrit.chromium.org/gerrit/16390
Tested-by: Chris Masone <cmasone@chromium.org>
Reviewed-by: Chris Sosa <sosa@chromium.org>
Commit-Ready: Chris Masone <cmasone@chromium.org>
diff --git a/site_utils/suite_enumerator.py b/site_utils/suite_enumerator.py
new file mode 100755
index 0000000..fac5987
--- /dev/null
+++ b/site_utils/suite_enumerator.py
@@ -0,0 +1,54 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Tool for enumerating the tests in a given suite.
+
+Given an autotest root directory and a suite name (e.g., bvt, regression), this
+tool will print out the name of each test in that suite, one per line.
+
+Example:
+$ ./site_utils/suite_enumerator.py -a /usr/local/autotest bvt 2>/dev/null
+login_LoginSuccess
+logging_CrashSender
+login_BadAuthentication
+
+This is intended for use only with Chrome OS test suits that leverage the
+dynamic suite infrastructure in server/cros/dynamic_suite.py.
+"""
+
+import optparse, os, sys, time
+import common
+from autotest_lib.server.cros import control_file_getter, dynamic_suite
+
+def parse_options():
+ usage = "usage: %prog [options] suite_name"
+ parser = optparse.OptionParser(usage=usage)
+ parser.add_option('-a', '--autotest_dir', dest='autotest_dir',
+ default=os.path.abspath(
+ os.path.join('..', os.path.dirname(__file__))),
+ help='Directory under which to search for tests.'\
+ ' (e.g. /usr/local/autotest)')
+ parser.add_option('-s', '--stable_only', dest='add_experimental',
+ action='store_false', default=True,
+ help='List only tests that are not labeled experimental.')
+ options, args = parser.parse_args()
+ return parser, options, args
+
+
+def main():
+ parser, options, args = parse_options()
+ if not args or len(args) != 1:
+ parser.print_help()
+ return
+
+ fs_getter = dynamic_suite.Suite.create_fs_getter(options.autotest_dir)
+ suite = dynamic_suite.Suite.create_from_name(args[0], '', fs_getter)
+ for test in suite.tests:
+ print test.name
+
+
+if __name__ == "__main__":
+ sys.exit(main())