Skip to content

Commit afb335c

Browse files
committed
chore: improve validateClusterStatName
Signed-off-by: zirain <[email protected]>
1 parent 1e295b6 commit afb335c

File tree

2 files changed

+49
-10
lines changed

2 files changed

+49
-10
lines changed

api/v1alpha1/validation/envoyproxy_validate.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -294,19 +294,22 @@ func validateFilterOrder(filterOrder []egv1a1.FilterPosition) error {
294294
return nil
295295
}
296296

297-
func validateClusterStatName(clusterStatName string) []error {
298-
supportedOperators := map[string]bool{
299-
egv1a1.StatFormatterRouteName: true,
300-
egv1a1.StatFormatterRouteNamespace: true,
301-
egv1a1.StatFormatterRouteKind: true,
302-
egv1a1.StatFormatterRouteRuleName: true,
303-
egv1a1.StatFormatterRouteRuleNumber: true,
304-
egv1a1.StatFormatterBackendRefs: true,
305-
}
297+
var supportedOperators = map[string]bool{
298+
egv1a1.StatFormatterRouteName: true,
299+
egv1a1.StatFormatterRouteNamespace: true,
300+
egv1a1.StatFormatterRouteKind: true,
301+
egv1a1.StatFormatterRouteRuleName: true,
302+
egv1a1.StatFormatterRouteRuleNumber: true,
303+
egv1a1.StatFormatterBackendRefs: true,
304+
}
306305

306+
func validateClusterStatName(clusterStatName string) []error {
307307
var errs []error
308308
re := regexp.MustCompile("%[^%]*%")
309309
matches := re.FindAllString(clusterStatName, -1)
310+
if len(matches) == 0 {
311+
errs = append(errs, fmt.Errorf("unable to configure Cluster Stat Name without any operator"))
312+
}
310313
for _, operator := range matches {
311314
if _, ok := supportedOperators[operator]; !ok {
312315
err := fmt.Errorf("unable to configure Cluster Stat Name with unsupported operator: %s", operator)

api/v1alpha1/validation/envoyproxy_validate_test.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ func TestValidateEnvoyProxy(t *testing.T) {
832832
for i := range testCases {
833833
tc := testCases[i]
834834
t.Run(tc.name, func(t *testing.T) {
835-
err := ValidateEnvoyProxy(tc.proxy)
835+
err := ValidateEnvoyProxy(tc.proxy, false)
836836
if tc.expected {
837837
require.NoError(t, err)
838838
} else {
@@ -964,3 +964,39 @@ func TestGetEnvoyProxyComponentLevelArgs(t *testing.T) {
964964
})
965965
}
966966
}
967+
968+
func TestValidateClusterStatName(t *testing.T) {
969+
testCases := []struct {
970+
name string
971+
statName string
972+
expected bool
973+
}{
974+
{
975+
name: "valid cluster stat name with supported operators",
976+
statName: "%ROUTE_NAME%/%ROUTE_NAMESPACE%/%BACKEND_REFS%",
977+
expected: true,
978+
},
979+
{
980+
name: "invalid cluster stat name with unsupported operators",
981+
statName: "%ROUTE_NAME%/%FOO%/%BAR%",
982+
expected: false,
983+
},
984+
{
985+
name: "invalid cluster stat name",
986+
statName: "%ROUTE_NAME",
987+
expected: false,
988+
},
989+
}
990+
991+
for i := range testCases {
992+
tc := testCases[i]
993+
t.Run(tc.name, func(t *testing.T) {
994+
errs := validateClusterStatName(tc.statName)
995+
if tc.expected {
996+
require.Empty(t, errs)
997+
} else {
998+
require.NotEmpty(t, len(errs))
999+
}
1000+
})
1001+
}
1002+
}

0 commit comments

Comments
 (0)