X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=kconfig_hardened_check%2F__init__.py;h=fea82724f2aa54ae19bb0bd799ed28ff34ec58b9;hb=55164d26f50133027deb9928c8fa607c7427fd65;hp=a2fe794ae623efb1d3f3602a49ff7d8897eac6bb;hpb=649272d27202a00b42d8220554d20c9d0d120294;p=kconfig-hardened-check.git diff --git a/kconfig_hardened_check/__init__.py b/kconfig_hardened_check/__init__.py index a2fe794..fea8272 100644 --- a/kconfig_hardened_check/__init__.py +++ b/kconfig_hardened_check/__init__.py @@ -88,8 +88,8 @@ SIMPLE_OPTION_TYPES = ('kconfig', 'version', 'cmdline') class OptCheck: # Constructor without the 'expected' parameter is for option presence checks (any value is OK) def __init__(self, reason, decision, name, expected=None): - if not reason or not decision or not name: - sys.exit('[!] ERROR: invalid {} check for "{}"'.format(self.__class__.__name__, name)) + assert(reason and decision and name), \ + 'invalid {} check for "{}"'.format(self.__class__.__name__, name) self.name = name self.expected = expected self.decision = decision @@ -185,12 +185,12 @@ class VersionCheck: class ComplexOptCheck: def __init__(self, *opts): self.opts = opts - if not self.opts: - sys.exit('[!] ERROR: empty {} check'.format(self.__class__.__name__)) - if len(self.opts) == 1: - sys.exit('[!] ERROR: useless {} check'.format(self.__class__.__name__)) - if not isinstance(opts[0], KconfigCheck) and not isinstance(opts[0], CmdlineCheck): - sys.exit('[!] ERROR: invalid {} check: {}'.format(self.__class__.__name__, opts)) + assert(self.opts), \ + 'empty {} check'.format(self.__class__.__name__) + assert(len(self.opts) != 1), \ + 'useless {} check: {}'.format(self.__class__.__name__, opts) + assert(isinstance(opts[0], KconfigCheck) or isinstance(opts[0], CmdlineCheck)), \ + 'invalid {} check: {}'.format(self.__class__.__name__, opts) self.result = None @property @@ -240,8 +240,6 @@ class OR(ComplexOptCheck): # OR(, ) # OR(, ) def check(self): - if not self.opts: - sys.exit('[!] ERROR: invalid OR check') for i, opt in enumerate(self.opts): opt.check() if opt.result.startswith('OK'): @@ -254,9 +252,10 @@ class OR(ComplexOptCheck): self.result = 'OK: {} not found'.format(opt.name) elif opt.result == 'OK: is present': self.result = 'OK: {} is present'.format(opt.name) - # VersionCheck provides enough info - elif not opt.result.startswith('OK: version'): - sys.exit('[!] ERROR: unexpected OK description "{}"'.format(opt.result)) + else: + # VersionCheck provides enough info + assert(opt.result.startswith('OK: version')), \ + 'unexpected OK description "{}"'.format(opt.result) return self.result = self.opts[0].result @@ -284,10 +283,9 @@ class AND(ComplexOptCheck): else: # VersionCheck provides enough info self.result = opt.result - if not opt.result.startswith('FAIL: version'): - sys.exit('[!] ERROR: unexpected FAIL description "{}"'.format(opt.result)) + assert(opt.result.startswith('FAIL: version')), \ + 'unexpected FAIL description "{}"'.format(opt.result) return - sys.exit('[!] ERROR: invalid AND check') def detect_arch(fname, archs): @@ -678,8 +676,8 @@ def print_unknown_options(checklist, parsed_options): known_options.append(o2.name) continue for o3 in o2.opts: - if o3.type == 'complex': - sys.exit('[!] ERROR: unexpected ComplexOptCheck inside {}'.format(o2.name)) + assert(o3.type != 'complex'), \ + 'unexpected ComplexOptCheck inside {}'.format(o2.name) if hasattr(o3, 'name'): known_options.append(o3.name) @@ -737,22 +735,22 @@ def print_checklist(mode, checklist, with_results): def populate_simple_opt_with_data(opt, data, data_type): - if opt.type == 'complex': - sys.exit('[!] ERROR: unexpected ComplexOptCheck {}: {}'.format(opt.name, vars(opt))) - if opt.type not in SIMPLE_OPTION_TYPES: - sys.exit('[!] ERROR: invalid opt type "{}" for {}'.format(opt.type, opt.name)) - if data_type not in SIMPLE_OPTION_TYPES: - sys.exit('[!] ERROR: invalid data type "{}"'.format(data_type)) + assert(opt.type != 'complex'), \ + 'unexpected ComplexOptCheck "{}"'.format(opt.name) + assert(opt.type in SIMPLE_OPTION_TYPES), \ + 'invalid opt type "{}"'.format(opt.type) + assert(data_type in SIMPLE_OPTION_TYPES), \ + 'invalid data type "{}"'.format(data_type) if data_type != opt.type: return if data_type in ('kconfig', 'cmdline'): opt.state = data.get(opt.name, None) - elif data_type == 'version': - opt.ver = data else: - sys.exit('[!] ERROR: unexpected data type "{}"'.format(data_type)) + assert(data_type == 'version'), \ + 'unexpected data type "{}"'.format(data_type) + opt.ver = data def populate_opt_with_data(opt, data, data_type): @@ -764,8 +762,8 @@ def populate_opt_with_data(opt, data, data_type): else: populate_simple_opt_with_data(o, data, data_type) else: - if opt.type not in ('kconfig', 'cmdline'): - sys.exit('[!] ERROR: bad type "{}" for a simple check {}'.format(opt.type, opt.name)) + assert(opt.type in ('kconfig', 'cmdline')), \ + 'bad type "{}" for a simple check'.format(opt.type) populate_simple_opt_with_data(opt, data, data_type) @@ -851,6 +849,9 @@ def main(): config_checklist = [] if args.config: + if args.print: + sys.exit('[!] ERROR: --config and --print can\'t be used together') + if mode != 'json': print('[+] Kconfig file to check: {}'.format(args.config)) if args.cmdline: