♻️ Refactor: Remove unused CheckConstraint test cases and reorganize benchmark test cases for clarity

pull/3356/head
JIeJaitt 2025-03-19 17:19:52 +08:00
parent 827877fa36
commit 5be0aae6a7
2 changed files with 30 additions and 228 deletions

View File

@ -5,7 +5,6 @@
package fiber
import (
"regexp"
"testing"
"github.com/stretchr/testify/require"
@ -266,214 +265,3 @@ func Benchmark_RoutePatternMatch(t *testing.B) {
benchCaseFn(testCollection)
}
}
func TestConstraint_CheckConstraint(t *testing.T) {
t.Parallel()
testCases := []struct {
name string
constraint *Constraint
param string
expectedResult bool
}{
{
name: "no constraint",
constraint: &Constraint{ID: noConstraint},
param: "abc",
expectedResult: true,
},
{
name: "int constraint valid",
constraint: &Constraint{ID: intConstraint},
param: "123",
expectedResult: true,
},
{
name: "int constraint invalid",
constraint: &Constraint{ID: intConstraint},
param: "abc",
expectedResult: false,
},
{
name: "bool constraint valid",
constraint: &Constraint{ID: boolConstraint},
param: "true",
expectedResult: true,
},
{
name: "bool constraint invalid",
constraint: &Constraint{ID: boolConstraint},
param: "abc",
expectedResult: false,
},
{
name: "float constraint valid",
constraint: &Constraint{ID: floatConstraint},
param: "1.23",
expectedResult: true,
},
{
name: "float constraint invalid",
constraint: &Constraint{ID: floatConstraint},
param: "abc",
expectedResult: false,
},
{
name: "alpha constraint valid",
constraint: &Constraint{ID: alphaConstraint},
param: "abc",
expectedResult: true,
},
{
name: "alpha constraint invalid",
constraint: &Constraint{ID: alphaConstraint},
param: "123",
expectedResult: false,
},
{
name: "guid constraint valid",
constraint: &Constraint{ID: guidConstraint},
param: "123e4567-e89b-12d3-a456-426614174000",
expectedResult: true,
},
{
name: "guid constraint invalid",
constraint: &Constraint{ID: guidConstraint},
param: "abc",
expectedResult: false,
},
{
name: "min length constraint valid",
constraint: &Constraint{ID: minLenConstraint, Data: []string{"3"}},
param: "abc",
expectedResult: true,
},
{
name: "min length constraint invalid",
constraint: &Constraint{ID: minLenConstraint, Data: []string{"5"}},
param: "abc",
expectedResult: false,
},
{
name: "max length constraint valid",
constraint: &Constraint{ID: maxLenConstraint, Data: []string{"5"}},
param: "abc",
expectedResult: true,
},
{
name: "max length constraint invalid",
constraint: &Constraint{ID: maxLenConstraint, Data: []string{"2"}},
param: "abc",
expectedResult: false,
},
{
name: "length constraint valid",
constraint: &Constraint{ID: lenConstraint, Data: []string{"3"}},
param: "abc",
expectedResult: true,
},
{
name: "length constraint invalid",
constraint: &Constraint{ID: lenConstraint, Data: []string{"5"}},
param: "abc",
expectedResult: false,
},
{
name: "between length constraint valid",
constraint: &Constraint{ID: betweenLenConstraint, Data: []string{"2", "4"}},
param: "abc",
expectedResult: true,
},
{
name: "between length constraint invalid",
constraint: &Constraint{ID: betweenLenConstraint, Data: []string{"4", "6"}},
param: "abc",
expectedResult: false,
},
{
name: "min constraint valid",
constraint: &Constraint{ID: minConstraint, Data: []string{"2"}},
param: "3",
expectedResult: true,
},
{
name: "min constraint invalid",
constraint: &Constraint{ID: minConstraint, Data: []string{"4"}},
param: "3",
expectedResult: false,
},
{
name: "max constraint valid",
constraint: &Constraint{ID: maxConstraint, Data: []string{"4"}},
param: "3",
expectedResult: true,
},
{
name: "max constraint invalid",
constraint: &Constraint{ID: maxConstraint, Data: []string{"2"}},
param: "3",
expectedResult: false,
},
{
name: "range constraint valid",
constraint: &Constraint{ID: rangeConstraint, Data: []string{"2", "4"}},
param: "3",
expectedResult: true,
},
{
name: "range constraint invalid",
constraint: &Constraint{ID: rangeConstraint, Data: []string{"4", "6"}},
param: "3",
expectedResult: false,
},
{
name: "datetime constraint valid",
constraint: &Constraint{ID: datetimeConstraint, Data: []string{"2006-01-02"}},
param: "2023-05-20",
expectedResult: true,
},
{
name: "datetime constraint invalid",
constraint: &Constraint{ID: datetimeConstraint, Data: []string{"2006-01-02"}},
param: "2023/05/20",
expectedResult: false,
},
{
name: "regex constraint valid",
constraint: &Constraint{ID: regexConstraint, Data: []string{`^\d+$`}, RegexCompiler: regexp.MustCompile(`^\d+$`)},
param: "123",
expectedResult: true,
},
{
name: "regex constraint invalid",
constraint: &Constraint{ID: regexConstraint, RegexCompiler: regexp.MustCompile(`^\d+$`)},
param: "abc",
expectedResult: false,
},
{
name: "custom constraint valid",
constraint: &Constraint{Name: "custom", customConstraints: []CustomConstraint{&mockCustomConstraint{}}},
param: "abc",
expectedResult: true,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
result := tc.constraint.CheckConstraint(tc.param)
require.Equal(t, tc.expectedResult, result)
})
}
}
type mockCustomConstraint struct{}
func (*mockCustomConstraint) Name() string {
return "custom"
}
func (*mockCustomConstraint) Execute(_ string, _ ...string) bool {
return true
}

