From 1088f0b969e18ee5a8fe829d2071507ddef0d05e Mon Sep 17 00:00:00 2001 From: Aurelien DARRAGON Date: Mon, 8 Jan 2024 10:25:18 +0100 Subject: [PATCH] REGTESTS: add a test to ensure map-ordering is preserved As shown in "BUG/MINOR: map: list-based matching potential ordering regression", list-based matching types such as dom are affected by the order in which elements are loaded from the map. Since this is historical behavior and existing usages depend on it, we add a test to prevent future regressions. --- reg-tests/http-rules/map_ordering.map | 4 ++++ reg-tests/http-rules/map_ordering.vtc | 32 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 reg-tests/http-rules/map_ordering.map create mode 100644 reg-tests/http-rules/map_ordering.vtc diff --git a/reg-tests/http-rules/map_ordering.map b/reg-tests/http-rules/map_ordering.map new file mode 100644 index 000000000..dcd952955 --- /dev/null +++ b/reg-tests/http-rules/map_ordering.map @@ -0,0 +1,4 @@ +# These entries are used for list-based match ordering tests +first.domain.tld first +domain.tld domain +second.domain.tld second diff --git a/reg-tests/http-rules/map_ordering.vtc b/reg-tests/http-rules/map_ordering.vtc new file mode 100644 index 000000000..40da465ca --- /dev/null +++ b/reg-tests/http-rules/map_ordering.vtc @@ -0,0 +1,32 @@ +varnishtest "Test list-based matching types ordering" +feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'" +feature ignore_unknown_macro + +haproxy h1 -conf { + defaults + mode http + timeout connect "${HAPROXY_TEST_TIMEOUT-5s}" + timeout client "${HAPROXY_TEST_TIMEOUT-5s}" + timeout server "${HAPROXY_TEST_TIMEOUT-5s}" + + frontend fe1 + bind "fd@${fe1}" + + # check list ordering using map_dom (list-based match) + http-request return hdr dom %[req.hdr(Host),lower,map_dom(${testdir}/map_ordering.map)] if { url_beg /dom } +} -start + +# Check map ordering +client c1 -connect ${h1_fe1_sock} { + # first.domain.tld is above domain.tld so it should match first + txreq -url "/dom" -hdr "Host: first.domain.tld" + rxresp + expect resp.status == 200 + expect resp.http.dom == "first" + + # second.domain.tld is below domain.tld so domain.tld should match first + txreq -url "/dom" -hdr "Host: second.domain.tld" + rxresp + expect resp.status == 200 + expect resp.http.dom == "domain" +} -run