Add deletion test
This commit is contained in:
parent
5715450aff
commit
4e6b7cfdda
@ -61,6 +61,42 @@ func (fx *fixture) stop(t *testing.T) {
|
||||
require.NoError(t, fx.db.Close())
|
||||
}
|
||||
|
||||
func (fx *fixture) testNoKeysExist(t *testing.T, spaceId, treeId string) {
|
||||
treeKeys := newTreeKeys(spaceId, treeId)
|
||||
|
||||
var keys [][]byte
|
||||
err := fx.db.View(func(txn *badger.Txn) error {
|
||||
opts := badger.DefaultIteratorOptions
|
||||
opts.PrefetchValues = false
|
||||
opts.Prefix = treeKeys.RawChangePrefix()
|
||||
|
||||
it := txn.NewIterator(opts)
|
||||
defer it.Close()
|
||||
|
||||
for it.Rewind(); it.Valid(); it.Next() {
|
||||
item := it.Item()
|
||||
key := item.Key()
|
||||
keyCopy := make([]byte, 0, len(key))
|
||||
keyCopy = item.KeyCopy(key)
|
||||
keys = append(keys, keyCopy)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0, len(keys))
|
||||
|
||||
err = fx.db.View(func(txn *badger.Txn) error {
|
||||
_, err = getTxn(txn, treeKeys.RootIdKey())
|
||||
require.Equal(t, err, badger.ErrKeyNotFound)
|
||||
|
||||
_, err = getTxn(txn, treeKeys.HeadsKey())
|
||||
require.Equal(t, err, badger.ErrKeyNotFound)
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
func TestTreeStorage_Create(t *testing.T) {
|
||||
fx := newFixture(t)
|
||||
fx.open(t)
|
||||
@ -121,3 +157,32 @@ func TestTreeStorage_Methods(t *testing.T) {
|
||||
require.False(t, has)
|
||||
})
|
||||
}
|
||||
|
||||
func TestTreeStorage_Delete(t *testing.T) {
|
||||
fx := newFixture(t)
|
||||
fx.open(t)
|
||||
payload := treeTestPayload()
|
||||
spaceId := "spaceId"
|
||||
_, err := createTreeStorage(fx.db, spaceId, payload)
|
||||
require.NoError(t, err)
|
||||
fx.stop(t)
|
||||
|
||||
fx.open(t)
|
||||
defer fx.stop(t)
|
||||
store, err := newTreeStorage(fx.db, spaceId, payload.RootRawChange.Id)
|
||||
require.NoError(t, err)
|
||||
testTreePayload(t, store, payload)
|
||||
|
||||
t.Run("add raw change, get change and has change", func(t *testing.T) {
|
||||
newChange := &treechangeproto.RawTreeChangeWithId{RawChange: []byte("ab"), Id: "newId"}
|
||||
require.NoError(t, store.AddRawChange(newChange))
|
||||
|
||||
err = store.Delete()
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = newTreeStorage(fx.db, spaceId, payload.RootRawChange.Id)
|
||||
require.Equal(t, err, storage.ErrUnknownTreeId)
|
||||
|
||||
fx.testNoKeysExist(t, spaceId, payload.RootRawChange.Id)
|
||||
})
|
||||
}
|
||||
|
||||
@ -42,6 +42,26 @@ func (fx *fixture) stop(t *testing.T) {
|
||||
require.NoError(t, fx.db.Close())
|
||||
}
|
||||
|
||||
func (fx *fixture) testNoKeysExist(t *testing.T, treeId string) {
|
||||
index := fx.db.Items()
|
||||
treeKeys := newTreeKeys(treeId)
|
||||
var keys [][]byte
|
||||
key, _, err := index.Next()
|
||||
for err == nil {
|
||||
strKey := string(key)
|
||||
if treeKeys.isTreeRelatedKey(strKey) {
|
||||
keys = append(keys, key)
|
||||
}
|
||||
key, _, err = index.Next()
|
||||
}
|
||||
require.Equal(t, pogreb.ErrIterationDone, err)
|
||||
require.Equal(t, 0, len(keys))
|
||||
|
||||
res, err := fx.db.Has(treeKeys.HeadsKey())
|
||||
require.NoError(t, err)
|
||||
require.False(t, res)
|
||||
}
|
||||
|
||||
func testTreePayload(t *testing.T, store storage.TreeStorage, payload storage.TreeStorageCreatePayload) {
|
||||
require.Equal(t, payload.RootRawChange.Id, store.ID())
|
||||
|
||||
@ -119,3 +139,31 @@ func TestTreeStorage_Methods(t *testing.T) {
|
||||
require.False(t, has)
|
||||
})
|
||||
}
|
||||
|
||||
func TestTreeStorage_Delete(t *testing.T) {
|
||||
fx := newFixture(t)
|
||||
fx.open(t)
|
||||
payload := treeTestPayload()
|
||||
_, err := createTreeStorage(fx.db, payload)
|
||||
require.NoError(t, err)
|
||||
fx.stop(t)
|
||||
|
||||
fx.open(t)
|
||||
defer fx.stop(t)
|
||||
store, err := newTreeStorage(fx.db, payload.RootRawChange.Id)
|
||||
require.NoError(t, err)
|
||||
testTreePayload(t, store, payload)
|
||||
|
||||
t.Run("add raw change, get change and has change", func(t *testing.T) {
|
||||
newChange := &treechangeproto.RawTreeChangeWithId{RawChange: []byte("ab"), Id: "newId"}
|
||||
require.NoError(t, store.AddRawChange(newChange))
|
||||
|
||||
err = store.Delete()
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = newTreeStorage(fx.db, payload.RootRawChange.Id)
|
||||
require.Equal(t, err, storage.ErrUnknownTreeId)
|
||||
|
||||
fx.testNoKeysExist(t, payload.RootRawChange.Id)
|
||||
})
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user