Browse Source
* 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 godocmaster
committed by
GitHub
9 changed files with 342 additions and 188 deletions
@ -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) |
|||
} |
|||
} |
|||
} |
@ -0,0 +1 @@ |
|||
foo.php.php/index.php |
@ -0,0 +1 @@ |
|||
index.php |
@ -0,0 +1 @@ |
|||
notphp.php.txt |
@ -0,0 +1 @@ |
|||
remote.php |
Loading…
Reference in new issue