From efb9480b962f4190e26dd16957bf1961a09a9392 Mon Sep 17 00:00:00 2001 From: Hitoshi Mitake Date: Sat, 29 Oct 2022 12:31:52 +0900 Subject: [PATCH 1/2] server: add a unit test case for authStore.Reocver() with empty rangePermCache Signed-off-by: Hitoshi Mitake --- server/auth/store_test.go | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/server/auth/store_test.go b/server/auth/store_test.go index 3f3d7676784..7863808f33d 100644 --- a/server/auth/store_test.go +++ b/server/auth/store_test.go @@ -189,6 +189,30 @@ func TestRecover(t *testing.T) { } } +func TestRecoverWithEmptyRangePermCache(t *testing.T) { + as, tearDown := setupAuthStore(t) + defer as.Close() + defer tearDown(t) + + as.enabled = false + as.rangePermCache = map[string]*unifiedRangePermissions{} + as.Recover(as.be) + + if !as.IsAuthEnabled() { + t.Fatalf("expected auth enabled got disabled") + } + + if len(as.rangePermCache) != 2 { + t.Fatalf("rangePermCache should have permission information for 2 users (\"root\" and \"foo\"), but has %d information", len(as.rangePermCache)) + } + if _, ok := as.rangePermCache["root"]; !ok { + t.Fatal("user \"root\" should be created by setupAuthStore() but doesn't exist in rangePermCache") + } + if _, ok := as.rangePermCache["foo"]; !ok { + t.Fatal("user \"foo\" should be created by setupAuthStore() but doesn't exist in rangePermCache") + } +} + func TestCheckPassword(t *testing.T) { as, tearDown := setupAuthStore(t) defer tearDown(t) From 1e96e0be3839a292efdd00e4bbbacd6ce39c2e8c Mon Sep 17 00:00:00 2001 From: Hitoshi Mitake Date: Sat, 29 Oct 2022 13:56:08 +0900 Subject: [PATCH 2/2] etcdserver: call refreshRangePermCache on Recover() in AuthStore. #14574 Signed-off-by: Oleg Guba Signed-off-by: Hitoshi Mitake --- server/auth/store.go | 1 + 1 file changed, 1 insertion(+) diff --git a/server/auth/store.go b/server/auth/store.go index b436939b2ab..25e3b01827b 100644 --- a/server/auth/store.go +++ b/server/auth/store.go @@ -370,6 +370,7 @@ func (as *authStore) Recover(be backend.Backend) { } as.setRevision(getRevision(tx)) + as.refreshRangePermCache(tx) tx.Unlock()