From 4e6b7cfdda34e851fc872a103597278a7fba8064 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Thu, 24 Nov 2022 21:03:43 +0100 Subject: [PATCH] Add deletion test --- client/storage/treestorage_test.go | 65 ++++++++++++++++++++++++++++++ node/storage/treestorage_test.go | 48 ++++++++++++++++++++++ 2 files changed, 113 insertions(+) diff --git a/client/storage/treestorage_test.go b/client/storage/treestorage_test.go index e2a3bcad..5acb3980 100644 --- a/client/storage/treestorage_test.go +++ b/client/storage/treestorage_test.go @@ -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) + }) +} diff --git a/node/storage/treestorage_test.go b/node/storage/treestorage_test.go index df83c118..6fe391f4 100644 --- a/node/storage/treestorage_test.go +++ b/node/storage/treestorage_test.go @@ -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) + }) +}