Kick off arc-gts-qual from release builder

As of arc-cts-qual, we want to kick off arc-gts-qual from the release builder
to see the results.

BUG=b:62821305
TEST=./chromeos_config_unittest --update

Change-Id: Ifb189ab6cd86fce9d46cde2551f6fb57e40d0c9d
Reviewed-on: https://chromium-review.googlesource.com/557974
Commit-Ready: Po-Hsien Wang <pwang@chromium.org>
Tested-by: Po-Hsien Wang <pwang@chromium.org>
Reviewed-by: Ilja H. Friedel <ihf@chromium.org>
Reviewed-by: Bernie Thompson <bhthompson@chromium.org>
(cherry picked from commit 87e579a1156b4a2a1883c6385f5602ec5f09546c)
Reviewed-on: https://chromium-review.googlesource.com/570780
Reviewed-by: Po-Hsien Wang <pwang@chromium.org>
Commit-Queue: Po-Hsien Wang <pwang@chromium.org>
diff --git a/cbuildbot/chromeos_config.py b/cbuildbot/chromeos_config.py
index 0358cc6..5c3b9e2 100644
--- a/cbuildbot/chromeos_config.py
+++ b/cbuildbot/chromeos_config.py
@@ -357,6 +357,27 @@
             config_lib.HWTestConfig('security',
                                     **default_dict)]
 
+  def CtsGtsTests(self, **kwargs):
+    """Return a list of HWTestConfigs for CTS, GTS tests."""
+
+    cts_config = dict(
+        pool=constants.HWTEST_CTS_POOL,
+        timeout=config_lib.HWTestConfig.CTS_QUAL_HW_TEST_TIMEOUT,
+        priority='PostBuild'
+    )
+    gts_config = dict(
+        pool=constants.HWTEST_GTS_POOL,
+        timeout=config_lib.HWTestConfig.GTS_QUAL_HW_TEST_TIMEOUT,
+        priority='PostBuild'
+    )
+
+    return [config_lib.HWTestConfig(constants.HWTEST_CTS_QUAL_SUITE,
+                                    **cts_config),
+            config_lib.HWTestConfig(constants.HWTEST_GTS_QUAL_SUITE,
+                                    **gts_config)
+    ]
+
+
 
 def append_useflags(useflags):
   """Used to append a set of useflags to existing useflags.
@@ -1436,16 +1457,9 @@
   )
 
   site_config.AddTemplate(
-      'release_cts',
+      'release_cts_gts',
       site_config.templates.release,
-      hw_tests_override=[
-          config_lib.HWTestConfig(
-              constants.HWTEST_CTS_QUAL_SUITE,
-              pool=constants.HWTEST_CTS_POOL,
-              timeout=config_lib.HWTestConfig.CTS_QUAL_HW_TEST_TIMEOUT,
-              priority='PostBuild'
-          )
-      ],
+      hw_tests_override=hw_test_list.CtsGtsTests(),
   )
 
   ### Release AFDO configs.
@@ -3187,10 +3201,10 @@
       config_lib.CONFIG_TEMPLATE_RELEASE]
 
   if is_release_branch:
-      _cts_boards = (boards_dict['all_release_boards'] |
+      _cts_gts_boards = (boards_dict['all_release_boards'] |
                      _all_release_builder_boards) - _critical_for_chrome_boards
   else:
-      _cts_boards = frozenset([
+      _cts_gts_boards = frozenset([
           'terra',
           'kevin',
           'veyron_mighty',
@@ -3199,16 +3213,16 @@
 
   site_config.AddForBoards(
       config_lib.CONFIG_TYPE_RELEASE,
-      _cts_boards,
+      _cts_gts_boards,
       board_configs,
       site_config.templates.release,
-      site_config.templates.release_cts,
+      site_config.templates.release_cts_gts,
   )
 
   site_config.AddForBoards(
       config_lib.CONFIG_TYPE_RELEASE,
       ((boards_dict['all_release_boards'] | _all_release_builder_boards) -
-       _critical_for_chrome_boards - _cts_boards),
+       _critical_for_chrome_boards - _cts_gts_boards),
       board_configs,
       site_config.templates.release,
   )
diff --git a/cbuildbot/config_dump.json b/cbuildbot/config_dump.json
index 14a36d8..2214e02 100644
--- a/cbuildbot/config_dump.json
+++ b/cbuildbot/config_dump.json
@@ -11838,7 +11838,8 @@
         ],
         "chrome_sdk_build_chrome": false,
         "hw_tests_override": [
-            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-cts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}"
+            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-cts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}",
+            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-gts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}"
         ],
         "important": true,
         "vm_tests": []
@@ -12047,7 +12048,8 @@
         ],
         "chrome_sdk_build_chrome": false,
         "hw_tests_override": [
-            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-cts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}"
+            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-cts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}",
+            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-gts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}"
         ],
         "important": true,
         "vm_tests": [],
@@ -24328,7 +24330,8 @@
         ],
         "chrome_sdk_build_chrome": false,
         "hw_tests_override": [
-            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-cts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}"
+            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-cts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}",
+            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-gts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}"
         ],
         "important": true,
         "vm_tests": [],
@@ -26035,7 +26038,8 @@
         ],
         "chrome_sdk_build_chrome": false,
         "hw_tests_override": [
-            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-cts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}"
+            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-cts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}",
+            "{\n    \"async\": false,\n    \"blocking\": false,\n    \"critical\": false,\n    \"file_bugs\": false,\n    \"max_retries\": 5,\n    \"minimum_duts\": 0,\n    \"num\": 6,\n    \"offload_failures_only\": false,\n    \"pool\": \"cts\",\n    \"priority\": \"PostBuild\",\n    \"retry\": true,\n    \"suite\": \"arc-gts-qual\",\n    \"suite_min_duts\": 0,\n    \"timeout\": 172800,\n    \"warn_only\": false\n}"
         ],
         "important": true,
         "vm_tests": [],
diff --git a/lib/config_lib.py b/lib/config_lib.py
index 58242ae..a817036 100644
--- a/lib/config_lib.py
+++ b/lib/config_lib.py
@@ -433,7 +433,12 @@
   """
   _MINUTE = 60
   _HOUR = 60 * _MINUTE