View File

@ -28,14 +28,6 @@ var (
func init() {
// smaller list for benchmark cases
benchmarkCases = []routeCaseCollection{
{
pattern: "/api/v1/:param<int;bool((>",
testCases: []routeTestCase{
{url: "/api/v1/entity", params: nil, match: false},
{url: "/api/v1/8728382", params: []string{"8728382"}, match: true},
{url: "/api/v1/true", params: nil, match: false},
},
},
{
pattern: "/api/v1/const",
testCases: []routeTestCase{
@ -614,14 +606,14 @@ func init() {
{url: "/api/v1/2022/08-27", params: nil, match: false},
},
},
// {
// pattern: "/api/v1/:param<int;bool((>",
// testCases: []routeTestCase{
// {url: "/api/v1/entity", params: nil, match: false},
// {url: "/api/v1/8728382", params: []string{"8728382"}, match: true},
// {url: "/api/v1/true", params: nil, match: false},
// },
// },
{
pattern: "/api/v1/:param<int;bool((>",
testCases: []routeTestCase{
{url: "/api/v1/entity", params: nil, match: false},
{url: "/api/v1/8728382", params: []string{"8728382"}, match: true},
{url: "/api/v1/true", params: nil, match: false},
},
},
{
pattern: "/api/v1/:param<int;max(3000)>",
testCases: []routeTestCase{
@ -721,6 +713,28 @@ func init() {
{url: "/api/v1/", params: []string{""}, match: true},
},
},
// Add test case for RegexCompiler == nil
{
pattern: "/api/v1/:param<regex(\\d+)>",
testCases: []routeTestCase{
{url: "/api/v1/123", params: []string{"123"}, match: true},
{url: "/api/v1/abc", params: nil, match: false},
},
},
// Add test case for default branch (unknown constraint type)
{
pattern: "/api/v1/:param<unknownconstraint>",
testCases: []routeTestCase{
{url: "/api/v1/anyvalue", params: nil, match: false},
},
},
// Test case for constraint with insufficient data
{
pattern: "/api/v1/:param<minLen>",
testCases: []routeTestCase{
{url: "/api/v1/anyvalue", params: nil, match: false},
},
},
}...,
)
}