Create a new test template for slow run tests.

Test: atest 175-alloc-big-bignums
Change-Id: I01427f3ad57db96d0a3f1c823817bcc0076bceec
diff --git a/test/175-alloc-big-bignums/Android.bp b/test/175-alloc-big-bignums/Android.bp
index 20ae278..77fdb12 100644
--- a/test/175-alloc-big-bignums/Android.bp
+++ b/test/175-alloc-big-bignums/Android.bp
@@ -15,7 +15,7 @@
 java_test {
     name: "art-run-test-175-alloc-big-bignums",
     defaults: ["art-run-test-defaults"],
-    test_config_template: ":art-run-test-target-template",
+    test_config_template: ":art-run-test-target-slow-template",
     srcs: ["src/**/*.java"],
     data: [
         ":art-run-test-175-alloc-big-bignums-expected-stdout",
diff --git a/test/Android.bp b/test/Android.bp
index f2acf97..87d1fef 100644
--- a/test/Android.bp
+++ b/test/Android.bp
@@ -469,6 +469,14 @@
     ],
 }
 
+// Same as above, but with a longer timeout.
+filegroup {
+    name: "art-run-test-target-slow-template",
+    srcs: [
+        "art-run-test-target-slow-template.xml",
+    ],
+}
+
 // Test configuration template for ART run-tests on target expected to run
 // successfully, and as such *not* tagged as part of TradeFed's
 // `art-target-run-test` test suite via the `test-suite-tag`. This is as
diff --git a/test/art-run-test-target-slow-template.xml b/test/art-run-test-target-slow-template.xml
new file mode 100644
index 0000000..e1ec8a0
--- /dev/null
+++ b/test/art-run-test-target-slow-template.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<!-- Note: This test config for {MODULE} is generated from a template. -->
+<configuration description="Test module config for {MODULE}">
+    <option name="test-suite-tag" value="art-target-run-test" />
+    <option name="config-descriptor:metadata" key="mainline-param" value="com.google.android.art.apex" />
+
+    <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
+        <option name="cleanup" value="true" />
+        <!-- TODO: Use option `push-file` instead of deprecated option
+             `push`. -->
+        <option name="push" value="{MODULE}.jar->/data/local/tmp/{MODULE}/{MODULE}.jar" />
+    </target_preparer>
+
+    <test class="com.android.tradefed.testtype.ArtRunTest">
+        <option name="run-test-name" value="{MODULE}" />
+        <option name="classpath" value="/data/local/tmp/{MODULE}/{MODULE}.jar" />
+        <option name="test-timeout" value="120000" />
+    </test>
+
+    <!-- When this test is run in a Mainline context (e.g. with `mts-tradefed`), only enable it if
+         one of the Mainline modules below is present on the device used for testing. -->
+    <object type="module_controller" class="com.android.tradefed.testtype.suite.module.MainlineTestModuleController">
+        <!-- ART Mainline Module (internal version). -->
+        <option name="mainline-module-package-name" value="com.google.android.art" />
+        <!-- ART Mainline Module (external (AOSP) version). -->
+        <option name="mainline-module-package-name" value="com.android.art" />
+    </object>
+
+    <!-- Only run tests if the device under test is SDK version 31 (Android 12) or above. -->
+    <object type="module_controller" class="com.android.tradefed.testtype.suite.module.Sdk31ModuleController" />
+</configuration>
diff --git a/test/utils/regen-test-files b/test/utils/regen-test-files
index ee1c184..4e19fc9 100755
--- a/test/utils/regen-test-files
+++ b/test/utils/regen-test-files
@@ -112,6 +112,10 @@
   "821-madvise-willneed",
 ])
 
+known_slow_tests = frozenset([
+  "175-alloc-big-bignums",
+])
+
 # Known failing ART run-tests.
 # TODO(rpl): Investigate and address the causes of failures.
 known_failing_tests = frozenset([
@@ -417,6 +421,9 @@
     # All other tests are considered runnable.
     return True
 
+  def is_slow(self, run_test):
+    return run_test in known_slow_tests
+
   def regen_bp_files(self, run_tests, buildable_tests):
     for run_test in run_tests:
       # Remove any previously generated file.
@@ -437,7 +444,10 @@
     run_test_module_name = ART_RUN_TEST_MODULE_NAME_PREFIX + run_test
 
     if self.is_runnable(run_test):
-      test_config_template = "art-run-test-target-template"
+      if self.is_slow(run_test):
+        test_config_template= "art-run-test-target-slow-template"
+      else:
+        test_config_template = "art-run-test-target-template"
     else:
       test_config_template = "art-run-test-target-no-test-suite-tag-template"