summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/fileserver/matcher_test.go
diff options
context:
space:
mode:
authorFrancis Lavoie <lavofr@gmail.com>2020-04-27 16:46:46 -0400
committerGitHub <noreply@github.com>2020-04-27 14:46:46 -0600
commit5ae1a5617c4bb1deef22cb3658ee581bb7dbf367 (patch)
tree84bb5582a6b1f961ad670f290d020b747ff26cee /modules/caddyhttp/fileserver/matcher_test.go
parent83c85c53f583906e438bb9eb30fc0ab57bf59108 (diff)
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
Diffstat (limited to 'modules/caddyhttp/fileserver/matcher_test.go')
-rw-r--r--modules/caddyhttp/fileserver/matcher_test.go102
1 files changed, 102 insertions, 0 deletions
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