The existing tests all use short URIs: the longest is 21 characters and no query string has more than six parameters. That leaves the bulk copy paths and the query sort untested on inputs where they actually differ from a byte-at-a-time loop.
Add four cases that exercise them: a 200 byte run without any percent sign followed by an escape, a percent sequence surrounded by a long plain run, an uppercase conversion in a long URI, a twelve parameter query string in reverse order, and a fragment at the end of a long URI. Signed-off-by: Youngkwang Lee <[email protected]> Signed-off-by: Youngkwang Lee <[email protected]> --- reg-tests/http-rules/normalize_uri.vtc | 38 +++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/reg-tests/http-rules/normalize_uri.vtc b/reg-tests/http-rules/normalize_uri.vtc index 55790a752..909182740 100644 --- a/reg-tests/http-rules/normalize_uri.vtc +++ b/reg-tests/http-rules/normalize_uri.vtc @@ -7,7 +7,7 @@ feature ignore_unknown_macro server s1 { rxreq txresp -hdr "connection: close" -} -repeat 70 -start +} -repeat 77 -start haproxy h1 -conf { global @@ -577,3 +577,39 @@ client c12 -connect ${h1_fe_cond_sock} { expect resp.http.before == "/a//b/%62" expect resp.http.after == "/a//b/b" } -run + +# The tests above all use short URIs with few query parameters. These cover +# the paths that copy long runs between percent signs, that sort a query +# string with many parameters, and that encode a fragment in a long URI. +client c13 -connect ${h1_fe_percent_decode_unreserved_sock} { + txreq -url "/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij?%61=%61" + rxresp + expect resp.http.before == "/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij?%61=%61" + expect resp.http.after == "/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij?a=a" + + txreq -url "/%61bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%62" + rxresp + expect resp.http.before == "/%61bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%62" + expect resp.http.after == "/abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" +} -run + +client c14 -connect ${h1_fe_percent_to_uppercase_sock} { + txreq -url "/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij?%2f=%2f" + rxresp + expect resp.http.before == "/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij?%2f=%2f" + expect resp.http.after == "/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij?%2F=%2F" +} -run + +client c15 -connect ${h1_fe_sort_query_by_name_sock} { + txreq -url "/?p11=v11&p10=v10&p09=v09&p08=v08&p07=v07&p06=v06&p05=v05&p04=v04&p03=v03&p02=v02&p01=v01&p00=v00" + rxresp + expect resp.http.before == "/?p11=v11&p10=v10&p09=v09&p08=v08&p07=v07&p06=v06&p05=v05&p04=v04&p03=v03&p02=v02&p01=v01&p00=v00" + expect resp.http.after == "/?p00=v00&p01=v01&p02=v02&p03=v03&p04=v04&p05=v05&p06=v06&p07=v07&p08=v08&p09=v09&p10=v10&p11=v11" +} -run + +client c16 -connect ${h1_fe_fragment_encode_sock} { + txreq -url "/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij#foo" + rxresp + expect resp.http.before == "/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij#foo" + expect resp.http.after == "/abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij%23foo" +} -run -- 2.45.1

