From bc738991b6234bf334855e1396919e79ef9791b8 Mon Sep 17 00:00:00 2001 From: Pascal Date: Mon, 14 Oct 2019 19:29:36 +0200 Subject: caddyhttp: Support placeholders in MatchHost (#2810) * Replace global placeholders in host matcher * caddyhttp: Fix panic on MatchHost tests --- modules/caddyhttp/matchers_test.go | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'modules/caddyhttp/matchers_test.go') diff --git a/modules/caddyhttp/matchers_test.go b/modules/caddyhttp/matchers_test.go index 48783ae..81cb1d0 100644 --- a/modules/caddyhttp/matchers_test.go +++ b/modules/caddyhttp/matchers_test.go @@ -20,12 +20,18 @@ import ( "net/http" "net/http/httptest" "net/url" + "os" "testing" "github.com/caddyserver/caddy/v2" ) func TestHostMatcher(t *testing.T) { + err := os.Setenv("GO_BENCHMARK_DOMAIN", "localhost") + if err != nil { + t.Errorf("error while setting up environment: %v", err) + } + for i, tc := range []struct { match MatchHost input string @@ -106,8 +112,22 @@ func TestHostMatcher(t *testing.T) { input: "example.com:5555", expect: true, }, + { + match: MatchHost{"{env.GO_BENCHMARK_DOMAIN}"}, + input: "localhost", + expect: true, + }, + { + match: MatchHost{"{env.GO_NONEXISTENT}"}, + input: "localhost", + expect: false, + }, } { req := &http.Request{Host: tc.input} + repl := caddy.NewReplacer() + ctx := context.WithValue(req.Context(), caddy.ReplacerCtxKey, repl) + req = req.WithContext(ctx) + actual := tc.match.Match(req) if actual != tc.expect { t.Errorf("Test %d %v: Expected %t, got %t for '%s'", i, tc.match, tc.expect, actual, tc.input) @@ -518,3 +538,35 @@ func TestResponseMatcher(t *testing.T) { } } } + +func BenchmarkHostMatcherWithoutPlaceholder(b *testing.B) { + req := &http.Request{Host: "localhost"} + repl := caddy.NewReplacer() + ctx := context.WithValue(req.Context(), caddy.ReplacerCtxKey, repl) + req = req.WithContext(ctx) + + match := MatchHost{"localhost"} + + b.ResetTimer() + for i := 0; i < b.N; i++ { + match.Match(req) + } +} + +func BenchmarkHostMatcherWithPlaceholder(b *testing.B) { + err := os.Setenv("GO_BENCHMARK_DOMAIN", "localhost") + if err != nil { + b.Errorf("error while setting up environment: %v", err) + } + + req := &http.Request{Host: "localhost"} + repl := caddy.NewReplacer() + ctx := context.WithValue(req.Context(), caddy.ReplacerCtxKey, repl) + req = req.WithContext(ctx) + match := MatchHost{"{env.GO_BENCHMARK_DOMAIN}"} + + b.ResetTimer() + for i := 0; i < b.N; i++ { + match.Match(req) + } +} -- cgit v1.2.3