def _get_test_target_md5sum(self, target): """Get test target md5sum. """ related_file_list = [] related_file_data_list = [] test_file_name = os.path.abspath(self._executable(target)) if os.path.exists(test_file_name): related_file_list.append(test_file_name) if target.data.get('dynamic_link'): target_key = (target.path, target.name) for dep in self.target_database[target_key].expanded_deps: dep_target = self.target_database[dep] if 'cc_library' in dep_target.type: lib_name = 'lib%s.so' % dep_target.name lib_path = os.path.join(self.build_dir, dep_target.path, lib_name) abs_lib_path = os.path.abspath(lib_path) if os.path.exists(abs_lib_path): related_file_list.append(abs_lib_path) for i in target.data['testdata']: if isinstance(i, tuple): data_target = i[0] else: data_target = i if '..' in data_target: continue if data_target.startswith('//'): data_target = data_target[2:] data_target_path = os.path.abspath(data_target) else: data_target_path = os.path.abspath('%s/%s' % ( target.path, data_target)) if os.path.exists(data_target_path): related_file_data_list.append(data_target_path) related_file_list.sort() related_file_data_list.sort() test_target_str = '' test_target_data_str = '' for f in related_file_list: mtime = os.path.getmtime(f) ctime = os.path.getctime(f) test_target_str += str(mtime) + str(ctime) for f in related_file_data_list: mtime = os.path.getmtime(f) ctime = os.path.getctime(f) test_target_data_str += str(mtime) + str(ctime) return md5sum(test_target_str), md5sum(test_target_data_str)
def _get_test_target_md5sum(self, target): """Get test target md5sum. """ related_file_list = [] related_file_data_list = [] test_file_name = os.path.abspath(self._test_executable(target)) if os.path.exists(test_file_name): related_file_list.append(test_file_name) if target['type'] == 'dynamic_cc_test': target_key = (target['path'], target['name']) for dep in self.target_database.get(target_key, {}).get('deps', []): dep_target = self.target_database.get(dep, {}) if 'cc_library' in dep_target.get('type', ''): lib_name = 'lib%s.so' % dep_target['name'] lib_path = os.path.join(self.build_dir, dep_target['path'], lib_name) abs_lib_path = os.path.abspath(lib_path) if os.path.exists(abs_lib_path): related_file_list.append(abs_lib_path) for i in target['options']['testdata']: if isinstance(i, tuple): data_target = i[0] else: data_target = i if '..' in data_target: continue if data_target.startswith('//'): data_target = data_target[2:] data_target_path = os.path.abspath(data_target) else: data_target_path = os.path.abspath("%s/%s" % ( target['path'], data_target)) if os.path.exists(data_target_path): related_file_data_list.append(data_target_path) related_file_list.sort() related_file_data_list.sort() test_target_str = '' test_target_data_str = '' for f in related_file_list: mtime = os.path.getmtime(f) ctime = os.path.getctime(f) test_target_str += str(mtime) + str(ctime) for f in related_file_data_list: mtime = os.path.getmtime(f) ctime = os.path.getctime(f) test_target_data_str += str(mtime) + str(ctime) return md5sum(test_target_str), md5sum(test_target_data_str)
def _get_test_target_md5sum(self, target): """Get test target md5sum. """ related_file_list = [] related_file_data_list = [] test_file_name = os.path.abspath(self._executable(target)) if os.path.exists(test_file_name): related_file_list.append(test_file_name) if target.data['dynamic_link']: target_key = (target.path, target.name) for dep in self.target_database[target_key].expanded_deps: dep_target = self.target_database[dep] if 'cc_library' in dep_target.type: lib_name = 'lib%s.so' % dep_target.name lib_path = os.path.join(self.build_dir, dep_target.path, lib_name) abs_lib_path = os.path.abspath(lib_path) if os.path.exists(abs_lib_path): related_file_list.append(abs_lib_path) for i in target.data['testdata']: if isinstance(i, tuple): data_target = i[0] else: data_target = i if '..' in data_target: continue if data_target.startswith('//'): data_target = data_target[2:] data_target_path = os.path.abspath(data_target) else: data_target_path = os.path.abspath('%s/%s' % ( target.path, data_target)) if os.path.exists(data_target_path): related_file_data_list.append(data_target_path) related_file_list.sort() related_file_data_list.sort() test_target_str = '' test_target_data_str = '' for f in related_file_list: mtime = os.path.getmtime(f) ctime = os.path.getctime(f) test_target_str += str(mtime) + str(ctime) for f in related_file_data_list: mtime = os.path.getmtime(f) ctime = os.path.getctime(f) test_target_data_str += str(mtime) + str(ctime) return md5sum(test_target_str), md5sum(test_target_data_str)
def _update_test_history(self): old_env = self.test_history.get('env', {}) env_keys = os.environ.keys() env_keys = set(env_keys).difference(_ignored_env_set()) new_env = dict((key, os.environ[key]) for key in env_keys) if old_env and new_env != old_env: console.info( 'Some tests will be run due to test environments changed:') new, old = _diff_env(new_env, old_env) if new: console.info('new environments: %s' % new) if old: console.info('old environments: %s' % old) self.test_history['env'] = new_env self.env_md5 = md5sum(str(sorted(new_env.iteritems())))
def __init__(self, targets, options, target_database, direct_targets): """Init method. """ binary_runner.BinaryRunner.__init__(self, targets, options, target_database) self.direct_targets = direct_targets self.inctest_md5_file = '.blade.test.stamp' self.tests_detail_file = './blade_tests_detail' self.inctest_run_list = [] self.last_test_stamp = {} self.last_test_stamp['md5'] = {} self.test_stamp = {} self.test_stamp['md5'] = {} self.valid_inctest_time_interval = 86400 self.tests_run_map = {} self.run_all_reason = '' self.title_str = '=' * 13 self.skipped_tests = [] if not self.options.fulltest: if os.path.exists(self.inctest_md5_file): try: self.last_test_stamp = eval( open(self.inctest_md5_file).read()) except (IOError, SyntaxError): console.warning( 'error loading incremental test history, will run full test' ) self.run_all_reason = 'NO_HISTORY' self.test_stamp['testarg'] = md5sum(str(self.options.args)) env_keys = os.environ.keys() env_keys = list(set(env_keys).difference(env_ignore_set)) env_keys.sort() last_test_stamp = {} for env_key in env_keys: last_test_stamp[env_key] = os.environ[env_key] self.test_stamp['env'] = last_test_stamp self.test_stamp['inctest_time'] = time.time() if not self.options.fulltest: if self.test_stamp['testarg'] != (self.last_test_stamp.get( 'testarg', None)): self.run_all_reason = 'ARGUMENT' console.info( 'all tests will run due to test arguments changed') new_env = self.test_stamp['env'] old_env = self.last_test_stamp.get('env', {}) if isinstance(old_env, str): # For old test record old_env = {} if new_env != old_env: self.run_all_reason = 'ENVIRONMENT' console.info( 'all tests will run due to test environments changed:') (new, old) = _diff_env(new_env, old_env) if new: console.info('new environments: %s' % new) if old: console.info('old environments: %s' % old) this_time = int(round(self.test_stamp['inctest_time'])) last_time = int(round(self.last_test_stamp.get('inctest_time', 0))) interval = this_time - last_time if interval >= self.valid_inctest_time_interval or interval < 0: self.run_all_reason = 'STALE' console.info( 'all tests will run due to all passed tests are invalid now' ) else: self.run_all_reason = 'FULLTEST'
def __init__(self, targets, options, target_database, direct_targets): """Init method. """ binary_runner.BinaryRunner.__init__(self, targets, options, target_database) self.direct_targets = direct_targets self.inctest_md5_file = '.blade.test.stamp' self.tests_detail_file = './blade_tests_detail' self.inctest_run_list = [] self.last_test_stamp = {} self.last_test_stamp['md5'] = {} self.test_stamp = {} self.test_stamp['md5'] = {} self.valid_inctest_time_interval = 86400 self.tests_run_map = {} self.run_all_reason = '' self.title = '=' * 13 self.skipped_tests = [] self.coverage = getattr(options, 'coverage', False) if not self.options.fulltest: if os.path.exists(self.inctest_md5_file): try: f = open(self.inctest_md5_file) self.last_test_stamp = eval(f.read()) f.close() except (IOError, SyntaxError): console.warning('error loading incremental test history, will run full test') self.run_all_reason = 'NO_HISTORY' self.test_stamp['testarg'] = md5sum(str(self.options.args)) env_keys = os.environ.keys() env_keys = set(env_keys).difference(env_ignore_set) last_test_env = {} for env_key in env_keys: last_test_env[env_key] = os.environ[env_key] self.test_stamp['env'] = last_test_env self.test_stamp['inctest_time'] = time.time() if not self.options.fulltest: if self.test_stamp['testarg'] != ( self.last_test_stamp.get('testarg', None)): self.run_all_reason = 'ARGUMENT' console.info('all tests will run due to test arguments changed') new_env = self.test_stamp['env'] old_env = self.last_test_stamp.get('env', {}) if isinstance(old_env, str): # For old test record old_env = {} if new_env != old_env: self.run_all_reason = 'ENVIRONMENT' console.info('all tests will run due to test environments changed:') (new, old) = _diff_env(new_env, old_env) if new: console.info('new environments: %s' % new) if old: console.info('old environments: %s' % old) this_time = int(round(self.test_stamp['inctest_time'])) last_time = int(round(self.last_test_stamp.get('inctest_time', 0))) interval = this_time - last_time if interval >= self.valid_inctest_time_interval or interval < 0: self.run_all_reason = 'STALE' console.info('all tests will run due to all passed tests are expired now') else: self.run_all_reason = 'FULLTEST'
def __init__(self, targets, options, prebuilt_file_map={}, target_database={}): """Init method. """ self.targets = targets self.build_dir = "build%s_%s" % (options.m, options.profile) self.options = options self.run_list = ['cc_binary', 'dynamic_cc_binary', 'cc_test', 'dynamic_cc_test'] self.prebuilt_file_map = prebuilt_file_map self.target_database = target_database self.inctest_md5_file = ".blade.test.stamp" self.tests_detail_file = "./blade_tests_detail" self.run_all = False self.inctest_run_list = [] self.testarg_dict = {} self.env_dict = {} self.cur_testarg_dict = {} self.cur_env_dict = {} self.inctest_md5_buffer = [] self.target_dict = {} self.cur_target_dict = {} self.option_has_fulltest = False self.valid_inctest_time_interval = 86400 self.last_inctest_time_dict = {} self.this_inctest_time_dict = {} self.tests_run_map = {} self.run_all_reason = '' self.title_str = '='*13 self.skipped_tests = [] if hasattr(self.options, 'fulltest'): self.option_has_fulltest = True if self.option_has_fulltest and (not self.options.fulltest): if os.path.exists(self.inctest_md5_file): for line in open(self.inctest_md5_file): self.inctest_md5_buffer.append(line[:-1]) buf_len = len(self.inctest_md5_buffer) if buf_len < 2 and buf_len > 0 : if os.path.exists(self.inctest_md5_file): os.remove(self.inctest_md5_file) error_exit("bad incremental test md5 file, removed") if self.inctest_md5_buffer: self.testarg_dict = eval(self.inctest_md5_buffer[0]) self.env_dict = eval(self.inctest_md5_buffer[1]) if buf_len >= 3: self.target_dict = eval(self.inctest_md5_buffer[2]) if buf_len >= 4: self.last_inctest_time_dict = eval(self.inctest_md5_buffer[3]) if hasattr(self.options, 'testargs'): self.cur_testarg_dict['testarg'] = md5sum(self.options.testargs) else: self.cur_testarg_dict['testarg'] = None env_keys = os.environ.keys() env_keys = list(set(env_keys).difference(env_ignore_set)) env_keys.sort() env_dict = {} for env_key in env_keys: env_dict[env_key] = os.environ[env_key] self.cur_env_dict['env'] = env_dict self.this_inctest_time_dict['inctest_time'] = time.time() if self.option_has_fulltest and (not self.options.fulltest): if self.cur_testarg_dict['testarg'] != ( self.testarg_dict.get('testarg', None)): self.run_all = True self.run_all_reason = 'ARGUMENT' info("all tests will run due to test arguments changed") new_env = self.cur_env_dict['env'] old_env = self.env_dict.get('env', {}) if isinstance(old_env, str): # For old test record old_env = {} if new_env != old_env: self.run_all = True self.run_all_reason = 'ENVIRONMENT' (new, old) = _diff_env(new_env, old_env) info("all tests will run due to test environments changed:") if new: info("new environments: %s" % new) if old: info("old environments: %s" % old) this_time = int(round(self.this_inctest_time_dict['inctest_time'])) last_time = int(round(self.last_inctest_time_dict.get('inctest_time', 0))) interval = this_time - last_time if interval >= self.valid_inctest_time_interval or interval < 0: self.run_all = True self.run_all_reason = 'STALE' info("all tests will run due to all passed tests are invalid now") if self.option_has_fulltest and self.options.fulltest: self.run_all = True self.run_all_reason = 'FULLTEST'
def __init__(self, targets, options, prebuilt_file_map={}, target_database={}): """Init method. """ binary_runner.BinaryRunner.__init__(self, targets, options, prebuilt_file_map, target_database) self.inctest_md5_file = ".blade.test.stamp" self.tests_detail_file = "./blade_tests_detail" self.inctest_run_list = [] self.last_test_stamp = {} self.last_test_stamp['md5'] = {} self.test_stamp = {} self.test_stamp['md5'] = {} self.valid_inctest_time_interval = 86400 self.tests_run_map = {} self.run_all_reason = '' self.title_str = '='*13 self.skipped_tests = [] if not self.options.fulltest: if os.path.exists(self.inctest_md5_file): try: self.last_test_stamp = eval(open(self.inctest_md5_file).read()) except (IOError, SyntaxError): console.warning("error loading incremental test history, will run full test") self.run_all_reason = 'NO_HISTORY' self.test_stamp['testarg'] = md5sum(str(self.options.args)) env_keys = os.environ.keys() env_keys = list(set(env_keys).difference(env_ignore_set)) env_keys.sort() last_test_stamp = {} for env_key in env_keys: last_test_stamp[env_key] = os.environ[env_key] self.test_stamp['env'] = last_test_stamp self.test_stamp['inctest_time'] = time.time() if not self.options.fulltest: if self.test_stamp['testarg'] != ( self.last_test_stamp.get('testarg', None)): self.run_all_reason = 'ARGUMENT' console.info("all tests will run due to test arguments changed") new_env = self.test_stamp['env'] old_env = self.last_test_stamp.get('env', {}) if isinstance(old_env, str): # For old test record old_env = {} if new_env != old_env: self.run_all_reason = 'ENVIRONMENT' (new, old) = _diff_env(new_env, old_env) console.info("all tests will run due to test environments changed:") if new: console.info("new environments: %s" % new) if old: console.info("old environments: %s" % old) this_time = int(round(self.test_stamp['inctest_time'])) last_time = int(round(self.last_test_stamp.get('inctest_time', 0))) interval = this_time - last_time if interval >= self.valid_inctest_time_interval or interval < 0: self.run_all_reason = 'STALE' console.info("all tests will run due to all passed tests are invalid now") if self.options.fulltest: self.run_all_reason = 'FULLTEST'