+  # CTS timeout about 2 * expected runtime in case other tests are using the CTS
+  # pool.
   CTS_QUAL_HW_TEST_TIMEOUT = int(48.0 * _HOUR)
+  # GTS runs faster than CTS. But to avoid starving GTS by CTS we set both
+  # timeouts equal.
+  GTS_QUAL_HW_TEST_TIMEOUT = CTS_QUAL_HW_TEST_TIMEOUT
   SHARED_HW_TEST_TIMEOUT = int(3.0 * _HOUR)
   PALADIN_HW_TEST_TIMEOUT = int(1.5 * _HOUR)
   BRANCHED_HW_TEST_TIMEOUT = int(10.0 * _HOUR)
diff --git a/lib/constants.py b/lib/constants.py
index cbecabf..555f490 100644
--- a/lib/constants.py
+++ b/lib/constants.py
@@ -692,6 +692,7 @@
 HWTEST_WIFICELL_PRE_CQ_POOL = 'wificell-pre-cq'
 HWTEST_CONTINUOUS_POOL = 'continuous'
 HWTEST_CTS_POOL = 'cts'
+HWTEST_GTS_POOL = HWTEST_CTS_POOL
 
 
 
@@ -720,6 +721,7 @@
 HWTEST_TOOLCHAIN_SUITE = 'toolchain-tests'
 HWTEST_PROVISION_SUITE = 'bvt-provision'
 HWTEST_CTS_QUAL_SUITE = 'arc-cts-qual'
+HWTEST_GTS_QUAL_SUITE = 'arc-gts-qual'
 
 
 # Additional timeout to wait for autotest to abort a suite if the test takes