def create_analyzer_sa(): args = [] context = MockContextSA() cfg_handler = ClangSA.construct_config_handler(args, context) action = { 'file': 'main.cpp', 'command': "g++ -o main main.cpp", 'directory': '/' } build_action = log_parser.parse_options(action) return ClangSA(cfg_handler, build_action)
def test_checker_initializer(self): """ Test initialize_checkers() function. """ def add_description(checker): return checker, '' def all_with_status(status): def f(checks, checkers): result = set(check for check, data in checks.items() if data[0] == status) return set(checkers) <= result return f args = [] context = MockContextSA() # "security" profile, but alpha -> not in default. security_profile_alpha = [ 'alpha.security.ArrayBound', 'alpha.security.MallocOverflow' ] # "default" profile. default_profile = ['security.FloatLoopCounter', 'deadcode.DeadStores'] # Checkers covering some "sei-cert" rules. cert_guideline = ['alpha.core.CastSize', 'alpha.core.CastToStruct'] checkers = [] checkers.extend(map(add_description, security_profile_alpha)) checkers.extend(map(add_description, default_profile)) checkers.extend(map(add_description, cert_guideline)) # "default" profile checkers are enabled explicitly. Others are in # "default" state. cfg_handler = ClangSA.construct_config_handler(args, context) cfg_handler.initialize_checkers(context, checkers) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), default_profile)) self.assertTrue( all_with_status(CheckerState.default)(cfg_handler.checks(), security_profile_alpha)) # "--enable-all" leaves alpha checkers in "default" state. Others # become enabled. cfg_handler = ClangSA.construct_config_handler(args, context) cfg_handler.initialize_checkers(context, checkers, enable_all=True) self.assertTrue( all_with_status(CheckerState.default)(cfg_handler.checks(), security_profile_alpha)) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), default_profile)) # Enable alpha checkers explicitly. cfg_handler = ClangSA.construct_config_handler(args, context) cfg_handler.initialize_checkers(context, checkers, [('alpha', True)]) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), security_profile_alpha)) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), default_profile)) # Enable "security" profile checkers. cfg_handler = ClangSA.construct_config_handler(args, context) cfg_handler.initialize_checkers(context, checkers, [('profile:security', True)]) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), security_profile_alpha)) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), default_profile)) # Enable "security" profile checkers without "profile:" prefix. cfg_handler = ClangSA.construct_config_handler(args, context) cfg_handler.initialize_checkers(context, checkers, [('security', True)]) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), security_profile_alpha)) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), default_profile)) # Enable "sei-cert" guideline checkers. cfg_handler = ClangSA.construct_config_handler(args, context) cfg_handler.initialize_checkers(context, checkers, [('guideline:sei-cert', True)]) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), cert_guideline)) # Enable "sei-cert" guideline checkers. cfg_handler = ClangSA.construct_config_handler(args, context) cfg_handler.initialize_checkers(context, checkers, [('sei-cert', True)]) self.assertTrue( all_with_status(CheckerState.enabled)(cfg_handler.checks(), cert_guideline)) # Disable "sei-cert" guideline checkers. cfg_handler = ClangSA.construct_config_handler(args, context) cfg_handler.initialize_checkers(context, checkers, [('guideline:sei-cert', False)]) self.assertTrue( all_with_status(CheckerState.disabled)(cfg_handler.checks(), cert_guideline)) # Disable "sei-cert" guideline checkers. cfg_handler = ClangSA.construct_config_handler(args, context) cfg_handler.initialize_checkers(context, checkers, [('sei-cert', False)]) self.assertTrue( all_with_status(CheckerState.disabled)(cfg_handler.checks(), cert_guideline))