mirror of
http://git.haproxy.org/git/haproxy.git
synced 2026-02-18 21:26:52 +02:00
With the json_query can a JSON value be extacted from a header or body of the request and saved to a variable. This converter makes it possible to handle some JSON workload to route requests to different backends.
95 lines
2.7 KiB
Plaintext
95 lines
2.7 KiB
Plaintext
varnishtest "JSON Query converters Test"
|
|
#REQUIRE_VERSION=2.4
|
|
|
|
feature ignore_unknown_macro
|
|
|
|
server s1 {
|
|
rxreq
|
|
txresp
|
|
} -repeat 8 -start
|
|
|
|
haproxy h1 -conf {
|
|
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 |