# 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.

NAME = 'storage_testing_v3_stress_suspend_2'
METADATA = {
    'contacts': ['chromeos-storage@google.com'],
    'bug_component': 'b:974567',
    'criteria': 'Part of Storage Testing v3',
    'hw_agnostic': False
}
ATTRIBUTES = 'suite:storage-qual-avl-v3'
TEST_TYPE = 'Server'
DEPENDENCIES = 'servo_state:WORKING'
PRIORITY = 190
MAX_RESULT_SIZE_KB = 1024 * 1024
JOB_RETRIES = 0
REQUIRE_SSP = True
FAST = False

from autotest_lib.client.common_lib import utils

args_dict = utils.args_to_dict(args)
assert 'servo_state:WORKING' in DEPENDENCIES
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

keyval = dict()
keyval['storage_qual_version'] = 3
try:
    keyval['bug_id'] = args_dict['bug_id']
    keyval['part_id'] = args_dict['part_id']
except KeyError:
    # bug_id and/or part_id variables not defined
    pass

try:
    # process qual_run_id separately to ensure that bug_id and part_id
    # are captured even if it's not a qual run
    keyval['qual_run_id'] = args_dict['qual_run_id']
except KeyError:
    # qual_run_id not defined
    pass

utils.write_keyval(job.resultdir, keyval)

def run(machine):
    job.run_test('tast',
                host=hosts.create_host(machine, servo_args=servo_args),
                test_exprs=['storage.SuspendStress.iteration_2'],
                ignore_test_failures=False,
                max_run_sec=28800,
                ephemeraldevserver=False,
                report_skipped=True,
                command_args=args)

parallel_simple(run, machines)
