]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
TESTS: add regression tests for ACL and sample expression parsers
authorWilly Tarreau <w@1wt.eu>
Fri, 13 Dec 2013 00:32:09 +0000 (01:32 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 13 Dec 2013 00:35:08 +0000 (01:35 +0100)
These ones trigger each of the error messages in the code about
argument and converters syntax.

tests/test-acl-args.cfg [new file with mode: 0644]
tests/test-sample-fetch-args.cfg [new file with mode: 0644]
tests/test-sample-fetch-conv.cfg [new file with mode: 0644]

diff --git a/tests/test-acl-args.cfg b/tests/test-acl-args.cfg
new file mode 100644 (file)
index 0000000..5946f0e
--- /dev/null
@@ -0,0 +1,36 @@
+# 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 }
+
diff --git a/tests/test-sample-fetch-args.cfg b/tests/test-sample-fetch-args.cfg
new file mode 100644 (file)
index 0000000..cddf4fe
--- /dev/null
@@ -0,0 +1,36 @@
+# This config file aims to trigger all error detection cases in the sample
+# fetch 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
+       http-request add-header name %[(arg)]
+
+       # unknown fetch method 'blah'
+       http-request add-header name %[blah(arg)]
+
+       # missing closing ')' after arguments to fetch keyword 'req.hdr'
+       http-request add-header name %[req.hdr(]
+
+       # cannot be triggerred : "returns type of fetch method '%s' is unknown"
+
+       # fetch method 'always_true' : no argument supported, but got 'arg'
+       http-request add-header name %[always_true(arg)]
+
+       # fetch method 'req.hdr' : failed to parse 'a' as 'signed integer' at position 2
+       http-request add-header name %[req.hdr(a,a)]
+
+       # invalid args in fetch method 'payload_lv' : payload length must be > 0
+       http-request add-header name %[payload_lv(0,0)]
+
+       # fetch method 'payload_lv' : expected type 'unsigned integer' at position 1, but got nothing
+       http-request add-header name %[payload_lv]
+
diff --git a/tests/test-sample-fetch-conv.cfg b/tests/test-sample-fetch-conv.cfg
new file mode 100644 (file)
index 0000000..50eda5d
--- /dev/null
@@ -0,0 +1,42 @@
+# This config file aims to trigger all error detection cases in the sample
+# fetch expression parser related to the sample converters.
+
+# silence some warnings
+defaults
+       mode http
+       timeout client 1s
+       timeout server 1s
+       timeout connect 1s
+
+frontend 1
+       bind :10000
+
+       # report "missing comma after fetch keyword %s"
+       http-request add-header name %[hdr(arg))]
+
+       # report "missing comma after conv keyword %s"
+       http-request add-header name %[hdr(arg),ipmask(2))]
+
+       # report "unknown conv method '%s'"
+       http-request add-header name %[hdr(arg),blah]
+
+       # report "syntax error: missing ')' after conv keyword '%s'"
+       http-request add-header name %[hdr(arg),ipmask(2]
+
+       # no way to report "returns type of conv method '%s' is unknown"
+
+       # "conv method '%s' cannot be applied"
+       http-request add-header name %[wait_end,ipmask(2)]
+
+       # "conv method '%s' does not support any args"
+       http-request add-header name %[hdr(arg),upper()]
+
+       # "invalid arg %d in conv method '%s' : %s"
+       http-request add-header name %[hdr(arg),ipmask(a)]
+
+       # "invalid args in conv method '%s' : %s"
+       http-request add-header name %[hdr(arg),map()]
+
+       # "missing args for conv method '%s'"
+       http-request add-header name %[hdr(arg),ipmask]
+