コード例 #1
0
ファイル: test_runner.py プロジェクト: project-zerus/blade
    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)
コード例 #2
0
    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)
コード例 #3
0
ファイル: test_runner.py プロジェクト: zmoon111/typhoon-blade
    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)
コード例 #4
0
    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())))
コード例 #5
0
    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'
コード例 #6
0
ファイル: test_runner.py プロジェクト: project-zerus/blade
    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'
コード例 #7
0
    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'
コード例 #8
0
ファイル: test_runner.py プロジェクト: alaxwang/typhoon-blade
    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'