varnishtest "JSON Query converters Test"
#REQUIRE_VERSION=2.4

feature ignore_unknown_macro

server s1 {
	rxreq
	txresp
} -repeat 8 -start

haproxy h1 -conf {
    global
        # WT: limit false-positives causing "HTTP header incomplete" due to
        # idle server connections being randomly used and randomly expiring
        # under us.
        tune.idle-pool.shared off

    defaults
	mode http
	timeout connect 1s
	timeout client  1s
	timeout server  1s
	option http-buffer-request

    frontend fe
	bind "fd@${fe}"
	tcp-request inspect-delay 1s

	http-request set-var(sess.header_json) req.hdr(Authorization),json_query('$.iss')
	http-request set-var(sess.pay_json) req.body,json_query('$.iss')
	http-request set-var(sess.pay_int) req.body,json_query('$.integer',"int"),add(1)
	http-request set-var(sess.pay_neg_int) req.body,json_query('$.negativ-integer',"int"),add(1)
	http-request set-var(sess.pay_double) req.body,json_query('$.double')
	http-request set-var(sess.pay_boolean_true) req.body,json_query('$.boolean-true')
	http-request set-var(sess.pay_boolean_false) req.body,json_query('$.boolean-false')
	http-request set-var(sess.pay_mykey) req.body,json_query('$.my\\.key')

	http-response set-header x-var_header %[var(sess.header_json)]
	http-response set-header x-var_body %[var(sess.pay_json)]
	http-response set-header x-var_body_int %[var(sess.pay_int)]
	http-response set-header x-var_body_neg_int %[var(sess.pay_neg_int)]
	http-response set-header x-var_body_double %[var(sess.pay_double)]
	http-response set-header x-var_body_boolean_true %[var(sess.pay_boolean_true)]
	http-response set-header x-var_body_boolean_false %[var(sess.pay_boolean_false)]
	http-response set-header x-var_body_mykey %[var(sess.pay_mykey)]

	default_backend be

    backend be
	server s1 ${s1_addr}:${s1_port}
} -start

client c1 -connect ${h1_fe_sock} {
	txreq -url "/" \
	  -hdr "Authorization: {\"iss\":\"kubernetes.io/serviceaccount\"}"
	rxresp
	expect resp.status == 200
	expect resp.http.x-var_header ~ "kubernetes.io/serviceaccount"

	txreq -url "/" \
	  -body "{\"iss\":\"kubernetes.io/serviceaccount\"}"
	rxresp
	expect resp.status == 200
	expect resp.http.x-var_body ~ "kubernetes.io/serviceaccount"

	txreq -url "/" \
	  -body "{\"integer\":4}"
	rxresp
	expect resp.status == 200
	expect resp.http.x-var_body_int ~ "5"

	txreq -url "/" \
	  -body "{\"integer\":-4}"
	rxresp
	expect resp.status == 200
	expect resp.http.x-var_body_int ~ "-3"

	txreq -url "/" \
	  -body "{\"double\":4.5}"
	rxresp
	expect resp.status == 200
	expect resp.http.x-var_body_double ~ "4.5"

	txreq -url "/" \
	  -body "{\"boolean-true\":true}"
	rxresp
	expect resp.status == 200
	expect resp.http.x-var_body_boolean_true == 1

	txreq -url "/" \
	  -body "{\"boolean-false\":false}"
	rxresp
	expect resp.status == 200
	expect resp.http.x-var_body_boolean_false == 0

	txreq -url "/" \
	  -body "{\"my.key\":\"myvalue\"}"
	rxresp
	expect resp.status == 200
	expect resp.http.x-var_body_mykey ~ "myvalue"
} -run