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_topology_ko_bad_parameters(self):
     validator = Validator()
     input_args = ['--topology', '--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.assertFalse(check_args)
    def test_cli_validation_function_custom_ko_not_cfile(self):
        validator = Validator()
        input_args = ['--custom', '--function',
                      SAMPLE_DIR +
                      'samples/functions/valid-son/firewall-vnfd.yml']

        args = cli.parse_args(input_args)
        print("Test arguments: {}".format(args))
        check_args = cli.check_args(args)
        self.assertFalse(check_args)
 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 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)
示例#10
0
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))
示例#11
0
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))