# 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_dev"
PURPOSE = "Automated testing of delta payloads generated by paygen."
CRITERIA = "All tests with SUITE=paygen_au_dev must pass."

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 dev 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_dev_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': None
}

# TODO(sosa): Really should skip_reimage but suite logic does not currently
# work without reimaging.
dynamic_suite.reimage_and_run(
    build=build, board=board, name=NAME, job=job, pool=pool,
    check_hosts=check_hosts, add_experimental=True, num=num,
    file_bugs=file_bugs, priority=priority, timeout_mins=timeout_mins,
    max_runtime_mins=60, bug_template=_BUG_TEMPLATE,
    devserver_url=devserver_url,
    version_prefix=provision.CROS_VERSION_PREFIX,
    wait_for_results=wait_for_results)
