# 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 triggered : "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 }

