Autotest: run run_cros_tests in the lab.

We now have a subsection of chrome-os specific telemetry tests. These
tests are kicked off by a different script. Thus the autotest
telemetry runner code needs to be aware of its existence and allow
access to it.

Also added an example test so that people know how to add tests in
the future.

BUG=chromium:234839
TEST=Ran the new test.

Change-Id: I7bf81f1c9eb03aa5af45e85bfbe3252bad5d3aff
Reviewed-on: https://gerrit.chromium.org/gerrit/49908
Commit-Queue: Simran Basi <sbasi@chromium.org>
Reviewed-by: Simran Basi <sbasi@chromium.org>
Tested-by: Simran Basi <sbasi@chromium.org>
diff --git a/server/cros/telemetry_runner.py b/server/cros/telemetry_runner.py
index 9352715..2bbc004 100644
--- a/server/cros/telemetry_runner.py
+++ b/server/cros/telemetry_runner.py
@@ -15,6 +15,7 @@
 
 TELEMETRY_RUN_BENCHMARKS_SCRIPT = 'tools/perf/run_multipage_benchmarks'
 TELEMETRY_RUN_TESTS_SCRIPT = 'tools/telemetry/run_tests'
+TELEMETRY_RUN_CROS_TESTS_SCRIPT = 'chrome/test/telemetry/run_cros_tests'
 TELEMETRY_TIMEOUT_MINS = 60
 
 # Result Statuses
@@ -235,6 +236,7 @@
         """
         devserver_hostname = self._devserver.url().split(
                 'http://')[1].split(':')[0]
+        # TODO (sbasi crbug.com/239933) add support for incognito mode.
         telemetry_args = ['ssh',
                           devserver_hostname,
                           'python',
@@ -269,6 +271,26 @@
                                stderr=stderr)
 
 
+    def _run_test(self, script, test):
+        """Runs a telemetry test on a dut.
+
+        @param script: Which telemetry test script we want to run. Can be
+                       telemetry's base test script or the Chrome OS specific
+                       test script.
+        @param test: Telemetry test we want to run.
+
+        @returns A TelemetryResult Instance with the results of this telemetry
+                 execution.
+        """
+        logging.debug('Running telemetry test: %s', test)
+        telemetry_script = os.path.join(self._telemetry_path, script)
+        result = self._run_telemetry(telemetry_script, test)
+        if result.status is FAILED_STATUS:
+            raise error.TestFail('Telemetry test: %s failed.',
+                                 test)
+        return result
+
+
     def run_telemetry_test(self, test):
         """Runs a telemetry test on a dut.
 
@@ -277,14 +299,18 @@
         @returns A TelemetryResult Instance with the results of this telemetry
                  execution.
         """
-        logging.debug('Running telemetry test: %s', test)
-        telemetry_script = os.path.join(self._telemetry_path,
-                                        TELEMETRY_RUN_TESTS_SCRIPT)
-        result = self._run_telemetry(telemetry_script, test)
-        if result.status is FAILED_STATUS:
-            raise error.TestFail('Telemetry test: %s failed.',
-                                 test)
-        return result
+        return self._run_test(TELEMETRY_RUN_TESTS_SCRIPT, test)
+
+
+    def run_cros_telemetry_test(self, test):
+        """Runs a cros specific telemetry test on a dut.
+
+        @param test: Telemetry test we want to run.
+
+        @returns A TelemetryResult instance with the results of this telemetry
+                 execution.
+        """
+        return self._run_test(TELEMETRY_RUN_CROS_TESTS_SCRIPT, test)
 
 
     def run_telemetry_benchmark(self, benchmark, page_set, keyval_writer=None):
diff --git a/server/site_tests/telemetry_CrosTests/control.LoginStatus b/server/site_tests/telemetry_CrosTests/control.LoginStatus
new file mode 100644
index 0000000..ddcdad5
--- /dev/null
+++ b/server/site_tests/telemetry_CrosTests/control.LoginStatus
@@ -0,0 +1,21 @@
+# 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.
+
+AUTHOR = "chrome-ui"
+NAME = "Telemetry Login Status Test"
+TIME = "LONG"
+TEST_CATEGORY = "Functional"
+TEST_TYPE = "server"
+
+DOC = """
+This server control file executes the CrOS telemetry test: testLoginStatus.
+"""
+
+def run_test(machine):
+    host = hosts.create_host(machine)
+    job.run_test("telemetry_CrosTests", host=host,
+                 test="CrOSAutoTest.testLoginStatus")
+
+
+parallel_simple(run_test, machines)
diff --git a/server/site_tests/telemetry_CrosTests/telemetry_CrosTests.py b/server/site_tests/telemetry_CrosTests/telemetry_CrosTests.py
new file mode 100644
index 0000000..f7d0245
--- /dev/null
+++ b/server/site_tests/telemetry_CrosTests/telemetry_CrosTests.py
@@ -0,0 +1,25 @@
+# Copyright (c) 2013 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.
+
+import logging
+
+from autotest_lib.server import test
+from autotest_lib.server.cros import telemetry_runner
+
+
+class telemetry_CrosTests(test.test):
+    """Run a Chrome OS telemetry test."""
+    version = 1
+
+
+    def run_once(self, host=None, test=''):
+        """Run a CrOS specific telemetry test.
+
+        @param host: host we are running telemetry on.
+        @param test: telemetry test we want to run.
+        """
+        telemetry = telemetry_runner.TelemetryRunner(host)
+        result = telemetry.run_cros_telemetry_test(test)
+        logging.debug('Telemetry completed with a status of: %s with output:'
+                      ' %s', result.status, result.output)