From 2ede4f7b0cb3748105fba0d64677a9aa9eb87363 Mon Sep 17 00:00:00 2001 From: fengkang01 Date: Thu, 9 Jun 2022 11:37:59 +0800 Subject: [PATCH] Fix: mongoDB datastore can't list special email user(#4104) optimize the test case use user change all verify timing in kubeapi Signed-off-by: fengkang --- pkg/apiserver/domain/model/user.go | 13 +++--------- .../datastore/kubeapi/kubeapi.go | 9 +++++---- .../datastore/kubeapi/kubeapi_test.go | 20 +++++++++---------- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/pkg/apiserver/domain/model/user.go b/pkg/apiserver/domain/model/user.go index 73ff5c457..a44ad2806 100644 --- a/pkg/apiserver/domain/model/user.go +++ b/pkg/apiserver/domain/model/user.go @@ -18,7 +18,6 @@ package model import ( "fmt" - "strings" "time" "github.com/form3tech-oss/jwt-go" @@ -63,7 +62,7 @@ func (u *User) ShortTableName() string { // PrimaryKey return custom primary key func (u *User) PrimaryKey() string { - return verifyUserValue(u.Name) + return u.Name } // Index return custom index @@ -99,14 +98,14 @@ func (u *ProjectUser) ShortTableName() string { // PrimaryKey return custom primary key func (u *ProjectUser) PrimaryKey() string { - return fmt.Sprintf("%s-%s", u.ProjectName, verifyUserValue(u.Username)) + return fmt.Sprintf("%s-%s", u.ProjectName, u.Username) } // Index return custom index func (u *ProjectUser) Index() map[string]string { index := make(map[string]string) if u.Username != "" { - index["username"] = verifyUserValue(u.Username) + index["username"] = u.Username } if u.ProjectName != "" { index["projectName"] = u.ProjectName @@ -114,12 +113,6 @@ func (u *ProjectUser) Index() map[string]string { return index } -func verifyUserValue(v string) string { - s := strings.ReplaceAll(v, "@", "-") - s = strings.ReplaceAll(s, " ", "-") - return strings.ToLower(s) -} - // CustomClaims is the custom claims type CustomClaims struct { Username string `json:"username"` diff --git a/pkg/apiserver/infrastructure/datastore/kubeapi/kubeapi.go b/pkg/apiserver/infrastructure/datastore/kubeapi/kubeapi.go index 0207bc9cf..5bc1683f0 100644 --- a/pkg/apiserver/infrastructure/datastore/kubeapi/kubeapi.go +++ b/pkg/apiserver/infrastructure/datastore/kubeapi/kubeapi.go @@ -75,6 +75,7 @@ func generateName(entity datastore.Entity) string { // record the old ways here, it'll be migrated // name := fmt.Sprintf("veladatabase-%s-%s", entity.TableName(), entity.PrimaryKey()) name := fmt.Sprintf("%s-%s", entity.ShortTableName(), entity.PrimaryKey()) + name = verifyValue(name) return strings.ReplaceAll(name, "_", "-") } @@ -84,11 +85,11 @@ func (m *kubeapi) generateConfigMap(entity datastore.Entity) *corev1.ConfigMap { if labels == nil { labels = make(map[string]string) } + labels["table"] = entity.TableName() + labels["primaryKey"] = entity.PrimaryKey() for k, v := range labels { labels[k] = verifyValue(v) } - labels["table"] = entity.TableName() - labels["primaryKey"] = entity.PrimaryKey() var configMap = corev1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ Name: generateName(entity), @@ -179,11 +180,11 @@ func (m *kubeapi) Put(ctx context.Context, entity datastore.Entity) error { if labels == nil { labels = make(map[string]string) } + labels["table"] = entity.TableName() + labels["primaryKey"] = entity.PrimaryKey() for k, v := range labels { labels[k] = verifyValue(v) } - labels["table"] = entity.TableName() - labels["primaryKey"] = entity.PrimaryKey() entity.SetUpdateTime(time.Now()) var configMap corev1.ConfigMap if err := m.kubeClient.Get(ctx, types.NamespacedName{Namespace: m.namespace, Name: generateName(entity)}, &configMap); err != nil { diff --git a/pkg/apiserver/infrastructure/datastore/kubeapi/kubeapi_test.go b/pkg/apiserver/infrastructure/datastore/kubeapi/kubeapi_test.go index 8ee9ab875..a604b813e 100644 --- a/pkg/apiserver/infrastructure/datastore/kubeapi/kubeapi_test.go +++ b/pkg/apiserver/infrastructure/datastore/kubeapi/kubeapi_test.go @@ -248,20 +248,20 @@ var _ = Describe("Test kubeapi datastore driver", func() { }) It("Test verify index", func() { - var app = model.Application{Name: "can@delete", Description: "this is for test special symbol"} - err := kubeStore.Add(context.TODO(), &app) + var usr = model.User{Name: "can@delete", Email: "xxx@xx.com"} + err := kubeStore.Add(context.TODO(), &usr) Expect(err).ToNot(HaveOccurred()) - app.Description = "change" - err = kubeStore.Put(context.TODO(), &app) + usr.Email = "change" + err = kubeStore.Put(context.TODO(), &usr) Expect(err).ToNot(HaveOccurred()) - err = kubeStore.Get(context.TODO(), &app) + err = kubeStore.Get(context.TODO(), &usr) Expect(err).Should(BeNil()) - diff := cmp.Diff(app.Description, "change") + diff := cmp.Diff(usr.Email, "change") Expect(diff).Should(BeEmpty()) - list, err := kubeStore.List(context.TODO(), &app, &datastore.ListOptions{FilterOptions: datastore.FilterOptions{In: []datastore.InQueryOption{ + list, err := kubeStore.List(context.TODO(), &usr, &datastore.ListOptions{FilterOptions: datastore.FilterOptions{In: []datastore.InQueryOption{ { Key: "name", Values: []string{"can@delete"}, @@ -271,7 +271,7 @@ var _ = Describe("Test kubeapi datastore driver", func() { diff = cmp.Diff(len(list), 1) Expect(diff).Should(BeEmpty()) - count, err := kubeStore.Count(context.TODO(), &app, &datastore.FilterOptions{In: []datastore.InQueryOption{ + count, err := kubeStore.Count(context.TODO(), &usr, &datastore.FilterOptions{In: []datastore.InQueryOption{ { Key: "name", Values: []string{"can@delete"}, @@ -280,8 +280,8 @@ var _ = Describe("Test kubeapi datastore driver", func() { Expect(err).ShouldNot(HaveOccurred()) Expect(count).Should(Equal(int64(1))) - app.Name = "can@delete" - err = kubeStore.Delete(context.TODO(), &app) + usr.Name = "can@delete" + err = kubeStore.Delete(context.TODO(), &usr) Expect(err).ShouldNot(HaveOccurred()) }) })