# Copyright 2023 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Run RACC tests.
#
# Tast is an integration-testing framework analagous to the test-running
# portion of Autotest. See
# https://chromium.googlesource.com/chromiumos/platform/tast/ for more
# information.
#
# This test runs RACC-related Tast test.


NAME = 'tast.racc-config-installed'
METADATA = {
    'contacts': [
        'chromeos-runtime-probe@google.com',
        'clarkchung@google.com',
    ],
    'bug_component': 'b:606088',
    'criteria': ('Medium, this test runs several RACC related tast tests to '
                 'verify if the probe configs align with the HW comp.'),
    'hw_agnostic': False,
}
ATTRIBUTES = 'suite:racc_config_installed_perbuild'
TEST_TYPE = 'Server'

# tast.py uses binaries installed from autotest_server_package.tar.bz2.
REQUIRE_SSP = True


import json
import tempfile
import yaml

def run(machine):
    host = hosts.create_host(machine)
    with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as temp_file:
        host_info = host.host_info_store.get()
        yaml.safe_dump({'autotesthostinfolabels':
                        json.dumps(host_info.labels)}, stream=temp_file)
        temp_file.flush()
        job.run_test('tast',
                     host=host,
                     test_exprs=['("group:racc" && "racc_config_installed")'],
                     command_args=args,
                     varsfiles=[temp_file.name])

parallel_simple(run, machines)
