def do_validation(self, validator_dict): """ validate with functions """ comparator = utils.get_uniform_comparator(validator_dict["comparator"]) validate_func = self.testcase_parser.get_bind_item( "function", comparator) if not validate_func: raise exception.FunctionNotFound( "comparator not found: {}".format(comparator)) check_item = validator_dict["check"] check_value = validator_dict["check_value"] expect_value = validator_dict["expect"] if (check_value is None or expect_value is None) \ and comparator not in ["is", "eq", "equals", "=="]: raise exception.ParamsError( "Null value can only be compared with comparator: eq/equals/==" ) try: validate_func(validator_dict["check_value"], validator_dict["expect"]) except (AssertionError, TypeError): err_msg = "\n" + "\n".join([ "\tcheck item name: %s;" % check_item, "\tcheck item value: %s (%s);" % (check_value, type(check_value).__name__), "\tcomparator: %s;" % comparator, "\texpected value: %s (%s)." % (expect_value, type(expect_value).__name__) ]) raise exception.ValidationError(err_msg)
def match_expected(value, expected, comparator="eq", check_item=""): """ check if value matches expected value. @param value: actual value that get from response. @param expected: expected result described in testcase @param comparator: compare method @param check_item: check item name """ try: if value is None or expected is None: assert comparator in ["is", "eq", "equals", "=="] assert value is None assert expected is None if comparator in ["eq", "equals", "=="]: assert value == expected elif comparator in ["lt", "less_than"]: assert value < expected elif comparator in ["le", "less_than_or_equals"]: assert value <= expected elif comparator in ["gt", "greater_than"]: assert value > expected elif comparator in ["ge", "greater_than_or_equals"]: assert value >= expected elif comparator in ["ne", "not_equals"]: assert value != expected elif comparator in ["str_eq", "string_equals"]: assert str(value) == str(expected) elif comparator in ["len_eq", "length_equals", "count_eq"]: assert isinstance(expected, int) assert len(value) == expected elif comparator in [ "len_gt", "count_gt", "length_greater_than", "count_greater_than" ]: assert isinstance(expected, int) assert len(value) > expected elif comparator in ["len_ge", "count_ge", "length_greater_than_or_equals", \ "count_greater_than_or_equals"]: assert isinstance(expected, int) assert len(value) >= expected elif comparator in [ "len_lt", "count_lt", "length_less_than", "count_less_than" ]: assert isinstance(expected, int) assert len(value) < expected elif comparator in ["len_le", "count_le", "length_less_than_or_equals", \ "count_less_than_or_equals"]: assert isinstance(expected, int) assert len(value) <= expected elif comparator in ["contains"]: assert isinstance(value, (list, tuple, dict, string_type)) assert expected in value elif comparator in ["contained_by"]: assert isinstance(expected, (list, tuple, dict, string_type)) assert value in expected elif comparator in ["type"]: assert isinstance(value, expected) elif comparator in ["regex"]: assert isinstance(expected, string_type) assert isinstance(value, string_type) assert re.match(expected, value) elif comparator in ["startswith"]: assert str(value).startswith(str(expected)) elif comparator in ["endswith"]: assert str(value).endswith(str(expected)) else: raise exception.ParamsError("comparator not supported!") return True except (AssertionError, TypeError): err_msg = "\n".join([ "check item name: %s;" % check_item, "check item value: %s (%s);" % (value, type(value).__name__), "comparator: %s;" % comparator, "expected value: %s (%s)." % (expected, type(expected).__name__) ]) raise exception.ValidationError(err_msg)