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

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

Issue 6883035: Merge remote branch 'autotest-upstream/master' into autotest-merge (Closed) Base URL: ssh://gitrw.chromium.org:9222/autotest.git@master
Patch Set: patch Created 9 years, 8 months 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
OLDNEW
1 import os, logging, datetime, glob 1 import os, logging, datetime, glob
2 import shutil 2 import shutil
3 from autotest_lib.client.bin import utils, os_dep 3 from autotest_lib.client.bin import utils, os_dep
4 from autotest_lib.client.common_lib import error 4 from autotest_lib.client.common_lib import error
5 import kvm_utils 5 import kvm_utils
6 6
7 7
8 def check_configure_options(script_path): 8 def check_configure_options(script_path):
9 """ 9 """
10 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
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 bin_list=self.qemu_bin_paths, 385 bin_list=self.qemu_bin_paths,
386 unittest=self.unittest_prefix) 386 unittest=self.unittest_prefix)
387 self.reload_modules_if_needed() 387 self.reload_modules_if_needed()
388 if self.save_results: 388 if self.save_results:
389 save_build(self.srcdir, self.results_dir) 389 save_build(self.srcdir, self.results_dir)
390 390
391 391
392 class KojiInstaller(YumInstaller): 392 class KojiInstaller(YumInstaller):
393 """ 393 """
394 Class that handles installing KVM from the fedora build service, koji. 394 Class that handles installing KVM from the fedora build service, koji.
395 It uses yum to install and remove packages. 395
396 It uses yum to install and remove packages. Packages are specified
397 according to the syntax defined in the PkgSpec class.
396 """ 398 """
397 load_stock_modules = True 399 load_stock_modules = True
398 def set_install_params(self, test, params): 400 def set_install_params(self, test, params):
399 """ 401 """
400 Gets parameters and initializes the package downloader. 402 Gets parameters and initializes the package downloader.
401 403
402 @param test: kvm test object 404 @param test: kvm test object
403 @param params: Dictionary with test arguments 405 @param params: Dictionary with test arguments
404 """ 406 """
405 super(KojiInstaller, self).set_install_params(test, params) 407 super(KojiInstaller, self).set_install_params(test, params)
406 default_koji_cmd = '/usr/bin/koji'
407 default_src_pkg = 'qemu'
408 self.src_pkg = params.get("src_pkg", default_src_pkg)
409 self.tag = params.get("koji_tag", None) 408 self.tag = params.get("koji_tag", None)
410 self.build = params.get("koji_build", None) 409 self.koji_cmd = params.get("koji_cmd", None)
411 self.koji_cmd = params.get("koji_cmd", default_koji_cmd) 410 if self.tag is not None:
411 kvm_utils.set_default_koji_tag(self.tag)
412 self.koji_pkgs = eval(params.get("koji_pkgs", "[]"))
412 413
413 414
414 def _get_packages(self): 415 def _get_packages(self):
415 """ 416 """
416 Downloads the specific arch RPMs for the specific build name. 417 Downloads the specific arch RPMs for the specific build name.
417 """ 418 """
418 downloader = kvm_utils.KojiDownloader(cmd=self.koji_cmd) 419 koji_client = kvm_utils.KojiClient(cmd=self.koji_cmd)
419 downloader.get(src_package=self.src_pkg, tag=self.tag, 420 for pkg_text in self.koji_pkgs:
420 build=self.build, dst_dir=self.srcdir) 421 pkg = kvm_utils.KojiPkgSpec(pkg_text)
422 if pkg.is_valid():
423 koji_client.get_pkgs(pkg, dst_dir=self.srcdir)
424 else:
425 logging.error('Package specification (%s) is invalid: %s', pkg,
426 pkg.describe_invalid())
427
428
429 def _clean_previous_installs(self):
430 kill_qemu_processes()
431 removable_packages = " ".join(self._get_rpm_names())
432 utils.system("yum -y remove %s" % removable_packages)
421 433
422 434
423 def install(self): 435 def install(self):
424 super(KojiInstaller, self)._clean_previous_installs() 436 self._clean_previous_installs()
425 self._get_packages() 437 self._get_packages()
426 super(KojiInstaller, self)._install_packages() 438 self._install_packages()
427 self.install_unittests() 439 self.install_unittests()
428 create_symlinks(test_bindir=self.test_bindir, 440 create_symlinks(test_bindir=self.test_bindir,
429 bin_list=self.qemu_bin_paths, 441 bin_list=self.qemu_bin_paths,
430 unittest=self.unittest_prefix) 442 unittest=self.unittest_prefix)
431 self.reload_modules_if_needed() 443 self.reload_modules_if_needed()
432 if self.save_results: 444 if self.save_results:
433 save_build(self.srcdir, self.results_dir) 445 save_build(self.srcdir, self.results_dir)
434 446
435 447
448 def _get_rpm_names(self):
449 all_rpm_names = []
450 koji_client = kvm_utils.KojiClient(cmd=self.koji_cmd)
451 for pkg_text in self.koji_pkgs:
452 pkg = kvm_utils.KojiPkgSpec(pkg_text)
453 rpm_names = koji_client.get_pkg_rpm_names(pkg)
454 all_rpm_names += rpm_names
455 return all_rpm_names
456
457
458 def _get_rpm_file_names(self):
459 all_rpm_file_names = []
460 koji_client = kvm_utils.KojiClient(cmd=self.koji_cmd)
461 for pkg_text in self.koji_pkgs:
462 pkg = kvm_utils.KojiPkgSpec(pkg_text)
463 rpm_file_names = koji_client.get_pkg_rpm_file_names(pkg)
464 all_rpm_file_names += rpm_file_names
465 return all_rpm_file_names
466
467
468 def _install_packages(self):
469 """
470 Install all downloaded packages.
471 """
472 os.chdir(self.srcdir)
473 rpm_file_names = " ".join(self._get_rpm_file_names())
474 utils.system("yum --nogpgcheck -y localinstall %s" % rpm_file_names)
475
476
436 class SourceDirInstaller(BaseInstaller): 477 class SourceDirInstaller(BaseInstaller):
437 """ 478 """
438 Class that handles building/installing KVM directly from a tarball or 479 Class that handles building/installing KVM directly from a tarball or
439 a single source code dir. 480 a single source code dir.
440 """ 481 """
441 def set_install_params(self, test, params): 482 def set_install_params(self, test, params):
442 """ 483 """
443 Initializes class attributes, and retrieves KVM code. 484 Initializes class attributes, and retrieves KVM code.
444 485
445 @param test: kvm test object 486 @param test: kvm test object
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 userspace_srcdir = os.path.join(self.srcdir, "kvm_userspace") 673 userspace_srcdir = os.path.join(self.srcdir, "kvm_userspace")
633 kvm_utils.get_git_branch(user_repo, user_branch, userspace_srcdir, 674 kvm_utils.get_git_branch(user_repo, user_branch, userspace_srcdir,
634 user_commit, user_lbranch) 675 user_commit, user_lbranch)
635 self.userspace_srcdir = userspace_srcdir 676 self.userspace_srcdir = userspace_srcdir
636 677
637 if user_patches: 678 if user_patches:
638 os.chdir(self.userspace_srcdir) 679 os.chdir(self.userspace_srcdir)
639 for patch in user_patches: 680 for patch in user_patches:
640 utils.get_file(patch, os.path.join(self.userspace_srcdir, 681 utils.get_file(patch, os.path.join(self.userspace_srcdir,
641 os.path.basename(patch))) 682 os.path.basename(patch)))
642 utils.system('patch -p1 %s' % os.path.basename(patch)) 683 utils.system('patch -p1 < %s' % os.path.basename(patch))
643 684
644 if kernel_repo: 685 if kernel_repo:
645 kernel_srcdir = os.path.join(self.srcdir, "kvm") 686 kernel_srcdir = os.path.join(self.srcdir, "kvm")
646 kvm_utils.get_git_branch(kernel_repo, kernel_branch, kernel_srcdir, 687 kvm_utils.get_git_branch(kernel_repo, kernel_branch, kernel_srcdir,
647 kernel_commit, kernel_lbranch) 688 kernel_commit, kernel_lbranch)
648 self.kernel_srcdir = kernel_srcdir 689 self.kernel_srcdir = kernel_srcdir
649 if kernel_patches: 690 if kernel_patches:
650 os.chdir(self.kernel_srcdir) 691 os.chdir(self.kernel_srcdir)
651 for patch in kernel_patches: 692 for patch in kernel_patches:
652 utils.get_file(patch, os.path.join(self.userspace_srcdir, 693 utils.get_file(patch, os.path.join(self.userspace_srcdir,
653 os.path.basename(patch))) 694 os.path.basename(patch)))
654 utils.system('patch -p1 %s' % os.path.basename(patch)) 695 utils.system('patch -p1 < %s' % os.path.basename(patch))
655 else: 696 else:
656 self.kernel_srcdir = None 697 self.kernel_srcdir = None
657 698
658 if kmod_repo: 699 if kmod_repo:
659 kmod_srcdir = os.path.join (self.srcdir, "kvm_kmod") 700 kmod_srcdir = os.path.join (self.srcdir, "kvm_kmod")
660 kvm_utils.get_git_branch(kmod_repo, kmod_branch, kmod_srcdir, 701 kvm_utils.get_git_branch(kmod_repo, kmod_branch, kmod_srcdir,
661 kmod_commit, kmod_lbranch) 702 kmod_commit, kmod_lbranch)
662 self.kmod_srcdir = kmod_srcdir 703 self.kmod_srcdir = kmod_srcdir
663 if kmod_patches: 704 if kmod_patches:
664 os.chdir(self.kmod_srcdir) 705 os.chdir(self.kmod_srcdir)
665 for patch in kmod_patches: 706 for patch in kmod_patches:
666 utils.get_file(patch, os.path.join(self.userspace_srcdir, 707 utils.get_file(patch, os.path.join(self.userspace_srcdir,
667 os.path.basename(patch))) 708 os.path.basename(patch)))
668 utils.system('patch -p1 %s' % os.path.basename(patch)) 709 utils.system('patch -p1 < %s' % os.path.basename(patch))
669 else: 710 else:
670 self.kmod_srcdir = None 711 self.kmod_srcdir = None
671 712
672 configure_script = os.path.join(self.userspace_srcdir, 'configure') 713 configure_script = os.path.join(self.userspace_srcdir, 'configure')
673 self.configure_options = check_configure_options(configure_script) 714 self.configure_options = check_configure_options(configure_script)
674 715
675 716
676 def _build(self): 717 def _build(self):
677 make_jobs = utils.count_cpus() 718 make_jobs = utils.count_cpus()
678 cfg = './configure' 719 cfg = './configure'
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 return c 829 return c
789 830
790 831
791 def make_installer(params): 832 def make_installer(params):
792 # priority: 833 # priority:
793 # - 'install_mode' param 834 # - 'install_mode' param
794 # - 'mode' param 835 # - 'mode' param
795 mode = params.get("install_mode", params.get("mode")) 836 mode = params.get("install_mode", params.get("mode"))
796 klass = _installer_class(mode) 837 klass = _installer_class(mode)
797 return klass(mode) 838 return klass(mode)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698