Beispiel #1
0
    def run(self):
        """Run all the cc_test target programs. """
        failed_targets = []
        self._generate_inctest_run_list()
        tests_run_list = []
        for target in self.targets.values():
            if not (target['type'] == 'cc_test' or
                    target['type'] == 'dynamic_cc_test'):
                continue
            if (not self.run_all_reason) and target not in self.inctest_run_list:
                if not target.get('options', {}).get('always_run', False):
                    self.skipped_tests.append((target['path'], target['name']))
                    continue
            self._prepare_env(target)
            cmd = [os.path.abspath(self._executable(target))]
            cmd += self.options.args

            sys.stdout.flush() # make sure output before scons if redirected

            test_env = dict(os.environ)
            environ_add_path(test_env, 'LD_LIBRARY_PATH', self._runfiles_dir(target))
            if console.color_enabled:
                test_env['GTEST_COLOR'] = 'yes'
            else:
                test_env['GTEST_COLOR'] = 'no'
            test_env['GTEST_OUTPUT'] = 'xml'
            test_env['HEAPCHECK'] = target.get('options', {}).get('heap_check', '')
            tests_run_list.append((target,
                                   self._runfiles_dir(target),
                                   test_env,
                                   cmd))
        concurrent_jobs = 0
        concurrent_jobs = self.options.test_jobs
        scheduler = TestScheduler(tests_run_list,
                                  concurrent_jobs,
                                  self.tests_run_map)
        scheduler.schedule_jobs()

        self._clean_env()
        console.info("%s Testing Summary %s" % (self.title_str, self.title_str))
        console.info("Run %d test targets" % scheduler.num_of_run_tests)

        failed_targets = scheduler.failed_targets
        if failed_targets:
            console.error("%d tests failed:" % len(failed_targets))
            for i in failed_targets:
                print "%s/%s, exit code: %s" % (
                    i["path"], i["name"], i["test_exit_code"])
                test_file_name = os.path.abspath(self._executable(i))
                # Do not skip failed test by default
                if test_file_name in self.test_stamp['md5']:
                    self.test_stamp['md5'][test_file_name] = (0, 0)
            console.info("%d tests passed" % (
                scheduler.num_of_run_tests - len(failed_targets)))
            self._finish_tests()
            return 1
        else:
            console.info("All tests passed!")
            self._finish_tests()
            return 0
Beispiel #2
0
    def run(self):
        """Run all the cc_test target programs. """
        failed_targets = []
        self._generate_inctest_run_list()
        tests_run_list = []
        for target in self.targets.values():
            if not (target['type'] == 'cc_test' or
                    target['type'] == 'dynamic_cc_test'):
                continue
            if (not self.run_all_reason) and target not in self.inctest_run_list:
                if not target.get('options', {}).get('always_run', False):
                    self.skipped_tests.append((target['path'], target['name']))
                    continue
            self._prepare_env(target)
            cmd = [os.path.abspath(self._executable(target))]
            cmd += self.options.args

            sys.stdout.flush() # make sure output before scons if redirected

            test_env = dict(os.environ)
            environ_add_path(test_env, 'LD_LIBRARY_PATH', self._runfiles_dir(target))
            if console.color_enabled:
                test_env['GTEST_COLOR'] = 'yes'
            else:
                test_env['GTEST_COLOR'] = 'no'
            test_env['GTEST_OUTPUT'] = 'xml'
            test_env['HEAPCHECK'] = target.get('options', {}).get('heap_check', '')
            tests_run_list.append((target,
                                   self._runfiles_dir(target),
                                   test_env,
                                   cmd))
        concurrent_jobs = 0
        concurrent_jobs = self.options.test_jobs
        scheduler = TestScheduler(tests_run_list,
                                  concurrent_jobs,
                                  self.tests_run_map)
        scheduler.schedule_jobs()

        self._clean_env()
        console.info("%s Testing Summary %s" % (self.title_str, self.title_str))
        console.info("Run %d test targets" % scheduler.num_of_run_tests)

        failed_targets = scheduler.failed_targets
        if failed_targets:
            console.error("%d tests failed:" % len(failed_targets))
            for i in failed_targets:
                print "%s/%s, exit code: %s" % (
                    i["path"], i["name"], i["test_exit_code"])
                test_file_name = os.path.abspath(self._executable(i))
                # Do not skip failed test by default
                if test_file_name in self.test_stamp['md5']:
                    self.test_stamp['md5'][test_file_name] = (0, 0)
            console.info("%d tests passed" % (
                scheduler.num_of_run_tests - len(failed_targets)))
            self._finish_tests()
            return 1
        else:
            console.info("All tests passed!")
            self._finish_tests()
            return 0
