Restrict rtc_test_suite to only allow tests and forward shard_timeout in rtc_cc_test

Bug: webrtc:498394143
Change-Id: I08d1ddd488ca697ddc85ea4119fdf51a6a6a6964
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/465360
Commit-Queue: Evan Shrubsole <eshr@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#47600}
diff --git a/BUILD.gn b/BUILD.gn
index 40ac574..b6d3d04 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -750,7 +750,6 @@
   }
 
   rtc_test_suite("webrtc_nonparallel_tests") {
-    testonly = true
     tests = [
       "rtc_base:cpu_time_unittest",
       "rtc_base:file_rotating_stream_unittest",
@@ -758,9 +757,6 @@
       "rtc_base:physical_socket_server_unittest",
       "rtc_base:socket_address_unittest",
     ]
-    if (is_android) {
-      shard_timeout = 900
-    }
   }
 
   rtc_test("voip_unittests") {
diff --git a/webrtc.gni b/webrtc.gni
index 8428c0d..48237e0 100644
--- a/webrtc.gni
+++ b/webrtc.gni
@@ -1341,6 +1341,9 @@
     if (defined(invoker.data_deps)) {
       data_deps = invoker.data_deps
     }
+    if (defined(invoker.shard_timeout)) {
+      shard_timeout = invoker.shard_timeout
+    }
   }
 }
 
@@ -1355,6 +1358,11 @@
 #   tests: List of rtc_cc_test targets to include in this suite.
 #   deps: Additional dependencies (e.g. groups of tests).
 template("rtc_test_suite") {
+  if (defined(invoker.testonly)) {
+    testonly = invoker.testonly
+  } else {
+    testonly = true
+  }
   _suite_name = target_name
 
   # This checks that all of the tests strings listed are an rtc_cc_test by
@@ -1373,7 +1381,7 @@
     _check_target = "${_suite_name}_${_safe_label}_check"
 
     generated_file(_check_target) {
-      testonly = true
+      testonly = testonly
       outputs = [ _output_file ]
       data_keys = [ "rtc_cc_test" ]
       output_conversion = "json"
@@ -1393,7 +1401,7 @@
              "json")
 
   action("${_suite_name}_verify_metadata") {
-    testonly = true
+    testonly = testonly
     script = "//tools_webrtc/verify_test_suite_metadata.py"
     inputs = [ "$target_gen_dir/${_suite_name}_metadata_map.json" ]
     outputs = [ "$target_gen_dir/${_suite_name}_metadata.stamp" ]
@@ -1404,16 +1412,16 @@
     deps = _metadata_check_deps
   }
 
-  rtc_test(_suite_name) {
-    forward_variables_from(invoker, "*", [ "tests" ])
+  assert(!defined(invoker.deps), "rtc_test_suite does not allow deps")
 
-    if (!defined(deps)) {
-      deps = []
-    }
-    if (defined(invoker.deps)) {
-      deps += invoker.deps
-    }
-    deps += invoker.tests
+  # TODO(webrtc:498394143): Infer shard_timeout for the suite based on the
+  # individual test timeouts if shard_timeouts are still required.
+  rtc_test(_suite_name) {
+    testonly = true
+    deps = invoker.tests
     deps += [ ":${_suite_name}_verify_metadata" ]
+    if (defined(invoker.shard_timeout)) {
+      shard_timeout = invoker.shard_timeout
+    }
   }
 }