Change tree methods and start adding tree tests
This commit is contained in:
parent
5ecef4d6f5
commit
f2790cb574
@ -77,8 +77,8 @@ func createListStorage(spaceId string, db *badger.DB, txn *badger.Txn, root *acl
|
||||
return
|
||||
}
|
||||
|
||||
func (l *listStorage) ID() (string, error) {
|
||||
return l.id, nil
|
||||
func (l *listStorage) ID() string {
|
||||
return l.id
|
||||
}
|
||||
|
||||
func (l *listStorage) Root() (*aclrecordproto.RawACLRecordWithId, error) {
|
||||
|
||||
@ -77,8 +77,8 @@ func createSpaceStorage(db *badger.DB, payload spacestorage.SpaceStorageCreatePa
|
||||
return
|
||||
}
|
||||
|
||||
func (s *spaceStorage) ID() (string, error) {
|
||||
return s.spaceId, nil
|
||||
func (s *spaceStorage) ID() string {
|
||||
return s.spaceId
|
||||
}
|
||||
|
||||
func (s *spaceStorage) TreeStorage(id string) (storage2.TreeStorage, error) {
|
||||
|
||||
@ -2,7 +2,7 @@ package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
storage2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
|
||||
"github.com/dgraph-io/badger/v3"
|
||||
)
|
||||
@ -14,7 +14,7 @@ type treeStorage struct {
|
||||
root *treechangeproto.RawTreeChangeWithId
|
||||
}
|
||||
|
||||
func newTreeStorage(db *badger.DB, spaceId, treeId string) (ts storage2.TreeStorage, err error) {
|
||||
func newTreeStorage(db *badger.DB, spaceId, treeId string) (ts storage.TreeStorage, err error) {
|
||||
keys := newTreeKeys(spaceId, treeId)
|
||||
err = db.View(func(txn *badger.Txn) error {
|
||||
_, err := txn.Get(keys.RootIdKey())
|
||||
@ -43,14 +43,14 @@ func newTreeStorage(db *badger.DB, spaceId, treeId string) (ts storage2.TreeStor
|
||||
return
|
||||
}
|
||||
|
||||
func createTreeStorage(db *badger.DB, spaceId string, payload storage2.TreeStorageCreatePayload) (ts storage2.TreeStorage, err error) {
|
||||
keys := newTreeKeys(spaceId, payload.TreeId)
|
||||
func createTreeStorage(db *badger.DB, spaceId string, payload storage.TreeStorageCreatePayload) (ts storage.TreeStorage, err error) {
|
||||
keys := newTreeKeys(spaceId, payload.RootRawChange.Id)
|
||||
if hasDB(db, keys.RootIdKey()) {
|
||||
err = storage2.ErrTreeExists
|
||||
err = storage.ErrTreeExists
|
||||
return
|
||||
}
|
||||
err = db.Update(func(txn *badger.Txn) error {
|
||||
heads := storage2.CreateHeadsPayload(payload.Heads)
|
||||
heads := storage.CreateHeadsPayload(payload.Heads)
|
||||
|
||||
for _, ch := range payload.Changes {
|
||||
err = txn.Set(keys.RawChangeKey(ch.Id), ch.GetRawChange())
|
||||
@ -85,8 +85,8 @@ func createTreeStorage(db *badger.DB, spaceId string, payload storage2.TreeStora
|
||||
return
|
||||
}
|
||||
|
||||
func (t *treeStorage) ID() (string, error) {
|
||||
return t.id, nil
|
||||
func (t *treeStorage) ID() string {
|
||||
return t.id
|
||||
}
|
||||
|
||||
func (t *treeStorage) Root() (raw *treechangeproto.RawTreeChangeWithId, err error) {
|
||||
@ -97,16 +97,16 @@ func (t *treeStorage) Heads() (heads []string, err error) {
|
||||
headsBytes, err := getDB(t.db, t.keys.HeadsKey())
|
||||
if err != nil {
|
||||
if err == badger.ErrKeyNotFound {
|
||||
err = storage2.ErrUnknownTreeId
|
||||
err = storage.ErrUnknownTreeId
|
||||
}
|
||||
return
|
||||
}
|
||||
heads = storage2.ParseHeads(headsBytes)
|
||||
heads = storage.ParseHeads(headsBytes)
|
||||
return
|
||||
}
|
||||
|
||||
func (t *treeStorage) SetHeads(heads []string) (err error) {
|
||||
payload := storage2.CreateHeadsPayload(heads)
|
||||
payload := storage.CreateHeadsPayload(heads)
|
||||
return putDB(t.db, t.keys.HeadsKey(), payload)
|
||||
}
|
||||
|
||||
@ -118,7 +118,7 @@ func (t *treeStorage) GetRawChange(ctx context.Context, id string) (raw *treecha
|
||||
res, err := getDB(t.db, t.keys.RawChangeKey(id))
|
||||
if err != nil {
|
||||
if err == badger.ErrKeyNotFound {
|
||||
err = storage2.ErrUnknownTreeId
|
||||
err = storage.ErrUnknownTreeId
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ func (s *service) CreateSpace(
|
||||
return
|
||||
}
|
||||
|
||||
return store.ID()
|
||||
return store.ID(), nil
|
||||
}
|
||||
|
||||
func (s *service) DeriveSpace(
|
||||
@ -79,7 +79,7 @@ func (s *service) DeriveSpace(
|
||||
return
|
||||
}
|
||||
|
||||
return store.ID()
|
||||
return store.ID(), nil
|
||||
}
|
||||
|
||||
func (s *service) GetSpace(ctx context.Context, id string) (Space, error) {
|
||||
|
||||
@ -6,7 +6,7 @@ import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/aclrecordproto"
|
||||
storage2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
)
|
||||
|
||||
const CName = "commonspace.storage"
|
||||
@ -15,9 +15,9 @@ var ErrSpaceStorageExists = errors.New("space storage exists")
|
||||
var ErrSpaceStorageMissing = errors.New("space storage missing")
|
||||
|
||||
type SpaceStorage interface {
|
||||
storage2.Storage
|
||||
storage2.Provider
|
||||
ACLStorage() (storage2.ListStorage, error)
|
||||
storage.Provider
|
||||
ID() string
|
||||
ACLStorage() (storage.ListStorage, error)
|
||||
SpaceHeader() (*spacesyncproto.RawSpaceHeaderWithId, error)
|
||||
StoredIds() ([]string, error)
|
||||
Close() error
|
||||
|
||||
@ -149,7 +149,6 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t
|
||||
fullSyncResp := resp.GetContent().GetFullSyncResponse()
|
||||
|
||||
payload := storage.TreeStorageCreatePayload{
|
||||
TreeId: id,
|
||||
RootRawChange: resp.RootChange,
|
||||
Changes: fullSyncResp.Changes,
|
||||
Heads: fullSyncResp.Heads,
|
||||
|
||||
@ -50,20 +50,14 @@ type aclList struct {
|
||||
}
|
||||
|
||||
func BuildACLListWithIdentity(acc *account.AccountData, storage storage.ListStorage) (ACLList, error) {
|
||||
id, err := storage.ID()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
id := storage.ID()
|
||||
builder := newACLStateBuilderWithIdentity(acc)
|
||||
return build(id, builder, newACLRecordBuilder(id, common.NewKeychain()), storage)
|
||||
}
|
||||
|
||||
func BuildACLList(storage storage.ListStorage) (ACLList, error) {
|
||||
id, err := storage.ID()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return build(id, newACLStateBuilder(), newACLRecordBuilder(id, common.NewKeychain()), storage)
|
||||
id := storage.ID()
|
||||
return build(storage.ID(), newACLStateBuilder(), newACLRecordBuilder(id, common.NewKeychain()), storage)
|
||||
}
|
||||
|
||||
func build(id string, stateBuilder *aclStateBuilder, recBuilder ACLRecordBuilder, storage storage.ListStorage) (list ACLList, err error) {
|
||||
|
||||
@ -56,10 +56,10 @@ func (i *inMemoryACLListStorage) AddRawRecord(ctx context.Context, rec *aclrecor
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (i *inMemoryACLListStorage) ID() (string, error) {
|
||||
func (i *inMemoryACLListStorage) ID() string {
|
||||
i.RLock()
|
||||
defer i.RUnlock()
|
||||
return i.id, nil
|
||||
return i.id
|
||||
}
|
||||
|
||||
type inMemoryTreeStorage struct {
|
||||
@ -72,7 +72,6 @@ type inMemoryTreeStorage struct {
|
||||
}
|
||||
|
||||
func NewInMemoryTreeStorage(
|
||||
treeId string,
|
||||
root *treechangeproto.RawTreeChangeWithId,
|
||||
heads []string,
|
||||
changes []*treechangeproto.RawTreeChangeWithId) (TreeStorage, error) {
|
||||
@ -80,10 +79,10 @@ func NewInMemoryTreeStorage(
|
||||
for _, ch := range changes {
|
||||
allChanges[ch.Id] = ch
|
||||
}
|
||||
allChanges[treeId] = root
|
||||
allChanges[root.Id] = root
|
||||
|
||||
return &inMemoryTreeStorage{
|
||||
id: treeId,
|
||||
id: root.Id,
|
||||
root: root,
|
||||
heads: heads,
|
||||
changes: allChanges,
|
||||
@ -96,10 +95,10 @@ func (t *inMemoryTreeStorage) HasChange(ctx context.Context, id string) (bool, e
|
||||
return exists, nil
|
||||
}
|
||||
|
||||
func (t *inMemoryTreeStorage) ID() (string, error) {
|
||||
func (t *inMemoryTreeStorage) ID() string {
|
||||
t.RLock()
|
||||
defer t.RUnlock()
|
||||
return t.id, nil
|
||||
return t.id
|
||||
}
|
||||
|
||||
func (t *inMemoryTreeStorage) Root() (*treechangeproto.RawTreeChangeWithId, error) {
|
||||
@ -159,12 +158,12 @@ func (i *inMemoryStorageProvider) TreeStorage(id string) (TreeStorage, error) {
|
||||
func (i *inMemoryStorageProvider) CreateTreeStorage(payload TreeStorageCreatePayload) (TreeStorage, error) {
|
||||
i.Lock()
|
||||
defer i.Unlock()
|
||||
res, err := NewInMemoryTreeStorage(payload.TreeId, payload.RootRawChange, payload.Heads, payload.Changes)
|
||||
res, err := NewInMemoryTreeStorage(payload.RootRawChange, payload.Heads, payload.Changes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
i.objects[payload.TreeId] = res
|
||||
i.objects[payload.RootRawChange.Id] = res
|
||||
return res, nil
|
||||
}
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ var ErrACLExists = errors.New("acl already exists")
|
||||
var ErrUnknownRecord = errors.New("record doesn't exist")
|
||||
|
||||
type ListStorage interface {
|
||||
Storage
|
||||
ID() string
|
||||
Root() (*aclrecordproto.RawACLRecordWithId, error)
|
||||
Head() (string, error)
|
||||
SetHead(headId string) error
|
||||
|
||||
@ -10,7 +10,6 @@ var ErrTreeExists = errors.New("tree already exists")
|
||||
var ErrUnkownChange = errors.New("change doesn't exist")
|
||||
|
||||
type TreeStorageCreatePayload struct {
|
||||
TreeId string
|
||||
RootRawChange *treechangeproto.RawTreeChangeWithId
|
||||
Changes []*treechangeproto.RawTreeChangeWithId
|
||||
Heads []string
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
package storage
|
||||
|
||||
type Storage interface {
|
||||
ID() (string, error)
|
||||
}
|
||||
@ -6,7 +6,7 @@ import (
|
||||
)
|
||||
|
||||
type TreeStorage interface {
|
||||
Storage
|
||||
ID() string
|
||||
Root() (*treechangeproto.RawTreeChangeWithId, error)
|
||||
Heads() ([]string, error)
|
||||
SetHeads(heads []string) error
|
||||
|
||||
@ -120,8 +120,8 @@ func (t *ACLListStorageBuilder) AddRawRecord(ctx context.Context, rec *aclrecord
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (t *ACLListStorageBuilder) ID() (string, error) {
|
||||
return t.id, nil
|
||||
func (t *ACLListStorageBuilder) ID() string {
|
||||
return t.id
|
||||
}
|
||||
|
||||
func (t *ACLListStorageBuilder) GetRawRecords() []*aclrecordproto2.RawACLRecordWithId {
|
||||
|
||||
@ -3,7 +3,7 @@ package tree
|
||||
import (
|
||||
"context"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list"
|
||||
storage2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/testutils/acllistbuilder"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@ -53,9 +53,9 @@ func (c *mockChangeCreator) createRaw(id, aclId, snapshotId string, isSnapshot b
|
||||
}
|
||||
}
|
||||
|
||||
func (c *mockChangeCreator) createNewTreeStorage(treeId, aclHeadId string) storage2.TreeStorage {
|
||||
func (c *mockChangeCreator) createNewTreeStorage(treeId, aclHeadId string) storage.TreeStorage {
|
||||
root := c.createRoot(treeId, aclHeadId)
|
||||
treeStorage, _ := storage2.NewInMemoryTreeStorage(treeId, root, []string{root.Id}, []*treechangeproto.RawTreeChangeWithId{root})
|
||||
treeStorage, _ := storage.NewInMemoryTreeStorage(root, []string{root.Id}, []*treechangeproto.RawTreeChangeWithId{root})
|
||||
return treeStorage
|
||||
}
|
||||
|
||||
@ -95,7 +95,7 @@ func (m *mockChangeValidator) ValidateFullTree(tree *Tree, aclList list.ACLList)
|
||||
|
||||
type testTreeContext struct {
|
||||
aclList list.ACLList
|
||||
treeStorage storage2.TreeStorage
|
||||
treeStorage storage.TreeStorage
|
||||
changeBuilder *mockChangeBuilder
|
||||
changeCreator *mockChangeCreator
|
||||
objTree ObjectTree
|
||||
|
||||
@ -3,7 +3,7 @@ package tree
|
||||
import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/common"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list"
|
||||
storage2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/asymmetric/signingkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/keys/symmetric"
|
||||
@ -20,7 +20,7 @@ type ObjectTreeCreatePayload struct {
|
||||
Identity []byte
|
||||
}
|
||||
|
||||
func BuildObjectTree(treeStorage storage2.TreeStorage, aclList list.ACLList) (ObjectTree, error) {
|
||||
func BuildObjectTree(treeStorage storage.TreeStorage, aclList list.ACLList) (ObjectTree, error) {
|
||||
rootChange, err := treeStorage.Root()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -32,14 +32,14 @@ func BuildObjectTree(treeStorage storage2.TreeStorage, aclList list.ACLList) (Ob
|
||||
func CreateDerivedObjectTree(
|
||||
payload ObjectTreeCreatePayload,
|
||||
aclList list.ACLList,
|
||||
createStorage storage2.TreeStorageCreatorFunc) (objTree ObjectTree, err error) {
|
||||
createStorage storage.TreeStorageCreatorFunc) (objTree ObjectTree, err error) {
|
||||
return createObjectTree(payload, 0, nil, aclList, createStorage)
|
||||
}
|
||||
|
||||
func CreateObjectTree(
|
||||
payload ObjectTreeCreatePayload,
|
||||
aclList list.ACLList,
|
||||
createStorage storage2.TreeStorageCreatorFunc) (objTree ObjectTree, err error) {
|
||||
createStorage storage.TreeStorageCreatorFunc) (objTree ObjectTree, err error) {
|
||||
bytes := make([]byte, 32)
|
||||
_, err = rand.Read(bytes)
|
||||
if err != nil {
|
||||
@ -53,7 +53,7 @@ func createObjectTree(
|
||||
timestamp int64,
|
||||
seed []byte,
|
||||
aclList list.ACLList,
|
||||
createStorage storage2.TreeStorageCreatorFunc) (objTree ObjectTree, err error) {
|
||||
createStorage storage.TreeStorageCreatorFunc) (objTree ObjectTree, err error) {
|
||||
aclList.RLock()
|
||||
aclHeadId := aclList.Head().Id
|
||||
aclList.RUnlock()
|
||||
@ -77,8 +77,7 @@ func createObjectTree(
|
||||
}
|
||||
|
||||
// create storage
|
||||
st, err := createStorage(storage2.TreeStorageCreatePayload{
|
||||
TreeId: raw.Id,
|
||||
st, err := createStorage(storage.TreeStorageCreatePayload{
|
||||
RootRawChange: raw,
|
||||
Changes: []*treechangeproto.RawTreeChangeWithId{raw},
|
||||
Heads: []string{raw.Id},
|
||||
@ -127,11 +126,7 @@ func buildObjectTree(deps objectTreeDeps) (ObjectTree, error) {
|
||||
}
|
||||
}
|
||||
|
||||
objTree.id, err = objTree.treeStorage.ID()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
objTree.id = objTree.treeStorage.ID()
|
||||
objTree.root, err = objTree.treeStorage.Root()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@ -82,8 +82,8 @@ func createListStorage(db *pogreb.DB, root *aclrecordproto.RawACLRecordWithId) (
|
||||
return
|
||||
}
|
||||
|
||||
func (l *listStorage) ID() (string, error) {
|
||||
return l.id, nil
|
||||
func (l *listStorage) ID() string {
|
||||
return l.id
|
||||
}
|
||||
|
||||
func (l *listStorage) Root() (*aclrecordproto.RawACLRecordWithId, error) {
|
||||
|
||||
@ -129,8 +129,8 @@ func createSpaceStorage(rootPath string, payload spacestorage.SpaceStorageCreate
|
||||
return
|
||||
}
|
||||
|
||||
func (s *spaceStorage) ID() (string, error) {
|
||||
return s.spaceId, nil
|
||||
func (s *spaceStorage) ID() string {
|
||||
return s.spaceId
|
||||
}
|
||||
|
||||
func (s *spaceStorage) TreeStorage(id string) (storage2.TreeStorage, error) {
|
||||
|
||||
@ -3,7 +3,7 @@ package storage
|
||||
import (
|
||||
"context"
|
||||
"github.com/akrylysov/pogreb"
|
||||
storage2 "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
storage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
|
||||
)
|
||||
|
||||
@ -14,14 +14,14 @@ type treeStorage struct {
|
||||
root *treechangeproto.RawTreeChangeWithId
|
||||
}
|
||||
|
||||
func newTreeStorage(db *pogreb.DB, treeId string) (ts storage2.TreeStorage, err error) {
|
||||
func newTreeStorage(db *pogreb.DB, treeId string) (ts storage.TreeStorage, err error) {
|
||||
keys := newTreeKeys(treeId)
|
||||
heads, err := db.Get(keys.HeadsKey())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if heads == nil {
|
||||
err = storage2.ErrUnknownTreeId
|
||||
err = storage.ErrUnknownTreeId
|
||||
return
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ func newTreeStorage(db *pogreb.DB, treeId string) (ts storage2.TreeStorage, err
|
||||
return
|
||||
}
|
||||
if root == nil {
|
||||
err = storage2.ErrUnknownTreeId
|
||||
err = storage.ErrUnknownTreeId
|
||||
return
|
||||
}
|
||||
|
||||
@ -47,18 +47,18 @@ func newTreeStorage(db *pogreb.DB, treeId string) (ts storage2.TreeStorage, err
|
||||
return
|
||||
}
|
||||
|
||||
func createTreeStorage(db *pogreb.DB, payload storage2.TreeStorageCreatePayload) (ts storage2.TreeStorage, err error) {
|
||||
keys := newTreeKeys(payload.TreeId)
|
||||
func createTreeStorage(db *pogreb.DB, payload storage.TreeStorageCreatePayload) (ts storage.TreeStorage, err error) {
|
||||
keys := newTreeKeys(payload.RootRawChange.Id)
|
||||
has, err := db.Has(keys.HeadsKey())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if has {
|
||||
err = storage2.ErrTreeExists
|
||||
err = storage.ErrTreeExists
|
||||
return
|
||||
}
|
||||
|
||||
heads := storage2.CreateHeadsPayload(payload.Heads)
|
||||
heads := storage.CreateHeadsPayload(payload.Heads)
|
||||
|
||||
for _, ch := range payload.Changes {
|
||||
err = db.Put(keys.RawChangeKey(ch.Id), ch.GetRawChange())
|
||||
@ -86,8 +86,8 @@ func createTreeStorage(db *pogreb.DB, payload storage2.TreeStorageCreatePayload)
|
||||
return
|
||||
}
|
||||
|
||||
func (t *treeStorage) ID() (string, error) {
|
||||
return t.id, nil
|
||||
func (t *treeStorage) ID() string {
|
||||
return t.id
|
||||
}
|
||||
|
||||
func (t *treeStorage) Root() (raw *treechangeproto.RawTreeChangeWithId, err error) {
|
||||
@ -100,15 +100,15 @@ func (t *treeStorage) Heads() (heads []string, err error) {
|
||||
return
|
||||
}
|
||||
if headsBytes == nil {
|
||||
err = storage2.ErrUnknownTreeId
|
||||
err = storage.ErrUnknownTreeId
|
||||
return
|
||||
}
|
||||
heads = storage2.ParseHeads(headsBytes)
|
||||
heads = storage.ParseHeads(headsBytes)
|
||||
return
|
||||
}
|
||||
|
||||
func (t *treeStorage) SetHeads(heads []string) (err error) {
|
||||
payload := storage2.CreateHeadsPayload(heads)
|
||||
payload := storage.CreateHeadsPayload(heads)
|
||||
return t.db.Put(t.keys.HeadsKey(), payload)
|
||||
}
|
||||
|
||||
@ -122,7 +122,7 @@ func (t *treeStorage) GetRawChange(ctx context.Context, id string) (raw *treecha
|
||||
return
|
||||
}
|
||||
if res == nil {
|
||||
err = storage2.ErrUnkownChange
|
||||
err = storage.ErrUnkownChange
|
||||
}
|
||||
|
||||
raw = &treechangeproto.RawTreeChangeWithId{
|
||||
|
||||
54
node/storage/treestorage_test.go
Normal file
54
node/storage/treestorage_test.go
Normal file
@ -0,0 +1,54 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/akrylysov/pogreb"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
|
||||
"github.com/stretchr/testify/require"
|
||||
"os"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type fixture struct {
|
||||
db *pogreb.DB
|
||||
}
|
||||
|
||||
func newFixture(t *testing.T) *fixture {
|
||||
dir, err := os.MkdirTemp("", "")
|
||||
require.NoError(t, err)
|
||||
db, err := pogreb.Open(dir, nil)
|
||||
require.NoError(t, err)
|
||||
return &fixture{db: db}
|
||||
}
|
||||
|
||||
func (fx *fixture) stop(t *testing.T) {
|
||||
require.NoError(t, fx.db.Close())
|
||||
}
|
||||
|
||||
func TestTreeStorage_CreateTreeStorage(t *testing.T) {
|
||||
fx := newFixture(t)
|
||||
defer fx.stop(t)
|
||||
|
||||
rootRawChange := &treechangeproto.RawTreeChangeWithId{RawChange: []byte("some"), Id: "rootId"}
|
||||
otherChange := &treechangeproto.RawTreeChangeWithId{RawChange: []byte("some other"), Id: "otherId"}
|
||||
changes := []*treechangeproto.RawTreeChangeWithId{rootRawChange, otherChange}
|
||||
payload := storage.TreeStorageCreatePayload{
|
||||
RootRawChange: rootRawChange,
|
||||
Changes: changes,
|
||||
Heads: []string{rootRawChange.Id},
|
||||
}
|
||||
store, err := createTreeStorage(fx.db, payload)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, payload.RootRawChange.Id, store.ID())
|
||||
|
||||
root, err := store.Root()
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, root, rootRawChange)
|
||||
|
||||
for _, ch := range changes {
|
||||
dbCh, err := store.GetRawChange(context.Background(), ch.Id)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, ch, dbCh)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user