This moves some of the validation logic for rule groups from the legacy storage layer to the validator.
110 lines
2.8 KiB
Go
110 lines
2.8 KiB
Go
package util
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/grafana/grafana-app-sdk/resource"
|
|
model "github.com/grafana/grafana/apps/alerting/rules/pkg/apis/alerting/v0alpha1"
|
|
)
|
|
|
|
func TestValidateGroupLabels(t *testing.T) {
|
|
group := model.GroupLabelKey
|
|
groupIdx := model.GroupIndexLabelKey
|
|
|
|
tests := []struct {
|
|
name string
|
|
labels map[string]string
|
|
oldLabels map[string]string
|
|
action resource.AdmissionAction
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "update empty group value",
|
|
labels: map[string]string{group: "", groupIdx: "1"},
|
|
action: resource.AdmissionActionUpdate,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "update empty group-index value",
|
|
labels: map[string]string{group: "g1", groupIdx: ""},
|
|
action: resource.AdmissionActionUpdate,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "create empty group value disallowed",
|
|
labels: map[string]string{group: ""},
|
|
action: resource.AdmissionActionCreate,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "create no labels allowed",
|
|
labels: nil,
|
|
action: resource.AdmissionActionCreate,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "create with group disallowed",
|
|
labels: map[string]string{group: "g1"},
|
|
action: resource.AdmissionActionCreate,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "create with group-index disallowed",
|
|
labels: map[string]string{groupIdx: "1"},
|
|
action: resource.AdmissionActionCreate,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "update missing paired index",
|
|
labels: map[string]string{group: "g1"},
|
|
action: resource.AdmissionActionUpdate,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "update missing paired group",
|
|
labels: map[string]string{groupIdx: "1"},
|
|
action: resource.AdmissionActionUpdate,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "update invalid index format",
|
|
labels: map[string]string{group: "g1", groupIdx: "x"},
|
|
oldLabels: map[string]string{group: "g1", groupIdx: "0"},
|
|
action: resource.AdmissionActionUpdate,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "update cannot add group when previously ungrouped",
|
|
labels: map[string]string{group: "g1", groupIdx: "0"},
|
|
oldLabels: map[string]string{},
|
|
action: resource.AdmissionActionUpdate,
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "update allowed when previously grouped",
|
|
labels: map[string]string{group: "g1", groupIdx: "2"},
|
|
oldLabels: map[string]string{group: "g1", groupIdx: "1"},
|
|
action: resource.AdmissionActionUpdate,
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "update no labels remains allowed",
|
|
labels: nil,
|
|
action: resource.AdmissionActionUpdate,
|
|
wantErr: false,
|
|
},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
err := ValidateGroupLabels(tc.labels, tc.oldLabels, tc.action)
|
|
if tc.wantErr && err == nil {
|
|
t.Fatalf("expected error, got nil")
|
|
}
|
|
if !tc.wantErr && err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
})
|
|
}
|
|
}
|