def main(): logging_setup() args = cli.parse_args() # TODO better log configuration (e.g. file-based logging) if args.verbose: coloredlogs.install(level="DEBUG") else: coloredlogs.install(level="INFO") # TODO validate if args combination makes any sense validator = Validator() if cli.check_args(args): if args.api: # TODO start validator in service mode print("Validator started as an API in IP: {} and port {}".format( args.service_address, args.service_port)) rest.serve_forever(args) pass else: # run validator in CLI mode validator = Validator() result_validator = cli.dispatch(args, validator) if result_validator.error_count > 0: exit(1) # exit with error code exit(0) else: print('Invalid arguments. Please check the help (-h)')
def test_cli_validation_service_syntax_ok(self): validator = Validator() input_args = ['--syntax', '--service', SAMPLE_DIR + 'samples/services/valid-son/valid.yml'] args = cli.parse_args(input_args) print("Test arguments: {}".format(args)) check_args = cli.check_args(args) self.assertTrue(check_args) result_validator = cli.dispatch(args, validator) self.assertEqual(result_validator.error_count, 0)
def test_cli_validation_function_syntax_ko_bad_syntax(self): validator = Validator() input_args = ['--syntax', '--function', SAMPLE_DIR + 'samples/functions/invalid-syntax-tng/' + 'invalid-firewall-vnfd-tng.yml'] args = cli.parse_args(input_args) print("Test arguments: {}".format(args)) check_args = cli.check_args(args) self.assertTrue(check_args) result_validator = cli.dispatch(args, validator) self.assertEqual(result_validator.error_count, 1)
def test_cli_validation_function_topology_ok_dext(self): validator = Validator() input_args = ['--topology', '--function', SAMPLE_DIR + 'samples/functions/valid-son/', '--dext', 'yml'] args = cli.parse_args(input_args) print("Test arguments: {}".format(args)) check_args = cli.check_args(args) self.assertTrue(check_args) result_validator = cli.dispatch(args, validator) self.assertEqual(result_validator.error_count, 0)
def test_cli_validation_function_integrity_ko(self): validator = Validator() input_args = ['--integrity', '--function', SAMPLE_DIR + 'samples/functions/invalid_integrity-son/' + 'firewall-vnfd.yml'] args = cli.parse_args(input_args) print("Test arguments: {}".format(args)) check_args = cli.check_args(args) self.assertTrue(check_args) result_validator = cli.dispatch(args, validator) self.assertEqual(result_validator.error_count, 1)
def test_cli_validation_service_syntax_nonexistent_descriptor(self): validator = Validator() input_args = ['--syntax', '--service', SAMPLE_DIR + 'samples/services/invalid-syntax-tng/' + 'unexpected_field.yml'] args = cli.parse_args(input_args) print("Test arguments: {}".format(args)) check_args = cli.check_args(args) self.assertTrue(check_args) result_validator = cli.dispatch(args, validator) self.assertEqual(result_validator.error_count, 1)
def validate_project_with_external_validator(args, project_path): """ Try to use an external validator (typically tng-sdk-validation) to validate the given service project. Throws TangoValidationException on validation error. """ # check if external validator is available? try: from tngsdk.validation import cli as v_cli from tngsdk.validation.validator import Validator except BaseException as ex: LOG.error("Skipping validation: tng-sdk-validate not installed?") LOG.debug(ex) return # ok! let us valiade ... v = Validator() # define validation_level if len(args.validation_level) == 1: validation_level = "-" + args.validation_level else: validation_level = "--" + args.validation_level # define arguments for validator v_args = v_cli.parse_args([ validation_level, # levels -s / -i / -t "--debug", # temporary "--project", project_path, # path to project "--workspace", args.workspace # workspace path ]) v_cli.dispatch(v_args, v) # check validation result # - warnings if v.warning_count > 0: LOG.warning("There have been {} tng-validate warnings".format( v.warning_count)) LOG.warning("tng-validate warnings: '{}'".format(v.warnings)) # - errors if v.error_count > 0: raise TangoValidationException("tng-validate error(s): '{}'".format( v.errors))
def validate_project_with_external_validator(args, project_path): """ Try to use an external validator (typically tng-sdk-validation) to validate the given service project. Throws TangoValidationException on validation error. """ # shall we validate? if args.skip_validation: LOG.warning("Skipping validation upon user request (--no-validation).") return # check if external validator is available? try: from tngsdk.validation import cli as v_cli from tngsdk.validation.validator import Validator except BaseException as ex: del ex LOG.error("Skipping validation: tng-sdk-validate not installed?") return # ok! let us valiade ... v = Validator() # define arguments for validator v_args = v_cli.parse_args([ # levels -s / -i / -t "-s", # TODO change to -i if CNF are supported by validator "--project", project_path, # path to project "--workspace", args.workspace # workspace path ]) v_cli.dispatch(v_args, v) # check validation result # - warnings if v.warning_count > 0: LOG.warning("There have been {} tng-validate warnings".format( v.warning_count)) LOG.warning("tng-validate warnings: '{}'".format(v.warnings)) # - errors if v.error_count > 0: raise TangoValidationException("tng-validate error(s): '{}'".format( v.errors))
def test_cli_validation_function_custom_ko(self): validator = Validator() input_args = ['--custom', '--cfile', SAMPLE_DIR + 'samples/custom_rules/rules/' + 'custom_rule_1.yml', '--function', SAMPLE_DIR + 'samples/custom_rules/functions/' + 'invalid/function_1_ko.yml'] args = cli.parse_args(input_args) print("Test arguments: {}".format(args)) check_args = cli.check_args(args) self.assertTrue(check_args) result_validator = cli.dispatch(args, validator) self.assertEqual(len(result_validator.customErrors), 4)