Skip to content

Commit dd42a5b

Browse files
committed
#946 not modifying request header key when matching
1 parent 60b4aa2 commit dd42a5b

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

core/matching/header_matcher.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ func HeaderMatching(requestMatcher models.RequestMatcher, toMatch map[string][]s
2121

2222
for matcherHeaderKey, matcherHeaderValue := range requestMatcherHeadersWithMatchers {
2323
// Make everything lowercase, as headers are case insensitive
24-
for requestHeaderKey, requestHeaderValues := range toMatch {
25-
delete(toMatch, requestHeaderKey)
26-
toMatch[strings.ToLower(requestHeaderKey)] = requestHeaderValues
24+
toMatchWithLowerCaseKeys := make(map[string][]string)
25+
for key, value := range toMatch {
26+
toMatchWithLowerCaseKeys[strings.ToLower(key)] = value
2727
}
2828
matcherHeaderValueMatched := false
2929

30-
toMatchHeaderValues, found := toMatch[strings.ToLower(matcherHeaderKey)]
30+
toMatchHeaderValues, found := toMatchWithLowerCaseKeys[strings.ToLower(matcherHeaderKey)]
3131
if !found {
3232
matched = false
3333
continue

core/matching/header_matcher_test.go

+26
Original file line numberDiff line numberDiff line change
@@ -177,3 +177,29 @@ func Test_HeaderMatching(t *testing.T) {
177177
}
178178

179179
}
180+
181+
182+
func Test_HeaderMatching_NotModifyingOriginalRequestHeaders(t *testing.T) {
183+
RegisterTestingT(t)
184+
185+
requestHeaders := map[string][]string{
186+
"Header1": {"val1"},
187+
}
188+
result := matching.HeaderMatching(models.RequestMatcher{
189+
Headers: map[string][]models.RequestFieldMatchers{
190+
"HEADER1": {
191+
{
192+
Matcher: matchers.Exact,
193+
Value: "val1",
194+
},
195+
},
196+
},
197+
},
198+
requestHeaders)
199+
200+
Expect(result.Matched).To(BeTrue())
201+
Expect(requestHeaders).To(Equal(map[string][]string{
202+
"Header1": {"val1"},
203+
}))
204+
205+
}

0 commit comments

Comments
 (0)