blob: 4541930ed591a2e69ef93ad29ac9b97e4efafae1 [file] [log] [blame]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package framework
import (
"testing"
"github.com/go-test/deep"
)
func TestPath_Regex(t *testing.T) {
tests := []struct {
pattern string
input string
pathMatch bool
captures map[string]string
}{
{
pattern: "a/b/" + GenericNameRegex("val"),
input: "a/b/foo",
pathMatch: true,
captures: map[string]string{"val": "foo"},
},
{
pattern: "a/b/" + GenericNameRegex("val"),
input: "a/b/foo/more",
pathMatch: false,
captures: nil,
},
{
pattern: "a/b/" + GenericNameRegex("val"),
input: "a/b/abc-.123",
pathMatch: true,
captures: map[string]string{"val": "abc-.123"},
},
{
pattern: "a/b/" + GenericNameRegex("val") + "/c/d",
input: "a/b/foo/c/d",
pathMatch: true,
captures: map[string]string{"val": "foo"},
},
{
pattern: "a/b/" + GenericNameRegex("val") + "/c/d",
input: "a/b/foo/c/d/e",
pathMatch: false,
captures: nil,
},
{
pattern: "a/b" + OptionalParamRegex("val"),
input: "a/b",
pathMatch: true,
captures: map[string]string{"val": ""},
},
{
pattern: "a/b" + OptionalParamRegex("val"),
input: "a/b/foo",
pathMatch: true,
captures: map[string]string{"val": "foo"},
},
{
pattern: "foo/" + MatchAllRegex("val"),
input: "foos/ball",
pathMatch: false,
captures: nil,
},
{
pattern: "foos/" + MatchAllRegex("val"),
input: "foos/ball",
pathMatch: true,
captures: map[string]string{"val": "ball"},
},
{
pattern: "foos/ball/" + MatchAllRegex("val"),
input: "foos/ball/with/more/stuff/at_the/end",
pathMatch: true,
captures: map[string]string{"val": "with/more/stuff/at_the/end"},
},
{
pattern: MatchAllRegex("val"),
input: "foos/ball/with/more/stuff/at_the/end",
pathMatch: true,
captures: map[string]string{"val": "foos/ball/with/more/stuff/at_the/end"},
},
}
for i, test := range tests {
b := Backend{
Paths: []*Path{{Pattern: test.pattern}},
}
path, captures := b.route(test.input)
pathMatch := path != nil
if pathMatch != test.pathMatch {
t.Fatalf("[%d] unexpected path match result (%s): expected %t, actual %t", i, test.pattern, test.pathMatch, pathMatch)
}
if diff := deep.Equal(captures, test.captures); diff != nil {
t.Fatal(diff)
}
}
}