Adding CameraBox control files to Arc R CTS.

TEST=./generate_controlfiles.py --is_latest gs://chromeos-arc-images/cts/bundle/R/android-cts-11_r4-linux_x86-arm.zip
     ./generate_controlfiles.py --is_latest gs://chromeos-arc-images/cts/bundle/R/android-cts-11_r4-linux_x86-x86.zip

Command line tested: test_that -b atlas chromeos15-row1-metro5-host2b.cros cheets_CTS_R.11_r4.x86.CtsCameraTestCases.noled.camerabox.back --args=chart=chromeos15-row1-metro5-host2b-tablet.cros

BUG=b:187795810
http://b/187795810

Change-Id: Id06599da86c48a746951f0dc26469af828ad14d4

Adding CameraBox control files for ARC R CTS

Change-Id: I7eb28ba603bcdb6eaa75e249f51dcde1db3279f0
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2917837
Reviewed-by: Jaydeep Mehta <jaydeepmehta@google.com>
Reviewed-by: Kazuhiro Inaba <kinaba@chromium.org>
Tested-by: Jaydeep Mehta <jaydeepmehta@google.com>
Commit-Queue: Kazuhiro Inaba <kinaba@chromium.org>
diff --git a/server/cros/tradefed/generate_controlfiles_CTS_R.py b/server/cros/tradefed/generate_controlfiles_CTS_R.py
index f31adf0..ac46af3 100755
--- a/server/cros/tradefed/generate_controlfiles_CTS_R.py
+++ b/server/cros/tradefed/generate_controlfiles_CTS_R.py
@@ -37,7 +37,7 @@
 
 CONFIG['CONTROLFILE_TEST_FUNCTION_NAME'] = 'run_TS'
 CONFIG['CONTROLFILE_WRITE_SIMPLE_QUAL_AND_REGRESS'] = False
-CONFIG['CONTROLFILE_WRITE_CAMERA'] = False
+CONFIG['CONTROLFILE_WRITE_CAMERA'] = True
 CONFIG['CONTROLFILE_WRITE_EXTRA'] = True
 
 # The dashboard suppresses upload to APFE for GS directories (based on autotest
diff --git a/server/site_tests/cheets_CTS_R/cheets_CTS_R.py b/server/site_tests/cheets_CTS_R/cheets_CTS_R.py
index 8e7bfaa..1c43c5a 100644
--- a/server/site_tests/cheets_CTS_R/cheets_CTS_R.py
+++ b/server/site_tests/cheets_CTS_R/cheets_CTS_R.py
@@ -16,6 +16,10 @@
 import os
 
 from autotest_lib.server import utils
+from autotest_lib.client.common_lib import error
+from autotest_lib.server import hosts
+from autotest_lib.server import utils
+from autotest_lib.server.cros import camerabox_utils
 from autotest_lib.server.cros.tradefed import tradefed_test
 
 # Maximum default time allowed for each individual CTS module.
@@ -42,6 +46,10 @@
     """Sets up tradefed to run CTS tests."""
     version = 1
 
+    _SCENE_URI = (
+            'https://storage.googleapis.com/chromiumos-test-assets-public'
+            '/camerabox/cts_portrait_scene.jpg')
+
     def _tradefed_retry_command(self, template, session_id):
         """Build tradefed 'retry' command from template."""
         cmd = []
@@ -70,6 +78,63 @@
     def _tradefed_cmd_path(self):
         return os.path.join(self._repository, 'tools', 'cts-tradefed')
 
+    def initialize_camerabox(self, camera_facing, cmdline_args):
+        """Configure DUT and chart running in camerabox environment.
+
+        @param camera_facing: the facing of the DUT used in testing
+                              (e.g. 'front', 'back').
+        """
+        chart_address = camerabox_utils.get_chart_address(
+            [h.hostname for h in self._hosts], cmdline_args)
+        if chart_address is None:
+            raise error.TestFail(
+                'Error: missing option --args="chart=<CHART IP>"')
+        chart_hosts = [hosts.create_host(ip) for ip in chart_address]
+
+        self.chart_fixtures = [
+            camerabox_utils.ChartFixture(h, self._SCENE_URI)
+            for h in chart_hosts
+        ]
+        self.dut_fixtures = [
+            camerabox_utils.DUTFixture(self, h, camera_facing)
+            for h in self._hosts
+        ]
+
+        for chart in self.chart_fixtures:
+            chart.initialize()
+
+        for dut in self.dut_fixtures:
+            dut.log_camera_scene()
+            dut.initialize()
+
+        for host in self._hosts:
+            host.run('cras_test_client --mute 1')
+
+    def initialize(self,
+                   camera_facing=None,
+                   bundle=None,
+                   uri=None,
+                   host=None,
+                   hosts=None,
+                   max_retry=None,
+                   load_waivers=True,
+                   retry_manual_tests=False,
+                   warn_on_test_retry=True,
+                   cmdline_args=None,
+                   hard_reboot_on_failure=False):
+        super(cheets_CTS_R, self).initialize(
+            bundle=bundle,
+            uri=uri,
+            host=host,
+            hosts=hosts,
+            max_retry=max_retry,
+            load_waivers=load_waivers,
+            retry_manual_tests=retry_manual_tests,
+            warn_on_test_retry=warn_on_test_retry,
+            hard_reboot_on_failure=hard_reboot_on_failure)
+        if camera_facing:
+            self.initialize_camerabox(camera_facing, cmdline_args)
+
     def run_once(self,
                  test_name,
                  run_template,
@@ -124,3 +189,20 @@
                 bundle=bundle,
                 login_precondition_commands=login_precondition_commands,
                 precondition_commands=precondition_commands)
+
+    def cleanup_camerabox(self):
+        """Cleanup configuration on DUT and chart tablet for running in
+
+        camerabox environment.
+        """
+        for dut in self.dut_fixtures:
+            dut.cleanup()
+
+        for chart in self.chart_fixtures:
+            chart.cleanup()
+
+    def cleanup(self):
+        if hasattr(self, 'dut_fixtures'):
+            self.cleanup_camerabox()
+
+        super(cheets_CTS_R, self).cleanup()
diff --git a/server/site_tests/cheets_CTS_R/control.11_r4.arm.CtsCameraTestCases.noled.camerabox.back b/server/site_tests/cheets_CTS_R/control.11_r4.arm.CtsCameraTestCases.noled.camerabox.back
new file mode 100644
index 0000000..5af52df
--- /dev/null
+++ b/server/site_tests/cheets_CTS_R/control.11_r4.arm.CtsCameraTestCases.noled.camerabox.back
@@ -0,0 +1,37 @@
+# Copyright 2020 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.
+
+# This file has been automatically generated. Do not edit!
+
+AUTHOR = 'ARC++ Team'
+NAME = 'cheets_CTS_R.11_r4.arm.CtsCameraTestCases.noled.camerabox.back'
+ATTRIBUTES = 'suite:arc-cts, suite:arc-cts-camera, suite:arc-cts-r, suite:arc-cts-unibuild, suite:arc-cts-unibuild-hw'
+DEPENDENCIES = 'arc, camerabox_light:noled, camerabox_facing:back'
+JOB_RETRIES = 1
+TEST_TYPE = 'server'
+TIME = 'LONG'
+MAX_RESULT_SIZE_KB = 512000
+DOC = 'Run module CtsCameraTestCases of the Android Compatibility Test Suite (CTS) using arm ABI in the ARC++ container.'
+
+def run_TS(machine):
+    host_list = [hosts.create_host(machine)]
+    job.run_test(
+        'cheets_CTS_R',
+        camera_facing='back',
+        cmdline_args=args,
+        hosts=host_list,
+        iterations=1,
+        tag='11_r4.arm.CtsCameraTestCases.noled.camerabox.back',
+        test_name='cheets_CTS_R.11_r4.arm.CtsCameraTestCases.noled.camerabox.back',
+        run_template=['run', 'commandAndExit', 'cts', '--module', 'CtsCameraTestCases', '--logcat-on-failure'],
+        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
+        target_module='CtsCameraTestCases',
+        target_plan=None,
+        bundle='arm',
+        uri='LATEST',
+        use_jdk9=True,
+        load_waivers=False,
+        timeout=3600)
+
+parallel_simple(run_TS, machines)
diff --git a/server/site_tests/cheets_CTS_R/control.11_r4.arm.CtsCameraTestCases.noled.camerabox.front b/server/site_tests/cheets_CTS_R/control.11_r4.arm.CtsCameraTestCases.noled.camerabox.front
new file mode 100644
index 0000000..c132b95
--- /dev/null
+++ b/server/site_tests/cheets_CTS_R/control.11_r4.arm.CtsCameraTestCases.noled.camerabox.front
@@ -0,0 +1,37 @@
+# Copyright 2020 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.
+
+# This file has been automatically generated. Do not edit!
+
+AUTHOR = 'ARC++ Team'
+NAME = 'cheets_CTS_R.11_r4.arm.CtsCameraTestCases.noled.camerabox.front'
+ATTRIBUTES = 'suite:arc-cts, suite:arc-cts-camera, suite:arc-cts-r, suite:arc-cts-unibuild, suite:arc-cts-unibuild-hw'
+DEPENDENCIES = 'arc, camerabox_light:noled, camerabox_facing:front'
+JOB_RETRIES = 1
+TEST_TYPE = 'server'
+TIME = 'LONG'
+MAX_RESULT_SIZE_KB = 512000
+DOC = 'Run module CtsCameraTestCases of the Android Compatibility Test Suite (CTS) using arm ABI in the ARC++ container.'
+
+def run_TS(machine):
+    host_list = [hosts.create_host(machine)]
+    job.run_test(
+        'cheets_CTS_R',
+        camera_facing='front',
+        cmdline_args=args,
+        hosts=host_list,
+        iterations=1,
+        tag='11_r4.arm.CtsCameraTestCases.noled.camerabox.front',
+        test_name='cheets_CTS_R.11_r4.arm.CtsCameraTestCases.noled.camerabox.front',
+        run_template=['run', 'commandAndExit', 'cts', '--module', 'CtsCameraTestCases', '--logcat-on-failure'],
+        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
+        target_module='CtsCameraTestCases',
+        target_plan=None,
+        bundle='arm',
+        uri='LATEST',
+        use_jdk9=True,
+        load_waivers=False,
+        timeout=3600)
+
+parallel_simple(run_TS, machines)
diff --git a/server/site_tests/cheets_CTS_R/control.11_r4.x86.CtsCameraTestCases.noled.camerabox.back b/server/site_tests/cheets_CTS_R/control.11_r4.x86.CtsCameraTestCases.noled.camerabox.back
new file mode 100644
index 0000000..c94f8ae
--- /dev/null
+++ b/server/site_tests/cheets_CTS_R/control.11_r4.x86.CtsCameraTestCases.noled.camerabox.back
@@ -0,0 +1,37 @@
+# Copyright 2020 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.
+
+# This file has been automatically generated. Do not edit!
+
+AUTHOR = 'ARC++ Team'
+NAME = 'cheets_CTS_R.11_r4.x86.CtsCameraTestCases.noled.camerabox.back'
+ATTRIBUTES = 'suite:arc-cts, suite:arc-cts-camera, suite:arc-cts-r, suite:arc-cts-unibuild, suite:arc-cts-unibuild-hw'
+DEPENDENCIES = 'arc, cts_abi_x86, camerabox_light:noled, camerabox_facing:back'
+JOB_RETRIES = 1
+TEST_TYPE = 'server'
+TIME = 'LONG'
+MAX_RESULT_SIZE_KB = 512000
+DOC = 'Run module CtsCameraTestCases of the Android Compatibility Test Suite (CTS) using x86 ABI in the ARC++ container.'
+
+def run_TS(machine):
+    host_list = [hosts.create_host(machine)]
+    job.run_test(
+        'cheets_CTS_R',
+        camera_facing='back',
+        cmdline_args=args,
+        hosts=host_list,
+        iterations=1,
+        tag='11_r4.x86.CtsCameraTestCases.noled.camerabox.back',
+        test_name='cheets_CTS_R.11_r4.x86.CtsCameraTestCases.noled.camerabox.back',
+        run_template=['run', 'commandAndExit', 'cts', '--module', 'CtsCameraTestCases', '--logcat-on-failure'],
+        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
+        target_module='CtsCameraTestCases',
+        target_plan=None,
+        bundle='x86',
+        uri='LATEST',
+        use_jdk9=True,
+        load_waivers=False,
+        timeout=3600)
+
+parallel_simple(run_TS, machines)
diff --git a/server/site_tests/cheets_CTS_R/control.11_r4.x86.CtsCameraTestCases.noled.camerabox.front b/server/site_tests/cheets_CTS_R/control.11_r4.x86.CtsCameraTestCases.noled.camerabox.front
new file mode 100644
index 0000000..2751ef1
--- /dev/null
+++ b/server/site_tests/cheets_CTS_R/control.11_r4.x86.CtsCameraTestCases.noled.camerabox.front
@@ -0,0 +1,37 @@
+# Copyright 2020 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.
+
+# This file has been automatically generated. Do not edit!
+
+AUTHOR = 'ARC++ Team'
+NAME = 'cheets_CTS_R.11_r4.x86.CtsCameraTestCases.noled.camerabox.front'
+ATTRIBUTES = 'suite:arc-cts, suite:arc-cts-camera, suite:arc-cts-r, suite:arc-cts-unibuild, suite:arc-cts-unibuild-hw'
+DEPENDENCIES = 'arc, cts_abi_x86, camerabox_light:noled, camerabox_facing:front'
+JOB_RETRIES = 1
+TEST_TYPE = 'server'
+TIME = 'LONG'
+MAX_RESULT_SIZE_KB = 512000
+DOC = 'Run module CtsCameraTestCases of the Android Compatibility Test Suite (CTS) using x86 ABI in the ARC++ container.'
+
+def run_TS(machine):
+    host_list = [hosts.create_host(machine)]
+    job.run_test(
+        'cheets_CTS_R',
+        camera_facing='front',
+        cmdline_args=args,
+        hosts=host_list,
+        iterations=1,
+        tag='11_r4.x86.CtsCameraTestCases.noled.camerabox.front',
+        test_name='cheets_CTS_R.11_r4.x86.CtsCameraTestCases.noled.camerabox.front',
+        run_template=['run', 'commandAndExit', 'cts', '--module', 'CtsCameraTestCases', '--logcat-on-failure'],
+        retry_template=['run', 'commandAndExit', 'retry', '--retry', '{session_id}'],
+        target_module='CtsCameraTestCases',
+        target_plan=None,
+        bundle='x86',
+        uri='LATEST',
+        use_jdk9=True,
+        load_waivers=False,
+        timeout=3600)
+
+parallel_simple(run_TS, machines)