# This config file aims to trigger all error detection cases in the ACL
# expression parser related to the fetch arguments.

# silence some warnings
defaults
	mode http
	timeout client 1s
	timeout server 1s
	timeout connect 1s

frontend 1
	bind :10000

	# missing fetch method in ACL expression '(arg)'.
	block if { (arg) }

	# unknown fetch method 'blah' in ACL expression 'blah(arg)'.
	block if { blah(arg) }

	# missing closing ')' after arguments to fetch keyword 'req.hdr' in ACL expression 'req.hdr('.
	block if { req.hdr( }

	# cannot be triggerred : "returns type of fetch method '%s' is unknown"

	# fetch method 'always_true' : no argument supported, but got 'arg' in ACL expression 'always_true(arg)'.
	block if { always_true(arg) }

	# fetch method 'req.hdr' : failed to parse 'a' as type 'signed integer' at position 2 in ACL expression 'req.hdr(a,a)'.
	block if { req.hdr(a,a) }

	# in argument to 'payload_lv', payload length must be > 0.
	block if { payload_lv(0,0) }

	# ACL keyword 'payload_lv' : expected type 'unsigned integer' at position 1, but got nothing.
	block if { payload_lv }

