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

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

Issue 6551020: Merge remote branch 'autotest-upstream/master' into try-box1 (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git@master
Patch Set: patch Created 9 years, 10 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
« no previous file with comments | « client/tests/kvm/control ('k') | client/tests/kvm/kvm_config.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 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 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 224
225 # Do we want to save the result of the build on test.resultsdir? 225 # Do we want to save the result of the build on test.resultsdir?
226 self.save_results = True 226 self.save_results = True
227 save_results = params.get('save_results', 'no') 227 save_results = params.get('save_results', 'no')
228 if save_results == 'no': 228 if save_results == 'no':
229 self.save_results = False 229 self.save_results = False
230 230
231 self._full_module_list = list(self._module_list()) 231 self._full_module_list = list(self._module_list())
232 232
233 233
234 def install_unittests(self):
235 userspace_srcdir = os.path.join(self.srcdir, "kvm_userspace")
236 test_repo = self.params.get("test_git_repo")
237 test_branch = self.params.get("test_branch", "master")
238 test_commit = self.params.get("test_commit", None)
239 test_lbranch = self.params.get("test_lbranch", "master")
240
241 if test_repo:
242 test_srcdir = os.path.join(self.srcdir, "kvm-unit-tests")
243 kvm_utils.get_git_branch(test_repo, test_branch, test_srcdir,
244 test_commit, test_lbranch)
245 unittest_cfg = os.path.join(test_srcdir, 'x86',
246 'unittests.cfg')
247 self.test_srcdir = test_srcdir
248 else:
249 unittest_cfg = os.path.join(userspace_srcdir, 'kvm', 'test', 'x86',
250 'unittests.cfg')
251 self.unittest_cfg = None
252 if os.path.isfile(unittest_cfg):
253 self.unittest_cfg = unittest_cfg
254 else:
255 if test_repo:
256 logging.error("No unittest config file %s found, skipping "
257 "unittest build", self.unittest_cfg)
258
259 self.unittest_prefix = None
260 if self.unittest_cfg:
261 logging.info("Building and installing unittests")
262 os.chdir(os.path.dirname(os.path.dirname(self.unittest_cfg)))
263 utils.system('./configure --prefix=%s' % self.prefix)
264 utils.system('make')
265 utils.system('make install')
266 self.unittest_prefix = os.path.join(self.prefix, 'share', 'qemu',
267 'tests')
268
269
234 def full_module_list(self): 270 def full_module_list(self):
235 """Return the module list used by the installer 271 """Return the module list used by the installer
236 272
237 Used by the module_probe test, to avoid using utils.unload_module(). 273 Used by the module_probe test, to avoid using utils.unload_module().
238 """ 274 """
239 if self._full_module_list is None: 275 if self._full_module_list is None:
240 raise KvmNotInstalled("KVM modules not installed yet (installer: %s) " % (type(self))) 276 raise KvmNotInstalled("KVM modules not installed yet (installer: %s) " % (type(self)))
241 return self._full_module_list 277 return self._full_module_list
242 278
243 279
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 370
335 def _install_packages(self): 371 def _install_packages(self):
336 """ 372 """
337 Install all downloaded packages. 373 Install all downloaded packages.
338 """ 374 """
339 os.chdir(self.srcdir) 375 os.chdir(self.srcdir)
340 utils.system("yum install --nogpgcheck -y *.rpm") 376 utils.system("yum install --nogpgcheck -y *.rpm")
341 377
342 378
343 def install(self): 379 def install(self):
380 self.install_unittests()
344 self._clean_previous_installs() 381 self._clean_previous_installs()
345 self._get_packages() 382 self._get_packages()
346 self._install_packages() 383 self._install_packages()
347 create_symlinks(test_bindir=self.test_bindir, 384 create_symlinks(test_bindir=self.test_bindir,
348 bin_list=self.qemu_bin_paths) 385 bin_list=self.qemu_bin_paths,
386 unittest=self.unittest_prefix)
349 self.reload_modules_if_needed() 387 self.reload_modules_if_needed()
350 if self.save_results: 388 if self.save_results:
351 save_build(self.srcdir, self.results_dir) 389 save_build(self.srcdir, self.results_dir)
352 390
353 391
354 class KojiInstaller(YumInstaller): 392 class KojiInstaller(YumInstaller):
355 """ 393 """
356 Class that handles installing KVM from the fedora build service, koji. 394 Class that handles installing KVM from the fedora build service, koji.
357 It uses yum to install and remove packages. 395 It uses yum to install and remove packages.
358 """ 396 """
(...skipping 20 matching lines...) Expand all
379 """ 417 """
380 downloader = kvm_utils.KojiDownloader(cmd=self.koji_cmd) 418 downloader = kvm_utils.KojiDownloader(cmd=self.koji_cmd)
381 downloader.get(src_package=self.src_pkg, tag=self.tag, 419 downloader.get(src_package=self.src_pkg, tag=self.tag,
382 build=self.build, dst_dir=self.srcdir) 420 build=self.build, dst_dir=self.srcdir)
383 421
384 422
385 def install(self): 423 def install(self):
386 super(KojiInstaller, self)._clean_previous_installs() 424 super(KojiInstaller, self)._clean_previous_installs()
387 self._get_packages() 425 self._get_packages()
388 super(KojiInstaller, self)._install_packages() 426 super(KojiInstaller, self)._install_packages()
427 self.install_unittests()
389 create_symlinks(test_bindir=self.test_bindir, 428 create_symlinks(test_bindir=self.test_bindir,
390 bin_list=self.qemu_bin_paths) 429 bin_list=self.qemu_bin_paths,
430 unittest=self.unittest_prefix)
391 self.reload_modules_if_needed() 431 self.reload_modules_if_needed()
392 if self.save_results: 432 if self.save_results:
393 save_build(self.srcdir, self.results_dir) 433 save_build(self.srcdir, self.results_dir)
394 434
395 435
396 class SourceDirInstaller(BaseInstaller): 436 class SourceDirInstaller(BaseInstaller):
397 """ 437 """
398 Class that handles building/installing KVM directly from a tarball or 438 Class that handles building/installing KVM directly from a tarball or
399 a single source code dir. 439 a single source code dir.
400 """ 440 """
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 def _install(self): 565 def _install(self):
526 os.chdir(self.srcdir) 566 os.chdir(self.srcdir)
527 logging.info("Installing KVM userspace") 567 logging.info("Installing KVM userspace")
528 if self.repo_type == 1: 568 if self.repo_type == 1:
529 utils.system("make -C qemu install") 569 utils.system("make -C qemu install")
530 self._install_kmods_old_userspace(self.srcdir) 570 self._install_kmods_old_userspace(self.srcdir)
531 elif self.repo_type == 2: 571 elif self.repo_type == 2:
532 utils.system("make install") 572 utils.system("make install")
533 if self.path_to_roms: 573 if self.path_to_roms:
534 install_roms(self.path_to_roms, self.prefix) 574 install_roms(self.path_to_roms, self.prefix)
535 create_symlinks(self.test_bindir, self.prefix) 575 self.install_unittests()
576 create_symlinks(test_bindir=self.test_bindir,
577 prefix=self.prefix,
578 unittest=self.unittest_prefix)
536 579
537 580
538 def _load_modules(self, mod_list): 581 def _load_modules(self, mod_list):
539 # load the installed KVM modules in case we installed them 582 # load the installed KVM modules in case we installed them
540 # ourselves. Otherwise, just load the system modules. 583 # ourselves. Otherwise, just load the system modules.
541 if self.installed_kmods: 584 if self.installed_kmods:
542 logging.info("Loading installed KVM modules") 585 logging.info("Loading installed KVM modules")
543 _load_kvm_modules(mod_list, module_dir=self.mod_install_dir) 586 _load_kvm_modules(mod_list, module_dir=self.mod_install_dir)
544 else: 587 else:
545 logging.info("Loading stock KVM modules") 588 logging.info("Loading stock KVM modules")
(...skipping 11 matching lines...) Expand all
557 class GitInstaller(SourceDirInstaller): 600 class GitInstaller(SourceDirInstaller):
558 def _pull_code(self): 601 def _pull_code(self):
559 """ 602 """
560 Retrieves code from git repositories. 603 Retrieves code from git repositories.
561 """ 604 """
562 params = self.params 605 params = self.params
563 606
564 kernel_repo = params.get("git_repo") 607 kernel_repo = params.get("git_repo")
565 user_repo = params.get("user_git_repo") 608 user_repo = params.get("user_git_repo")
566 kmod_repo = params.get("kmod_repo") 609 kmod_repo = params.get("kmod_repo")
567 test_repo = params.get("test_git_repo")
568 610
569 kernel_branch = params.get("kernel_branch", "master") 611 kernel_branch = params.get("kernel_branch", "master")
570 user_branch = params.get("user_branch", "master") 612 user_branch = params.get("user_branch", "master")
571 kmod_branch = params.get("kmod_branch", "master") 613 kmod_branch = params.get("kmod_branch", "master")
572 test_branch = params.get("test_branch", "master")
573 614
574 kernel_lbranch = params.get("kernel_lbranch", "master") 615 kernel_lbranch = params.get("kernel_lbranch", "master")
575 user_lbranch = params.get("user_lbranch", "master") 616 user_lbranch = params.get("user_lbranch", "master")
576 kmod_lbranch = params.get("kmod_lbranch", "master") 617 kmod_lbranch = params.get("kmod_lbranch", "master")
577 test_lbranch = params.get("test_lbranch", "master")
578 618
579 kernel_commit = params.get("kernel_commit", None) 619 kernel_commit = params.get("kernel_commit", None)
580 user_commit = params.get("user_commit", None) 620 user_commit = params.get("user_commit", None)
581 kmod_commit = params.get("kmod_commit", None) 621 kmod_commit = params.get("kmod_commit", None)
582 test_commit = params.get("test_commit", None)
583 622
584 kernel_patches = eval(params.get("kernel_patches", "[]")) 623 kernel_patches = eval(params.get("kernel_patches", "[]"))
585 user_patches = eval(params.get("user_patches", "[]")) 624 user_patches = eval(params.get("user_patches", "[]"))
586 kmod_patches = eval(params.get("user_patches", "[]")) 625 kmod_patches = eval(params.get("user_patches", "[]"))
587 626
588 if not user_repo: 627 if not user_repo:
589 message = "KVM user git repository path not specified" 628 message = "KVM user git repository path not specified"
590 logging.error(message) 629 logging.error(message)
591 raise error.TestError(message) 630 raise error.TestError(message)
592 631
593 userspace_srcdir = os.path.join(self.srcdir, "kvm_userspace") 632 userspace_srcdir = os.path.join(self.srcdir, "kvm_userspace")
594 kvm_utils.get_git_branch(user_repo, user_branch, userspace_srcdir, 633 kvm_utils.get_git_branch(user_repo, user_branch, userspace_srcdir,
595 user_commit, user_lbranch) 634 user_commit, user_lbranch)
596 self.userspace_srcdir = userspace_srcdir 635 self.userspace_srcdir = userspace_srcdir
597 636
598 if user_patches: 637 if user_patches:
599 os.chdir(self.userspace_srcdir) 638 os.chdir(self.userspace_srcdir)
600 for patch in user_patches: 639 for patch in user_patches:
601 utils.get_file(patch, os.path.join(self.userspace_srcdir, 640 utils.get_file(patch, os.path.join(self.userspace_srcdir,
602 os.path.basename(patch))) 641 os.path.basename(patch)))
603 utils.system('patch -p1 %s' % os.path.basename(patch)) 642 utils.system('patch -p1 %s' % os.path.basename(patch))
604 643
605 if test_repo:
606 test_srcdir = os.path.join(self.srcdir, "kvm-unit-tests")
607 kvm_utils.get_git_branch(test_repo, test_branch, test_srcdir,
608 test_commit, test_lbranch)
609 unittest_cfg = os.path.join(test_srcdir, 'x86',
610 'unittests.cfg')
611 self.test_srcdir = test_srcdir
612 else:
613 unittest_cfg = os.path.join(userspace_srcdir, 'kvm', 'test', 'x86',
614 'unittests.cfg')
615
616 self.unittest_cfg = None
617 if os.path.isfile(unittest_cfg):
618 self.unittest_cfg = unittest_cfg
619
620 if kernel_repo: 644 if kernel_repo:
621 kernel_srcdir = os.path.join(self.srcdir, "kvm") 645 kernel_srcdir = os.path.join(self.srcdir, "kvm")
622 kvm_utils.get_git_branch(kernel_repo, kernel_branch, kernel_srcdir, 646 kvm_utils.get_git_branch(kernel_repo, kernel_branch, kernel_srcdir,
623 kernel_commit, kernel_lbranch) 647 kernel_commit, kernel_lbranch)
624 self.kernel_srcdir = kernel_srcdir 648 self.kernel_srcdir = kernel_srcdir
625 if kernel_patches: 649 if kernel_patches:
626 os.chdir(self.kernel_srcdir) 650 os.chdir(self.kernel_srcdir)
627 for patch in kernel_patches: 651 for patch in kernel_patches:
628 utils.get_file(patch, os.path.join(self.userspace_srcdir, 652 utils.get_file(patch, os.path.join(self.userspace_srcdir,
629 os.path.basename(patch))) 653 os.path.basename(patch)))
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 os.chdir(self.userspace_srcdir) 700 os.chdir(self.userspace_srcdir)
677 cfg += ' --prefix=%s' % self.prefix 701 cfg += ' --prefix=%s' % self.prefix
678 if "--disable-strip" in self.configure_options: 702 if "--disable-strip" in self.configure_options:
679 cfg += ' --disable-strip' 703 cfg += ' --disable-strip'
680 if self.extra_configure_options: 704 if self.extra_configure_options:
681 cfg += ' %s' % self.extra_configure_options 705 cfg += ' %s' % self.extra_configure_options
682 utils.system(cfg) 706 utils.system(cfg)
683 utils.system('make clean') 707 utils.system('make clean')
684 utils.system('make -j %s' % make_jobs) 708 utils.system('make -j %s' % make_jobs)
685 709
686 self.unittest_prefix = None
687 if self.unittest_cfg:
688 os.chdir(os.path.dirname(os.path.dirname(self.unittest_cfg)))
689 utils.system('./configure --prefix=%s' % self.prefix)
690 utils.system('make')
691 utils.system('make install')
692 self.unittest_prefix = os.path.join(self.prefix, 'share', 'qemu',
693 'tests')
694
695 710
696 def _install(self): 711 def _install(self):
697 if self.kernel_srcdir: 712 if self.kernel_srcdir:
698 os.chdir(self.userspace_srcdir) 713 os.chdir(self.userspace_srcdir)
699 # the kernel module install with --prefix doesn't work, and DESTDIR 714 # the kernel module install with --prefix doesn't work, and DESTDIR
700 # wouldn't work for the userspace stuff, so we clear WANT_MODULE: 715 # wouldn't work for the userspace stuff, so we clear WANT_MODULE:
701 utils.system('make install WANT_MODULE=') 716 utils.system('make install WANT_MODULE=')
702 # and install the old-style-kmod modules manually: 717 # and install the old-style-kmod modules manually:
703 self._install_kmods_old_userspace(self.userspace_srcdir) 718 self._install_kmods_old_userspace(self.userspace_srcdir)
704 elif self.kmod_srcdir: 719 elif self.kmod_srcdir:
705 # if we have a kmod repository, it is easier: 720 # if we have a kmod repository, it is easier:
706 # 1) install userspace: 721 # 1) install userspace:
707 os.chdir(self.userspace_srcdir) 722 os.chdir(self.userspace_srcdir)
708 utils.system('make install') 723 utils.system('make install')
709 # 2) install kmod: 724 # 2) install kmod:
710 self._install_kmods(self.kmod_srcdir) 725 self._install_kmods(self.kmod_srcdir)
711 else: 726 else:
712 # if we don't have kmod sources, we just install 727 # if we don't have kmod sources, we just install
713 # userspace: 728 # userspace:
714 os.chdir(self.userspace_srcdir) 729 os.chdir(self.userspace_srcdir)
715 utils.system('make install') 730 utils.system('make install')
716 731
717 if self.path_to_roms: 732 if self.path_to_roms:
718 install_roms(self.path_to_roms, self.prefix) 733 install_roms(self.path_to_roms, self.prefix)
734 self.install_unittests()
719 create_symlinks(test_bindir=self.test_bindir, prefix=self.prefix, 735 create_symlinks(test_bindir=self.test_bindir, prefix=self.prefix,
720 bin_list=None, 736 bin_list=None,
721 unittest=self.unittest_prefix) 737 unittest=self.unittest_prefix)
722 738
723 739
724 def install(self): 740 def install(self):
725 self._pull_code() 741 self._pull_code()
726 self._build() 742 self._build()
727 self._install() 743 self._install()
728 self.reload_modules_if_needed() 744 self.reload_modules_if_needed()
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 return c 788 return c
773 789
774 790
775 def make_installer(params): 791 def make_installer(params):
776 # priority: 792 # priority:
777 # - 'install_mode' param 793 # - 'install_mode' param
778 # - 'mode' param 794 # - 'mode' param
779 mode = params.get("install_mode", params.get("mode")) 795 mode = params.get("install_mode", params.get("mode"))
780 klass = _installer_class(mode) 796 klass = _installer_class(mode)
781 return klass(mode) 797 return klass(mode)
OLDNEW
« no previous file with comments | « client/tests/kvm/control ('k') | client/tests/kvm/kvm_config.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698