48 lines
2.2 KiB
Python
48 lines
2.2 KiB
Python
# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 1
|
|
# Use of this source code is governed by a BSD-style license that can be 2
|
|
# found in the LICENSE file.
|
|
|
|
"Module containing common utilities for server-side autoupdate tests."
|
|
|
|
import common
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.common_lib.cros import autoupdater, dev_server
|
|
from autotest_lib.server.cros.dynamic_suite import tools
|
|
|
|
|
|
def get_updater_from_repo_url(host, job_repo_url=None):
|
|
"""Returns the autoupdater instance to use for a given autoupdate test.
|
|
|
|
All server-side tests that run in the lab have an associated job_repo_url
|
|
assigned to their host that is associated with the version of the build that
|
|
is currently installed on them. Given most autoupdate tests need to
|
|
update to some build as part of the test, we conveniently re-update to the
|
|
same version installed. This method serves as a helper to get the
|
|
instantiated autoupdater instance for that build.
|
|
|
|
This method guarantees that the devserver associated with the autoupdater
|
|
has already staged the necessary files for autoupdate.
|
|
|
|
@param host: The host for the DUT of the server-side test.
|
|
@param job_repo_url: If set, the job_repo_url to use.
|
|
|
|
@raise error.TestError: If we fail to get a job_repo_url.
|
|
"""
|
|
# Get the job_repo_url -- if not present, attempt to use the one
|
|
# specified in the host attributes for the host.
|
|
if not job_repo_url:
|
|
info = host.host_info_store.get()
|
|
job_repo_url = info.attributes.get(host.job_repo_url_attribute, '')
|
|
if not job_repo_url:
|
|
raise error.TestError(
|
|
'Could not find a job_repo_url for the given host.')
|
|
|
|
# Get the devserver url and build (image) from the repo url e.g.
|
|
# 'http://mydevserver:8080', 'x86-alex-release/R27-123.0.0'
|
|
ds_url, build = tools.get_devserver_build_from_package_url(job_repo_url)
|
|
devserver = dev_server.ImageServer(ds_url)
|
|
devserver.stage_artifacts(build, ['full_payload', 'stateful'])
|
|
|
|
# We only need to update stateful to do this test.
|
|
return autoupdater.ChromiumOSUpdater(devserver.get_update_url(build),
|
|
host=host)
|