autotest: Create PVS staging suite for moblab testing

Create a suite to run all CQ-blocking tests with a moblab.
This suite should contain all CQ blocking tests that do not require
special hardware that is not present in moblab setups (e.g. servos).

BUG=b:187530156
TEST=test_that ${DUT_IP_ADDR} suite:pvs-staging
--autotest_dir=${PATH_TO}/third_party/autotest/files/

Change-Id: I4bb047eab78197b4b8f0c7c6d3f85d1679a17018
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2918373
Tested-by: Mike Wiitala <mwiitala@google.com>
Auto-Submit: Mike Wiitala <mwiitala@google.com>
Reviewed-by: Tatsuhisa Yamaguchi <yamaguchi@chromium.org>
Reviewed-by: Greg Edelston <gredelston@google.com>
Reviewed-by: Seewai Fu <seewaifu@google.com>
Reviewed-by: Jared Loucks <jaredloucks@google.com>
Reviewed-by: Shuhei Takahashi <nya@chromium.org>
Commit-Queue: Jared Loucks <jaredloucks@google.com>
diff --git a/server/site_tests/tast/control.pvs-staging b/server/site_tests/tast/control.pvs-staging
new file mode 100644
index 0000000..0129eb7
--- /dev/null
+++ b/server/site_tests/tast/control.pvs-staging
@@ -0,0 +1,30 @@
+# Copyright 2021 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 = 'mwiitala, Chrome OS Kernel Team'
+NAME = 'tast.pvs-staging'
+TIME = 'MEDIUM'
+TEST_TYPE = 'Server'
+ATTRIBUTES = 'suite:pvs-staging'
+MAX_RESULT_SIZE_KB = 1024 * 1024
+
+# tast.py uses binaries installed from autotest_server_package.tar.bz2.
+REQUIRE_SSP = True
+
+DOC = '''
+Run the Tast test(s) which will be exported to partners for PVS testing.
+For more info on PVS, please check out go/cros-pvs-prd
+'''
+def run(machine):
+    job.run_test('tast',
+                 host=hosts.create_host(machine),
+                 test_exprs=['('
+                             '"group:mainline" && '
+                             '!informational && '
+                             '!"name:typec.Basic"' # typec.Basic requires a servo, which may not be available for PVS testing.
+                             ')'],
+                 ignore_test_failures=False, max_run_sec=3600,
+                 command_args=args,
+		 clear_tmp=True)
+parallel_simple(run, machines)
diff --git a/site_utils/attribute_allowlist.txt b/site_utils/attribute_allowlist.txt
index 330d1a5..257cd31 100644
--- a/site_utils/attribute_allowlist.txt
+++ b/site_utils/attribute_allowlist.txt
@@ -269,6 +269,7 @@
 suite:power_check
 suite:powerplay
 suite:push_to_prod
+suite:pvs-staging
 suite:pvs-uprev-exit
 suite:reboot_stress
 suite:regression
diff --git a/test_suites/control.pvs-staging b/test_suites/control.pvs-staging
new file mode 100644
index 0000000..e87ea3a
--- /dev/null
+++ b/test_suites/control.pvs-staging
@@ -0,0 +1,37 @@
+# Copyright 2021 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 = "mwiitala, Chrome OS Team"
+NAME = "pvs-staging"
+PURPOSE = "Verify that tests are stable and ready to be run by partners for PVS"
+
+TIME = "SHORT"
+TEST_CATEGORY = "General"
+TEST_CLASS = "suite"
+TEST_TYPE = "Server"
+
+DOC = """
+This test suite is used to verify tests that will become part of the Platform Validation Suite.
+This test suite should not be used for any purposes apart from testing done by the PVS team.
+
+For more info on PVS, please check out go/cros-pvs-prd.
+
+@param build: The name of the image to test.
+              Ex: x86-mario-release/R17-1412.33.0-a1-b29
+@param board: The board to test on. Ex: x86-mario
+@param pool: The pool of machines to utilize for scheduling. If pool=None
+             board is used.
+@param check_hosts: require appropriate live hosts to exist in the lab.
+@param SKIP_IMAGE: (optional) If present and True, don't re-image devices.
+"""
+
+import common
+from autotest_lib.server.cros.dynamic_suite import dynamic_suite
+
+args_dict['max_runtime_mins'] = 60
+args_dict['add_experimental'] = True
+args_dict['name'] = NAME
+args_dict['job'] = job
+
+dynamic_suite.reimage_and_run(**args_dict)
\ No newline at end of file