示例#1
0
    def test_extend_validators_with_dict(self):
        def_validators = [{'eq': ["a", {"v": 1}]}, {'eq': [{"b": 1}, 200]}]
        current_validators = [{'len_eq': ['s3', 12]}, {'eq': [{"b": 1}, 201]}]
        def_validators = [
            parser.parse_validator(validator) for validator in def_validators
        ]
        ref_validators = [
            parser.parse_validator(validator)
            for validator in current_validators
        ]

        extended_validators = utils.extend_validators(def_validators,
                                                      ref_validators)
        self.assertEqual(len(extended_validators), 3)
        self.assertIn({
            'check': {
                'b': 1
            },
            'expect': 201,
            'comparator': 'eq'
        }, extended_validators)
        self.assertNotIn({
            'check': {
                'b': 1
            },
            'expect': 200,
            'comparator': 'eq'
        }, extended_validators)
示例#2
0
    def test_parse_validator(self):
        validator = {"check": "status_code", "comparator": "eq", "expect": 201}
        self.assertEqual(
            parser.parse_validator(validator),
            {"check": "status_code", "comparator": "eq", "expect": 201}
        )

        validator = {'eq': ['status_code', 201]}
        self.assertEqual(
            parser.parse_validator(validator),
            {"check": "status_code", "comparator": "eq", "expect": 201}
        )
示例#3
0
 def test_parse_validator(self):
     validator = {'check': 'status_code', 'comparator': 'eq', 'expect': 200}
     assert parser.parse_validator(validator) == {
         'check': 'status_code',
         'comparator': 'eq',
         'expect': 200
     }
     validator = {'eq': ['status_code', 200]}
     assert parser.parse_validator(validator) == {
         'check': 'status_code',
         'comparator': 'eq',
         'expect': 200
     }
示例#4
0
    def validate(self, validators, resp_obj):
        """ make validations
        """
        evaluated_validators = []
        if not validators:
            return evaluated_validators

        logger.log_info("start to validate.")
        validate_pass = True
        failures = []

        for validator in validators:
            # evaluate validators with context variable mapping.
            evaluated_validator = self.__eval_check_item(
                parser.parse_validator(validator), resp_obj)

            try:
                self._do_validation(evaluated_validator)
            except exceptions.ValidationFailure as ex:
                validate_pass = False
                failures.append(str(ex))

            evaluated_validators.append(evaluated_validator)

        if not validate_pass:
            failures_string = "\n".join([failure for failure in failures])
            raise exceptions.ValidationFailure(failures_string)

        return evaluated_validators
示例#5
0
def _convert_validators_to_mapping(validators):
    """ convert validators list to mapping.

    Args:
        validators (list): validators in list

    Returns:
        dict: validators mapping, use (check, comparator) as key.

    Examples:
        >>> validators = [
                {"check": "v1", "expect": 201, "comparator": "eq"},
                {"check": {"b": 1}, "expect": 200, "comparator": "eq"}
            ]
        >>> _convert_validators_to_mapping(validators)
            {
                ("v1", "eq"): {"check": "v1", "expect": 201, "comparator": "eq"},
                ('{"b": 1}', "eq"): {"check": {"b": 1}, "expect": 200, "comparator": "eq"}
            }

    """
    validators_mapping = {}

    for validator in validators:
        validator = parser.parse_validator(validator)

        if not isinstance(validator["check"], collections.Hashable):
            check = json.dumps(validator["check"])
        else:
            check = validator["check"]

        key = (check, validator["comparator"])
        validators_mapping[key] = validator

    return validators_mapping
示例#6
0
def _get_validators_mapping(validators):
    """ get validators mapping from api or test validators
    @param (list) validators:
        [
            {"check": "v1", "expect": 201, "comparator": "eq"},
            {"check": {"b": 1}, "expect": 200, "comparator": "eq"}
        ]
    @return
        {
            ("v1", "eq"): {"check": "v1", "expect": 201, "comparator": "eq"},
            ('{"b": 1}', "eq"): {"check": {"b": 1}, "expect": 200, "comparator": "eq"}
        }
    """
    validators_mapping = {}

    for validator in validators:
        validator = parser.parse_validator(validator)

        if not isinstance(validator["check"], collections.Hashable):
            check = json.dumps(validator["check"])
        else:
            check = validator["check"]

        key = (check, validator["comparator"])
        validators_mapping[key] = validator

    return validators_mapping
