Browse Source
It didn't really make sense how we were doing them before. See https://caddy.community/t/map-directive-and-regular-expressions/13866/6?u=mattmaster
Matthew Holt
3 years ago
2 changed files with 101 additions and 1 deletions
@ -0,0 +1,96 @@ |
|||
package maphandler |
|||
|
|||
import ( |
|||
"context" |
|||
"net/http" |
|||
"net/http/httptest" |
|||
"reflect" |
|||
"testing" |
|||
|
|||
"github.com/caddyserver/caddy/v2" |
|||
"github.com/caddyserver/caddy/v2/modules/caddyhttp" |
|||
) |
|||
|
|||
func TestHandler(t *testing.T) { |
|||
for i, tc := range []struct { |
|||
handler Handler |
|||
reqPath string |
|||
expect map[string]interface{} |
|||
}{ |
|||
{ |
|||
reqPath: "/foo", |
|||
handler: Handler{ |
|||
Source: "{http.request.uri.path}", |
|||
Destinations: []string{"{output}"}, |
|||
Mappings: []Mapping{ |
|||
{ |
|||
Input: "/foo", |
|||
Outputs: []interface{}{"FOO"}, |
|||
}, |
|||
}, |
|||
}, |
|||
expect: map[string]interface{}{ |
|||
"output": "FOO", |
|||
}, |
|||
}, |
|||
{ |
|||
reqPath: "/abcdef", |
|||
handler: Handler{ |
|||
Source: "{http.request.uri.path}", |
|||
Destinations: []string{"{output}"}, |
|||
Mappings: []Mapping{ |
|||
{ |
|||
InputRegexp: "(/abc)", |
|||
Outputs: []interface{}{"ABC"}, |
|||
}, |
|||
}, |
|||
}, |
|||
expect: map[string]interface{}{ |
|||
"output": "ABC", |
|||
}, |
|||
}, |
|||
{ |
|||
reqPath: "/ABCxyzDEF", |
|||
handler: Handler{ |
|||
Source: "{http.request.uri.path}", |
|||
Destinations: []string{"{output}"}, |
|||
Mappings: []Mapping{ |
|||
{ |
|||
InputRegexp: "(xyz)", |
|||
Outputs: []interface{}{"...${1}..."}, |
|||
}, |
|||
}, |
|||
}, |
|||
expect: map[string]interface{}{ |
|||
"output": "...xyz...", |
|||
}, |
|||
}, |
|||
} { |
|||
if err := tc.handler.Provision(caddy.Context{}); err != nil { |
|||
t.Fatalf("Test %d: Provisioning handler: %v", i, err) |
|||
} |
|||
|
|||
req, err := http.NewRequest(http.MethodGet, tc.reqPath, nil) |
|||
if err != nil { |
|||
t.Fatalf("Test %d: Creating request: %v", i, err) |
|||
} |
|||
repl := caddyhttp.NewTestReplacer(req) |
|||
ctx := context.WithValue(req.Context(), caddy.ReplacerCtxKey, repl) |
|||
req = req.WithContext(ctx) |
|||
|
|||
rr := httptest.NewRecorder() |
|||
noop := caddyhttp.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) error { return nil }) |
|||
|
|||
if err := tc.handler.ServeHTTP(rr, req, noop); err != nil { |
|||
t.Errorf("Test %d: Handler returned error: %v", i, err) |
|||
continue |
|||
} |
|||
|
|||
for key, expected := range tc.expect { |
|||
actual, _ := repl.Get(key) |
|||
if !reflect.DeepEqual(actual, expected) { |
|||
t.Errorf("Test %d: Expected %#v but got %#v for {%s}", i, expected, actual, key) |
|||
} |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue