varnishtest "Misuses of defaults section defining TCP/HTTP rules"

feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'"
feature ignore_unknown_macro

#
# anonymous defaults section cannot define TCP/HTTP rules
#
haproxy h1 -conf-BAD {} {
    defaults
        http-request set-header X-Hdr 1
}

haproxy h2 -conf-BAD {} {
    defaults
        http-response set-header X-Hdr 1
}

haproxy h3 -conf-BAD {} {
    defaults
        http-after-request set-header X-Hdr 1
}

haproxy h4 -conf-BAD {} {
    defaults
        tcp-request connection accept
}

haproxy h5 -conf-BAD {} {
    defaults
        tcp-request session accept
}

haproxy h6 -conf-BAD {} {
    defaults
        tcp-request inspect-delay 5s
        tcp-request content accept
}

haproxy h7 -conf-BAD {} {
    defaults
        tcp-response inspect-delay 5s
        tcp-response content accept
}

#
# defaults section defining TCP/HTTP rules cannot be used to init another
# defaults section
#
haproxy h8 -conf-BAD {} {
    defaults invalid
        tcp-response inspect-delay 5s
        tcp-response content accept

    defaults from invalid
        mode tcp
}

#
# defaults section defining TCP/HTTP rules cannot be used to init a listen
# section
#
haproxy h9 -conf-BAD {} {
    defaults invalid
        tcp-request inspect-delay 5s
        tcp-request content accept

    listen li from invalid
        mode tcp
        bind "fd@${lih9}"
        server www 127.0.0.1:80
}

#
# defaults section defining TCP/HTTP rules cannot be used to init frontend and
# backend sections at the same time
#
#
haproxy h10 -conf-BAD {} {
    defaults invalid
        tcp-request inspect-delay 5s
        tcp-request content accept

    frontend fe from invalid
        mode tcp
        bind "fd@${feh10}"
        default_backend be1

    backend be from invalid
        mode tcp
        server www 127.0.0.1:80
}

#
# defaults section defining 'tcp-request connection' or 'tcp-request session'
# rules cannot be used to init backend sections
#
haproxy h11 -conf-BAD {} {
    defaults invalid
        tcp-request connection accept

    backend be from invalid
        mode tcp
        server www 127.0.0.1:80
}

haproxy h12 -conf-BAD {} {
    defaults invalid
        tcp-request session accept

    backend be from invalid
        mode tcp
        server www 127.0.0.1:80
}

#
# defaults section defining 'tcp-response content' rules cannot be used to init
# a frontend section
#
haproxy h13 -conf-BAD {} {
    defaults invalid
        tcp-response inspect-delay 5s
        tcp-response content accept

    frontend fe from invalid
        mode tcp
        bind "fd@${feh10}"
}

haproxy h14 -conf-OK {
    defaults tcp
        tcp-response inspect-delay 5s
        tcp-response content accept

    backend be from tcp
        mode tcp
        server www 127.0.0.1:80
}

#
# Check arguments resolutions in rules. FE/BE arguments must be resolved, but
# SRV/TAB arguments without an explicit proxy name are not allowed.
#

haproxy h15 -conf-BAD {} {
    defaults invalid
        mode http
        http-request set-header x-test "%[srv_conn(www)]"

    backend be from invalid
        server www 127.0.0.1:80
}

haproxy h16 -conf-BAD {} {
    defaults invalid
        mode http
        http-request track-sc0 src
        http-request deny deny_status 429 if { sc_http_req_rate(0) gt 20 }

    backend be
        stick-table type ip size 100k expire 30s store http_req_rate(10s)
        server www 127.0.0.1:80
}

haproxy h17 -conf-OK {
    defaults common
        mode http

    defaults def_front from common
        http-request set-header x-test1 "%[fe_conn]"

    defaults def_back from common
        http-request track-sc0 src table be
        http-request deny deny_status 429 if { sc_http_req_rate(0,be) gt 20 }
        http-request set-header x-test2 "%[be_conn]"
        http-request set-header x-test3 "%[srv_conn(be/www)]"

    frontend fe from def_front
        bind "fd@${feh15}"
        default_backend be

    backend be from def_back
        stick-table type ip size 100k expire 30s store http_req_rate(10s)
        server www 127.0.0.1:80
}
