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
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
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
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