From 5ae1a5617c4bb1deef22cb3658ee581bb7dbf367 Mon Sep 17 00:00:00 2001 From: Francis Lavoie Date: Mon, 27 Apr 2020 16:46:46 -0400 Subject: caddyhttp: Add split_path to file matcher (used by php_fastcgi) (#3302) * matcher: Add `split_path` option to file matcher; used in php_fastcgi * matcher: Skip try_files split if not the final part of the filename * matcher: Add MatchFile tests * matcher: Clarify SplitPath godoc --- modules/caddyhttp/fileserver/matcher_test.go | 102 +++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 modules/caddyhttp/fileserver/matcher_test.go (limited to 'modules/caddyhttp/fileserver/matcher_test.go') diff --git a/modules/caddyhttp/fileserver/matcher_test.go b/modules/caddyhttp/fileserver/matcher_test.go new file mode 100644 index 0000000..aa84900 --- /dev/null +++ b/modules/caddyhttp/fileserver/matcher_test.go @@ -0,0 +1,102 @@ +// Copyright 2015 Matthew Holt and The Caddy Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileserver + +import ( + "net/http" + "net/url" + "testing" + + "github.com/caddyserver/caddy/v2/modules/caddyhttp" +) + +func TestPhpFileMatcher(t *testing.T) { + + for i, tc := range []struct { + path string + expectedPath string + matched bool + }{ + { + path: "/index.php", + expectedPath: "/index.php", + matched: true, + }, + { + path: "/index.php/somewhere", + expectedPath: "/index.php", + matched: true, + }, + { + path: "/remote.php", + expectedPath: "/remote.php", + matched: true, + }, + { + path: "/remote.php/somewhere", + expectedPath: "/remote.php", + matched: true, + }, + { + path: "/missingfile.php", + matched: false, + }, + { + path: "/notphp.php.txt", + expectedPath: "/notphp.php.txt", + matched: true, + }, + { + path: "/notphp.php.txt/", + expectedPath: "/notphp.php.txt", + matched: true, + }, + { + path: "/notphp.php.txt.suffixed", + matched: false, + }, + { + path: "/foo.php.php/index.php", + expectedPath: "/foo.php.php/index.php", + matched: true, + }, + } { + m := &MatchFile{ + Root: "./testdata", + TryFiles: []string{"{http.request.uri.path}"}, + SplitPath: []string{".php"}, + } + + req := &http.Request{URL: &url.URL{Path: tc.path}} + repl := caddyhttp.NewTestReplacer(req) + + result := m.Match(req) + if result != tc.matched { + t.Fatalf("Test %d: match bool result: %v, expected: %v", i, result, tc.matched) + } + + rel, ok := repl.Get("http.matchers.file.relative") + if !ok && result { + t.Fatalf("Test %d: expected replacer value", i) + } + if !result { + continue + } + + if rel != tc.expectedPath { + t.Fatalf("Test %d: actual path: %v, expected: %v", i, rel, tc.expectedPath) + } + } +} \ No newline at end of file -- cgit v1.2.3