summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/fileserver/matcher_test.go
diff options
context:
space:
mode:
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