def _Build(self):
    """Update the chroot, then merge the requested packages."""
    if self.chroot_update and self.host:
      chroot_util.UpdateChroot()

    chroot_util.Emerge(self.build_pkgs, self.sysroot,
                       with_deps=self.options.deps,
                       rebuild_deps=self.options.rebuild_deps,
                       use_binary=self.options.binary, jobs=self.options.jobs,
                       debug_output=(self.options.log_level.lower() == 'debug'))
    def testEmerge(self):
        """Tests correct invocation of emerge."""
        packages = ['foo-app/bar', 'sys-baz/clap']
        self.PatchObject(cros_list_modified_packages,
                         'ListModifiedWorkonPackages',
                         return_value=[packages[0]])

        toolchain_packages = [
            'sys-devel/binutils', 'sys-devel/gcc', 'sys-kernel/linux-headers',
            'sys-libs/glibc', 'sys-devel/gdb'
        ]
        self.PatchObject(chroot_util,
                         '_GetToolchainPackages',
                         return_value=toolchain_packages)
        toolchain_package_list = ' '.join(toolchain_packages)

        input_values = [
            ['/', '/build/thesysrootname'],  # sysroot
            [True, False],  # with_deps
            [True, False],  # rebuild_deps
            [True, False],  # use_binary
            [0, 1, 2, 3],  # jobs
            [True, False],  # debug_output
        ]
        inputs = itertools.product(*input_values)
        for (sysroot, with_deps, rebuild_deps, use_binary, jobs,
             debug_output) in inputs:
            chroot_util.Emerge(packages,
                               sysroot=sysroot,
                               with_deps=with_deps,
                               rebuild_deps=rebuild_deps,
                               use_binary=use_binary,
                               jobs=jobs,
                               debug_output=debug_output)
            cmd = self.rc.call_args_list[-1][0][-1]
            self.assertEquals(sysroot != '/',
                              any(p.startswith('--sysroot') for p in cmd))
            self.assertEquals(with_deps, '--deep' in cmd)
            self.assertEquals(not with_deps, '--nodeps' in cmd)
            self.assertEquals(rebuild_deps, '--rebuild-if-unbuilt' in cmd)
            self.assertEquals(use_binary, '-g' in cmd)
            self.assertEquals(use_binary, '--with-bdeps=y' in cmd)
            self.assertEquals(
                use_binary and sysroot == '/',
                '--useoldpkg-atoms=%s' % toolchain_package_list in cmd)
            self.assertEquals(bool(jobs), '--jobs=%d' % jobs in cmd)
            self.assertEquals(debug_output, '--show-output' in cmd)
Exemple #3
0
def main(argv):
    opts = ParseArgs(argv)

    cros_build_lib.AssertInsideChroot()

    sysroot = opts.sysroot or cros_build_lib.GetSysroot(opts.board)
    package_blacklist = set()
    if opts.package_blacklist:
        package_blacklist |= set(opts.package_blacklist.split())

    packages = set()
    # The list of packages to test can be passed as a file containing a
    # space-separated list of package names.
    # This is used by the builder to test only the packages that were upreved.
    if opts.package_file and os.path.exists(opts.package_file):
        packages = set(osutils.ReadFile(opts.package_file).split())

    if opts.packages:
        packages |= set(opts.packages.split())

    # If no packages were specified, use all testable packages.
    if not (opts.packages or opts.package_file) and not opts.empty_sysroot:
        workon = workon_helper.WorkonHelper(sysroot)
        packages = (workon.InstalledWorkonAtoms() if opts.installed else set(
            workon.ListAtoms(use_all=True)))

    if opts.empty_sysroot:
        packages |= determine_board_packages(sysroot, BOARD_VIRTUAL_PACKAGES)
        workon = workon_helper.WorkonHelper(sysroot)
        workon_packages = set(workon.ListAtoms(use_all=True))
        packages &= workon_packages

    for cp in packages & package_blacklist:
        logging.info('Skipping blacklisted package %s.', cp)

    packages = packages - package_blacklist
    pkg_with_test = portage_util.PackagesWithTest(sysroot, packages)

    if packages - pkg_with_test:
        logging.warning('The following packages do not have tests:\n  %s',
                        '\n  '.join(sorted(packages - pkg_with_test)))

    if not pkg_with_test:
        if opts.testable_packages_optional:
            logging.warning('No testable packages found!')
            return 0
        logging.error('No testable packages found!')
        return 1

    if opts.pretend:
        print('\n'.join(sorted(pkg_with_test)))
        return 0

    env = None
    if opts.nowithdebug:
        use_flags = os.environ.get('USE', '')
        use_flags += ' -cros-debug'
        env = {'USE': use_flags}

    if opts.empty_sysroot:
        try:
            chroot_util.Emerge(list(IMPLICIT_TEST_DEPS),
                               sysroot,
                               rebuild_deps=False,
                               use_binary=False)
            chroot_util.Emerge(list(pkg_with_test),
                               sysroot,
                               rebuild_deps=False,
                               use_binary=False)
        except cros_build_lib.RunCommandError:
            logging.error('Failed building dependencies for unittests.')
            return 1

    try:
        chroot_util.RunUnittests(sysroot,
                                 pkg_with_test,
                                 extra_env=env,
                                 jobs=opts.jobs)
    except cros_build_lib.RunCommandError:
        logging.error('Unittests failed.')
        return 1