diff --git a/auth/store.go b/auth/store.go index 366c54fab..6f5906de4 100644 --- a/auth/store.go +++ b/auth/store.go @@ -911,7 +911,9 @@ func NewAuthStore(be backend.Backend, indexWaiter func(uint64) <-chan struct{}) as.simpleTokenKeeper = NewSimpleTokenTTLKeeper(newDeleterFunc(as)) } - as.commitRevision(tx) + if as.revision == 0 { + as.commitRevision(tx) + } tx.Unlock() be.ForceCommit() diff --git a/auth/store_test.go b/auth/store_test.go index ebe8ef122..088bef7de 100644 --- a/auth/store_test.go +++ b/auth/store_test.go @@ -34,31 +34,30 @@ func dummyIndexWaiter(index uint64) <-chan struct{} { return ch } -func TestUserAdd(t *testing.T) { +// TestNewAuthStoreRevision ensures newly auth store +// keeps the old revision when there are no changes. +func TestNewAuthStoreRevision(t *testing.T) { b, tPath := backend.NewDefaultTmpBackend() - defer func() { - b.Close() - os.Remove(tPath) - }() + defer os.Remove(tPath) as := NewAuthStore(b, dummyIndexWaiter) - ua := &pb.AuthUserAddRequest{Name: "foo"} - _, err := as.UserAdd(ua) // add a non-existing user + err := enableAuthAndCreateRoot(as) if err != nil { t.Fatal(err) } - _, err = as.UserAdd(ua) // add an existing user - if err == nil { - t.Fatalf("expected %v, got %v", ErrUserAlreadyExist, err) - } - if err != ErrUserAlreadyExist { - t.Fatalf("expected %v, got %v", ErrUserAlreadyExist, err) - } + old := as.Revision() + b.Close() + as.Close() - ua = &pb.AuthUserAddRequest{Name: ""} - _, err = as.UserAdd(ua) // add a user with empty name - if err != ErrUserEmpty { - t.Fatal(err) + // no changes to commit + b2 := backend.NewDefaultBackend(tPath) + as = NewAuthStore(b2, dummyIndexWaiter) + new := as.Revision() + b2.Close() + as.Close() + + if old != new { + t.Fatalf("expected revision %d, got %d", old, new) } }