package model import ( "testing" "uauth/internal/util" ) func TestPrivilege_Validate(t *testing.T) { type fields struct { Code string } tests := []struct { name string fields fields wantErr bool }{ { name: "全匹配", fields: fields{Code: "*:*:*:*"}, wantErr: false, }, { name: "部分全匹配1", fields: fields{Code: "user:ok:*:*"}, wantErr: false, }, { name: "部分全匹配2", fields: fields{Code: "user:ok:nice:*"}, wantErr: false, }, { name: "中间全匹配1", fields: fields{Code: "user:*:*:ok"}, wantErr: true, }, { name: "中间全匹配2", fields: fields{Code: "user:*:nice:*"}, wantErr: true, }, { name: "精确权限", fields: fields{Code: "user:1:2:3"}, wantErr: false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { p := &Privilege{ Code: tt.fields.Code, } if err := p.Validate(); (err != nil) != tt.wantErr { t.Errorf("Validate() error = %v, wantErr %v", err, tt.wantErr) } }) } } func BenchmarkPrivilegeValidate(b *testing.B) { ps := make([]*Privilege, 100000) for i := 0; i < 100000; i++ { ps[i] = &Privilege{ Code: tool.RandomString(4) + ":" + tool.RandomString(5) + ":" + tool.RandomString(6) + ":" + tool.RandomString(7), } } b.ResetTimer() for i := 0; i < b.N; i++ { _ = ps[i%100000].Validate() } }