mirror of https://github.com/poanetwork/gecko.git
review comment: delete prefix db data
This commit is contained in:
parent
8c2b71e00b
commit
4ba3a9fd8c
|
@ -339,11 +339,29 @@ func (ks *Keystore) DeleteUser(_ *http.Request, args *DeleteUserArgs, reply *Del
|
||||||
}
|
}
|
||||||
|
|
||||||
userDataDB := prefixdb.New(userNameBytes, ks.bcDB)
|
userDataDB := prefixdb.New(userNameBytes, ks.bcDB)
|
||||||
dataBatch := userDataDB.NewBatch()
|
|
||||||
if err := dataBatch.Delete(userNameBytes); err != nil {
|
var data []KeyValuePair
|
||||||
|
it := userDataDB.NewIterator()
|
||||||
|
defer it.Release()
|
||||||
|
|
||||||
|
for it.Next() {
|
||||||
|
data = append(data, KeyValuePair{
|
||||||
|
Key: it.Key(),
|
||||||
|
Value: it.Value(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = it.Error(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dataBatch := userDataDB.NewBatch()
|
||||||
|
for _, kvp := range data {
|
||||||
|
if err = dataBatch.Delete(kvp.Key); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err := atomic.WriteAll(dataBatch, userBatch); err != nil {
|
if err := atomic.WriteAll(dataBatch, userBatch); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -287,6 +287,7 @@ func TestServiceDeleteUser(t *testing.T) {
|
||||||
password := "passwTest@fake01ord"
|
password := "passwTest@fake01ord"
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
desc string
|
desc string
|
||||||
|
setup func(ks *Keystore) error
|
||||||
request *DeleteUserArgs
|
request *DeleteUserArgs
|
||||||
want *DeleteUserReply
|
want *DeleteUserReply
|
||||||
wantError bool
|
wantError bool
|
||||||
|
@ -303,20 +304,46 @@ func TestServiceDeleteUser(t *testing.T) {
|
||||||
request: &DeleteUserArgs{Username: testUser, Password: "password"},
|
request: &DeleteUserArgs{Username: testUser, Password: "password"},
|
||||||
wantError: true,
|
wantError: true,
|
||||||
}, {
|
}, {
|
||||||
desc: "user exists and valid password case",
|
desc: "user exists and valid password case",
|
||||||
|
setup: func(ks *Keystore) error {
|
||||||
|
return ks.CreateUser(nil, &CreateUserArgs{Username: testUser, Password: password}, &CreateUserReply{})
|
||||||
|
},
|
||||||
|
request: &DeleteUserArgs{Username: testUser, Password: password},
|
||||||
|
want: &DeleteUserReply{Success: true},
|
||||||
|
}, {
|
||||||
|
desc: "delete a user, imported from import api case",
|
||||||
|
setup: func(ks *Keystore) error {
|
||||||
|
|
||||||
|
reply := CreateUserReply{}
|
||||||
|
if err := ks.CreateUser(nil, &CreateUserArgs{Username: testUser, Password: password}, &reply); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// created data in bob db
|
||||||
|
db, err := ks.GetDatabase(ids.Empty, testUser, password)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := db.Put([]byte("hello"), []byte("world")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
},
|
||||||
request: &DeleteUserArgs{Username: testUser, Password: password},
|
request: &DeleteUserArgs{Username: testUser, Password: password},
|
||||||
want: &DeleteUserReply{Success: true},
|
want: &DeleteUserReply{Success: true},
|
||||||
}}
|
}}
|
||||||
|
|
||||||
ks := Keystore{}
|
|
||||||
ks.Initialize(logging.NoLog{}, memdb.New())
|
|
||||||
|
|
||||||
if err := ks.CreateUser(nil, &CreateUserArgs{Username: testUser, Password: password}, &CreateUserReply{}); err != nil {
|
|
||||||
t.Fatalf("failed to create user: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.desc, func(t *testing.T) {
|
t.Run(tt.desc, func(t *testing.T) {
|
||||||
|
ks := Keystore{}
|
||||||
|
ks.Initialize(logging.NoLog{}, memdb.New())
|
||||||
|
|
||||||
|
if tt.setup != nil {
|
||||||
|
if err := tt.setup(&ks); err != nil {
|
||||||
|
t.Fatalf("failed to create user setup in keystore: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
got := &DeleteUserReply{}
|
got := &DeleteUserReply{}
|
||||||
err := ks.DeleteUser(nil, tt.request, got)
|
err := ks.DeleteUser(nil, tt.request, got)
|
||||||
if (err != nil) != tt.wantError {
|
if (err != nil) != tt.wantError {
|
||||||
|
@ -327,8 +354,12 @@ func TestServiceDeleteUser(t *testing.T) {
|
||||||
t.Fatalf("DeleteUser() failed: got %v, want %v", got, tt.want)
|
t.Fatalf("DeleteUser() failed: got %v, want %v", got, tt.want)
|
||||||
}
|
}
|
||||||
|
|
||||||
// deleted user details should be available to create user again.
|
if err == nil && got.Success { // delete is successful
|
||||||
if err == nil { // delete is successful
|
if _, ok := ks.users[testUser]; ok {
|
||||||
|
t.Fatalf("DeleteUser() failed: expected the user %s should be delete from users map", testUser)
|
||||||
|
}
|
||||||
|
|
||||||
|
// deleted user details should be available to create user again.
|
||||||
if err = ks.CreateUser(nil, &CreateUserArgs{Username: testUser, Password: password}, &CreateUserReply{}); err != nil {
|
if err = ks.CreateUser(nil, &CreateUserArgs{Username: testUser, Password: password}, &CreateUserReply{}); err != nil {
|
||||||
t.Fatalf("failed to create user: %v", err)
|
t.Fatalf("failed to create user: %v", err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue