Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(596)

Side by Side Diff: client/tests/kvm/tests/build.py

Issue 4823005: Merge remote branch 'cros/upstream' into tempbranch (Closed) Base URL: http://git.chromium.org/git/autotest.git@master
Patch Set: patch Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « client/tests/kvm/scripts/unattended.py ('k') | client/tests/kvm/tests/ethtool.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 import time, os, sys, urllib, re, signal, logging, datetime, glob, ConfigParser 1 import time, os, sys, urllib, re, signal, logging, datetime, glob, ConfigParser
2 import shutil 2 import shutil
3 try:
4 import koji
5 KOJI_INSTALLED = True
6 except ImportError:
7 KOJI_INSTALLED = False
8 from autotest_lib.client.bin import utils, test, os_dep 3 from autotest_lib.client.bin import utils, test, os_dep
9 from autotest_lib.client.common_lib import error 4 from autotest_lib.client.common_lib import error
10 import kvm_utils 5 import kvm_utils
11 6
12 7
13 def check_configure_options(script_path): 8 def check_configure_options(script_path):
14 """ 9 """
15 Return the list of available options (flags) of a given kvm configure build 10 Return the list of available options (flags) of a given kvm configure build
16 script. 11 script.
17 12
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 save_build(self.srcdir, self.results_dir) 256 save_build(self.srcdir, self.results_dir)
262 257
263 258
264 class KojiInstaller(YumInstaller): 259 class KojiInstaller(YumInstaller):
265 """ 260 """
266 Class that handles installing KVM from the fedora build service, koji. 261 Class that handles installing KVM from the fedora build service, koji.
267 It uses yum to install and remove packages. 262 It uses yum to install and remove packages.
268 """ 263 """
269 def __init__(self, test, params): 264 def __init__(self, test, params):
270 """ 265 """
271 Initialize koji/brew session. 266 Gets parameters and initializes the package downloader.
272 267
273 @param test: kvm test object 268 @param test: kvm test object
274 @param params: Dictionary with test arguments 269 @param params: Dictionary with test arguments
275 """ 270 """
276 super(KojiInstaller, self).__init__(test, params) 271 super(KojiInstaller, self).__init__(test, params)
277
278 default_koji_cmd = '/usr/bin/koji' 272 default_koji_cmd = '/usr/bin/koji'
279 default_src_pkg = 'qemu' 273 default_src_pkg = 'qemu'
280
281 self.koji_cmd = params.get("koji_cmd", default_koji_cmd)
282 self.src_pkg = params.get("src_pkg", default_src_pkg) 274 self.src_pkg = params.get("src_pkg", default_src_pkg)
283
284 # Checking if all required dependencies are available
285 os_dep.command(self.koji_cmd)
286
287 config_map = {'/usr/bin/koji': '/etc/koji.conf',
288 '/usr/bin/brew': '/etc/brewkoji.conf'}
289 config_file = config_map[self.koji_cmd]
290 base_name = os.path.basename(self.koji_cmd)
291 if os.access(config_file, os.F_OK):
292 f = open(config_file)
293 config = ConfigParser.ConfigParser()
294 config.readfp(f)
295 f.close()
296 else:
297 raise error.TestError('Configuration file %s missing or with wrong '
298 'permissions' % config_file)
299
300 if config.has_section(base_name):
301 self.koji_options = {}
302 session_options = {}
303 server = None
304 for name, value in config.items(base_name):
305 if name in ('user', 'password', 'debug_xmlrpc', 'debug'):
306 session_options[name] = value
307 self.koji_options[name] = value
308 self.session = koji.ClientSession(self.koji_options['server'],
309 session_options)
310 else:
311 raise error.TestError('Koji config file %s does not have a %s '
312 'session' % (config_file, base_name))
313
314 self.tag = params.get("koji_tag", None) 275 self.tag = params.get("koji_tag", None)
315 self.build = params.get("koji_build", None) 276 self.build = params.get("koji_build", None)
316 if self.build and self.build.isdigit(): 277 koji_cmd = params.get("koji_cmd", default_koji_cmd)
317 self.build = int(self.build) 278 self.downloader = kvm_utils.KojiDownloader(cmd=koji_cmd)
318 if self.tag and self.build:
319 logging.info("Both tag and build parameters provided, ignoring tag "
320 "parameter...")
321 if not self.tag and not self.build:
322 raise error.TestError("Koji install selected but neither koji_tag "
323 "nor koji_build parameters provided. Please "
324 "provide an appropriate tag or build name.")
325 279
326 280
327 def _get_packages(self): 281 def _get_packages(self):
328 """ 282 """
329 Downloads the specific arch RPMs for the specific build name. 283 Downloads the specific arch RPMs for the specific build name.
330 """ 284 """
331 if self.build is None: 285 self.downloader.get(src_package=self.src_pkg, tag=self.tag,
332 try: 286 build=self.build, dst_dir=self.srcdir)
333 builds = self.session.listTagged(self.tag, latest=True,
334 package=self.src_pkg)
335 except koji.GenericError, e:
336 raise error.TestError("Error finding latest build for tag %s: "
337 "%s" % (self.tag, e))
338 if not builds:
339 raise error.TestError("Tag %s has no builds of %s" %
340 (self.tag, self.src_pkg))
341 info = builds[0]
342 else:
343 info = self.session.getBuild(self.build)
344
345 if info is None:
346 raise error.TestError('No such brew/koji build: %s' %
347 self.build)
348 rpms = self.session.listRPMs(buildID=info['id'],
349 arches=utils.get_arch())
350 if not rpms:
351 raise error.TestError("No %s packages available for %s" %
352 utils.get_arch(), koji.buildLabel(info))
353 for rpm in rpms:
354 rpm_name = koji.pathinfo.rpm(rpm)
355 url = ("%s/%s/%s/%s/%s" % (self.koji_options['pkgurl'],
356 info['package_name'],
357 info['version'], info['release'],
358 rpm_name))
359 utils.get_file(url,
360 os.path.join(self.srcdir, os.path.basename(url)))
361 287
362 288
363 def install(self): 289 def install(self):
364 super(KojiInstaller, self)._clean_previous_installs() 290 super(KojiInstaller, self)._clean_previous_installs()
365 self._get_packages() 291 self._get_packages()
366 super(KojiInstaller, self)._install_packages() 292 super(KojiInstaller, self)._install_packages()
367 create_symlinks(test_bindir=self.test_bindir, 293 create_symlinks(test_bindir=self.test_bindir,
368 bin_list=self.qemu_bin_paths) 294 bin_list=self.qemu_bin_paths)
369 if self.load_modules: 295 if self.load_modules:
370 load_kvm_modules(load_stock=True, extra_modules=self.extra_modules) 296 load_kvm_modules(load_stock=True, extra_modules=self.extra_modules)
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 srcdir = params.get("srcdir", test.srcdir) 599 srcdir = params.get("srcdir", test.srcdir)
674 params["srcdir"] = srcdir 600 params["srcdir"] = srcdir
675 601
676 if install_mode in ['localsrc', 'localtar', 'release', 'snapshot']: 602 if install_mode in ['localsrc', 'localtar', 'release', 'snapshot']:
677 installer = SourceDirInstaller(test, params) 603 installer = SourceDirInstaller(test, params)
678 elif install_mode == 'git': 604 elif install_mode == 'git':
679 installer = GitInstaller(test, params) 605 installer = GitInstaller(test, params)
680 elif install_mode == 'yum': 606 elif install_mode == 'yum':
681 installer = YumInstaller(test, params) 607 installer = YumInstaller(test, params)
682 elif install_mode == 'koji': 608 elif install_mode == 'koji':
683 if KOJI_INSTALLED: 609 installer = KojiInstaller(test, params)
684 installer = KojiInstaller(test, params)
685 else:
686 raise error.TestError('Koji install selected but koji/brew are not '
687 'installed')
688 else: 610 else:
689 raise error.TestError('Invalid or unsupported' 611 raise error.TestError('Invalid or unsupported'
690 ' install mode: %s' % install_mode) 612 ' install mode: %s' % install_mode)
691 613
692 installer.install() 614 installer.install()
OLDNEW
« no previous file with comments | « client/tests/kvm/scripts/unattended.py ('k') | client/tests/kvm/tests/ethtool.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698