# Copyright (c) 2013 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 = "chromeos-installer@google.com"
NAME = "paygen_au_beta"
PURPOSE = "Automated testing of delta payloads generated by paygen."

TIME = "MEDIUM"
TEST_CATEGORY = "General"
TEST_CLASS = "suite"
TEST_TYPE = "Server"

DOC = """
This suite is similar to the au suite except that it's generated during paygen
and does not close the tree when the tests fail. There will be one test per
delta generated by paygen for a given release image. These tests (control
files) are generated at the time we are generating delta payloads, uploaded
by paygen, and expected to be kicked off by paygen. This suite can be re-run
at anytime using atest or the autotest web frontend.

Note: the control files used by this suite are auto-generated and the template
control file is in server/site_tests/autoupdate_EndToEndTest/control.

Note: this suite only tests deltas from the beta channel.

@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.
"""

import common
from autotest_lib.client.common_lib.cros import dev_server
from autotest_lib.server.cros import provision
from autotest_lib.server.cros.dynamic_suite import dynamic_suite

# Needs to be done to generate the control files for the suite.
ds = dev_server.ImageServer(devserver_url)
ds.stage_artifacts(build, artifacts=['paygen_au_beta_suite'])

# Values specified in this bug template will override default values when
# filing bugs on tests that are a part of this suite. If left unspecified
# the bug filer will fallback to it's defaults.
_BUG_TEMPLATE = {
    'labels': ['Cr-Internals-Installer'],
    'owner': '',
    'status': None,
    'summary': None,
    'title': None,
    'cc': ['chromeos-installer-alerts@google.com']
}

# TODO(sosa): Really should skip_reimage but suite logic does not currently
# work without reimaging.
args_dict['max_runtime_mins'] = 60
args_dict['name'] = NAME
args_dict['job'] = job
args_dict['add_experimental'] = True
args_dict['version_prefix'] = provision.CROS_VERSION_PREFIX
args_dict['bug_template'] = _BUG_TEMPLATE

dynamic_suite.reimage_and_run(**args_dict)