Beispiel #3
0
    def run(self):
        """Run all the cc_test target programs. """
        failed_targets = []
        self._generate_inctest_run_list()
        tests_run_list = []
        for target in self.targets.values():
            if target.type != "cc_test":
                continue
            if (not self.run_all_reason) and target not in self.inctest_run_list:
                if not target.data.get("always_run"):
                    self.skipped_tests.append((target.path, target.name))
                    continue
            self._prepare_env(target)
            cmd = [os.path.abspath(self._executable(target))]
            cmd += self.options.args

            sys.stdout.flush()  # make sure output before scons if redirected

            test_env = dict(os.environ)
            environ_add_path(test_env, "LD_LIBRARY_PATH", self._runfiles_dir(target))
            if console.color_enabled:
                test_env["GTEST_COLOR"] = "yes"
            else:
                test_env["GTEST_COLOR"] = "no"
            test_env["GTEST_OUTPUT"] = "xml"
            test_env["HEAPCHECK"] = target.data.get("heap_check", "")
            tests_run_list.append((target, self._runfiles_dir(target), test_env, cmd))
        concurrent_jobs = 0
        concurrent_jobs = self.options.test_jobs
        scheduler = TestScheduler(tests_run_list, concurrent_jobs, self.tests_run_map)
        scheduler.schedule_jobs()

        self._clean_env()
        console.info("%s Testing Summary %s" % (self.title_str, self.title_str))
        console.info("Run %d test targets" % scheduler.num_of_run_tests)

        failed_targets = scheduler.failed_targets
        if failed_targets:
            console.error("%d tests failed:" % len(failed_targets))
            for target in failed_targets:
                print "%s:%s, exit code: %s" % (target.path, target.name, target.data["test_exit_code"])
                test_file_name = os.path.abspath(self._executable(target))
                # Do not skip failed test by default
                if test_file_name in self.test_stamp["md5"]:
                    self.test_stamp["md5"][test_file_name] = (0, 0)
            console.info("%d tests passed" % (scheduler.num_of_run_tests - len(failed_targets)))
            self._finish_tests()
            return 1
        else:
            console.info("All tests passed!")
            self._finish_tests()
            return 0
Beispiel #4
0
    def run_target(self, target_key):
        """Run one single target. """
        target = self.targets[target_key]
        if target['type'] not in self.run_list:
            console.error_exit("target %s:%s is not a target that could run" %
                               (target_key[0], target_key[1]))
        self._prepare_env(target)
        cmd = [os.path.abspath(self._executable(target))] + self.options.args
        console.info("'%s' will be ran" % cmd)
        sys.stdout.flush()

        run_env = dict(os.environ)
        environ_add_path(run_env, 'LD_LIBRARY_PATH',
                         self._runfiles_dir(target))
        p = subprocess.Popen(cmd, env=run_env, close_fds=True)
        p.wait()
        self._clean_env()
        return p.returncode
    def run_target(self, target_key):
        """Run one single target. """
        target = self.targets[target_key]
        if target.type not in self.run_list:
            console.error_exit('target %s:%s is not a target that could run' % (
                       target_key[0], target_key[1]))
        self._prepare_env(target)
        cmd = [os.path.abspath(self._executable(target))] + self.options.args
        console.info("'%s' will be ran" % cmd)
        sys.stdout.flush()

        run_env = dict(os.environ)
        environ_add_path(run_env, 'LD_LIBRARY_PATH',
                         self._runfiles_dir(target))
        p = subprocess.Popen(cmd, env=run_env, close_fds=True)
        p.wait()
        self._clean_env()
        return p.returncode
Beispiel #6
0
    def _prepare_env(self, target):
        """Prepare the test environment. """
        shutil.rmtree(self._runfiles_dir(target), ignore_errors=True)
        os.mkdir(self._runfiles_dir(target))
        # add build profile symlink
        profile_link_name = os.path.basename(self.build_dir)
        os.symlink(os.path.abspath(self.build_dir),
                   os.path.join(self._runfiles_dir(target), profile_link_name))

        # add pre build library symlink
        for prebuilt_file in self._get_prebuilt_files(target):
            src = os.path.abspath(prebuilt_file[0])
            dst = os.path.join(self._runfiles_dir(target), prebuilt_file[1])
            if os.path.lexists(dst):
                console.warning('trying to make duplicate prebuilt symlink:\n'
                                '%s -> %s\n'
                                '%s -> %s already exists\n'
                                'skipped, should check duplicate prebuilt '
                                'libraries'
                        % (dst, src, dst, os.path.realpath(dst)))
                continue
            os.symlink(src, dst)

        self._prepare_test_data(target)
        run_env = dict(os.environ)
        environ_add_path(run_env, 'LD_LIBRARY_PATH',
                         self._runfiles_dir(target))
        config = configparse.blade_config.get_config('cc_binary_config')
        run_lib_paths = config['run_lib_paths']
        if run_lib_paths:
            for path in run_lib_paths:
                if path.startswith('//'):
                    path = path[2:]
                path = os.path.abspath(path)
                environ_add_path(run_env, 'LD_LIBRARY_PATH', path)
        return run_env