示例#7
0
    def validate(self, validators, resp_obj):
        '''
        make validations
        '''

        evaluated_validators = []
        if not validators:
            return evaluated_validators

        logger.log_info('start to validate.')
        validate_pass = True

        for vaildator in validators:
            # evaluate validators with context variable mapping.
            evaluated_validator = self.__eval_check_item(
                parser.parse_validator(vaildator), resp_obj)

            try:
                self._do_validation(evaluated_validator)
            except exceptions.VaildationFailure:
                validate_pass = False

            evaluated_validators.append(evaluated_validator)

        if not validate_pass:
            raise exceptions.VaildationFailure
示例#8
0
    def validate(self, validators, resp_obj):
        """ make validations
        """
        if not validators:
            return

        logger.log_debug("start to validate.")

        self.validation_results = []
        validate_pass = True
        failures = []

        for validator in validators:
            # evaluate validators with context variable mapping.
            evaluated_validator = self.__eval_check_item(
                parser.parse_validator(validator), resp_obj)

            try:
                self._do_validation(evaluated_validator)
            except exceptions.ValidationFailure as ex:
                validate_pass = False
                failures.append(str(ex))

            self.validation_results.append(evaluated_validator)

        return validate_pass, failures
示例#9
0
def _convert_validators_to_mapping(validators):
    '''
    convert validators list to mapping.
    Args:
        validators (list): validators in list
    Returns:
        dict: validators mapping, use (check, comparator) as key.
    Examples:
        >>> validators = [
                {'check':'v1','expect':201,'comparator':'eq'},
                {'check':{'b':1},'expect':201,'comparator':'eq'}
            ]
        >>> _convert_validators_to_mapping(validators)
            {
                ('v1','eq'):{'check':'v1','expect':201,'comparator':'eq},
                ('{'b':1}','eq'):{'check':{'b':1'},'expect':201,'comparator':'eq'}
            }
    '''
    validators_mapping = {}
    for validate in validators:
        validate = parser.parse_validator(validate)

        if not isinstance(validate['check'], collections.Hashable):
            check = json.dumps(validate['check'])
        else:
            check = validate['check']

        key = (check, validate['comparator'])
        validators_mapping[key] = validate

    return validators_mapping
示例#10
0
    def test_extend_validators(self):
        def_validators = [{
            'eq': ['v1', 200]
        }, {
            "check": "s2",
            "expect": 16,
            "comparator": "len_eq"
        }]
        current_validators = [{
            "check": "v1",
            "expect": 201
        }, {
            'len_eq': ['s3', 12]
        }]
        def_validators = [
            parser.parse_validator(validator) for validator in def_validators
        ]
        ref_validators = [
            parser.parse_validator(validator)
            for validator in current_validators
        ]

        extended_validators = utils.extend_validators(def_validators,
                                                      ref_validators)
        self.assertIn({
            "check": "v1",
            "expect": 201,
            "comparator": "eq"
        }, extended_validators)
        self.assertIn({
            "check": "s2",
            "expect": 16,
            "comparator": "len_eq"
        }, extended_validators)
        self.assertIn({
            "check": "s3",
            "expect": 12,
            "comparator": "len_eq"
        }, extended_validators)
示例#11
0
    def validate(self, validators, resp_obj):
        """ make validations
        """
        evaluated_validators = []
        if not validators:
            return evaluated_validators

        logger.log_info("start to validate.")
        failures = []

        for validator in validators:
            # evaluate validators with context variable mapping.
            evaluated_validator = self.__eval_check_item(
                parser.parse_validator(validator), resp_obj)

            try:
                self._do_validation(evaluated_validator)
            except exceptions.ValidationFailure as ex:
                failures.append(str(ex))

            evaluated_validators.append(evaluated_validator)

        return evaluated_validators
示例#12
0
    def validate(self, validators, resp_obj):
        """ make validations
        """
        if not validators:
            return

        logger.log_info("start to validate.")
        self.evaluated_validators = []
        validate_pass = True

        for validator in validators:
            # evaluate validators with context variable mapping.
            evaluated_validator = self.eval_check_item(
                parser.parse_validator(validator), resp_obj)

            try:
                self.do_validation(evaluated_validator)
            except exceptions.ValidationFailure:
                validate_pass = False

            self.evaluated_validators.append(evaluated_validator)

        if not validate_pass:
            raise exceptions.ValidationFailure