mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-18 09:24:31 +00:00
f66b9f6018
Method now returns the content of Json Arrays, if it is specified in Json Path as String. The start and end character is a square bracket. Any complex object in the array is returned as Json, so that you might get Arrays of Array or objects. Only recommended for Arrays of simple types (e.g., String or int) which will be returned as CSV String. Also updated documentation and fixed issue with parenthesis and other changes from comments. This patch was discussed in issue #2281. Signed-off-by: William Lallemand <wlallemand@haproxy.com>
108 lines
3.2 KiB
Plaintext
108 lines
3.2 KiB
Plaintext
varnishtest "JSON Query converters Test"
|
|
#REQUIRE_VERSION=2.4
|
|
|
|
feature ignore_unknown_macro
|
|
|
|
server s1 {
|
|
rxreq
|
|
txresp -hdr "Connection: close"
|
|
} -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 "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout client "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
timeout server "${HAPROXY_TEST_TIMEOUT-5s}"
|
|
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"
|
|
|
|
txreq -url "/" \
|
|
-body "{\"my.key\":[\"val1\",\"val2\",\"val3\"],\"key2\":\"val4\"}"
|
|
expect resp.status == 200
|
|
expect resp.http.x-var_body_mykey ~ "[\"val1\",\"val2\",\"val3\"]"
|
|
|
|
} -run
|