mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 05:57:03 +09:00
Start sync tests
This commit is contained in:
parent
7cd737a08a
commit
b333d16b6f
6 changed files with 190 additions and 113 deletions
|
@ -3,7 +3,7 @@ package list
|
||||||
import (
|
import (
|
||||||
"github.com/anytypeio/any-sync/commonspace/object/accountdata"
|
"github.com/anytypeio/any-sync/commonspace/object/accountdata"
|
||||||
"github.com/anytypeio/any-sync/commonspace/object/acl/aclrecordproto"
|
"github.com/anytypeio/any-sync/commonspace/object/acl/aclrecordproto"
|
||||||
acllistbuilder2 "github.com/anytypeio/any-sync/commonspace/object/acl/testutils/acllistbuilder"
|
acllistbuilder "github.com/anytypeio/any-sync/commonspace/object/acl/testutils/acllistbuilder"
|
||||||
"github.com/anytypeio/any-sync/commonspace/object/keychain"
|
"github.com/anytypeio/any-sync/commonspace/object/keychain"
|
||||||
"github.com/anytypeio/any-sync/util/cidutil"
|
"github.com/anytypeio/any-sync/util/cidutil"
|
||||||
"github.com/anytypeio/any-sync/util/keys/asymmetric/signingkey"
|
"github.com/anytypeio/any-sync/util/keys/asymmetric/signingkey"
|
||||||
|
@ -12,10 +12,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestAclRecordBuilder_BuildUserJoin(t *testing.T) {
|
func TestAclRecordBuilder_BuildUserJoin(t *testing.T) {
|
||||||
st, err := acllistbuilder2.NewListStorageWithTestName("userjoinexample.yml")
|
st, err := acllistbuilder.NewListStorageWithTestName("userjoinexample.yml")
|
||||||
require.NoError(t, err, "building storage should not result in error")
|
require.NoError(t, err, "building storage should not result in error")
|
||||||
|
|
||||||
testKeychain := st.(*acllistbuilder2.AclListStorageBuilder).GetKeychain()
|
testKeychain := st.(*acllistbuilder.AclListStorageBuilder).GetKeychain()
|
||||||
identity := testKeychain.GeneratedIdentities["D"]
|
identity := testKeychain.GeneratedIdentities["D"]
|
||||||
signPrivKey := testKeychain.SigningKeysByYAMLName["D"]
|
signPrivKey := testKeychain.SigningKeysByYAMLName["D"]
|
||||||
encPrivKey := testKeychain.EncryptionKeysByYAMLName["D"]
|
encPrivKey := testKeychain.EncryptionKeysByYAMLName["D"]
|
||||||
|
@ -28,7 +28,7 @@ func TestAclRecordBuilder_BuildUserJoin(t *testing.T) {
|
||||||
aclList, err := BuildAclListWithIdentity(acc, st)
|
aclList, err := BuildAclListWithIdentity(acc, st)
|
||||||
require.NoError(t, err, "building acl list should be without error")
|
require.NoError(t, err, "building acl list should be without error")
|
||||||
recordBuilder := newAclRecordBuilder(aclList.Id(), keychain.NewKeychain())
|
recordBuilder := newAclRecordBuilder(aclList.Id(), keychain.NewKeychain())
|
||||||
rk, err := testKeychain.GetKey("key.Read.EncKey").(*acllistbuilder2.SymKey).Key.Raw()
|
rk, err := testKeychain.GetKey("key.Read.EncKey").(*acllistbuilder.SymKey).Key.Raw()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
privKey, err := testKeychain.GetKey("key.Sign.Onetime1").(signingkey.PrivKey).Raw()
|
privKey, err := testKeychain.GetKey("key.Sign.Onetime1").(signingkey.PrivKey).Raw()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
|
@ -11,59 +11,11 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
type mockChangeCreator struct{}
|
|
||||||
|
|
||||||
func (c *mockChangeCreator) createRoot(id, aclId string) *treechangeproto.RawTreeChangeWithId {
|
|
||||||
aclChange := &treechangeproto.RootChange{
|
|
||||||
AclHeadId: aclId,
|
|
||||||
}
|
|
||||||
res, _ := aclChange.Marshal()
|
|
||||||
|
|
||||||
raw := &treechangeproto.RawTreeChange{
|
|
||||||
Payload: res,
|
|
||||||
Signature: nil,
|
|
||||||
}
|
|
||||||
rawMarshalled, _ := raw.Marshal()
|
|
||||||
|
|
||||||
return &treechangeproto.RawTreeChangeWithId{
|
|
||||||
RawChange: rawMarshalled,
|
|
||||||
Id: id,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *mockChangeCreator) createRaw(id, aclId, snapshotId string, isSnapshot bool, prevIds ...string) *treechangeproto.RawTreeChangeWithId {
|
|
||||||
aclChange := &treechangeproto.TreeChange{
|
|
||||||
TreeHeadIds: prevIds,
|
|
||||||
AclHeadId: aclId,
|
|
||||||
SnapshotBaseId: snapshotId,
|
|
||||||
ChangesData: nil,
|
|
||||||
IsSnapshot: isSnapshot,
|
|
||||||
}
|
|
||||||
res, _ := aclChange.Marshal()
|
|
||||||
|
|
||||||
raw := &treechangeproto.RawTreeChange{
|
|
||||||
Payload: res,
|
|
||||||
Signature: nil,
|
|
||||||
}
|
|
||||||
rawMarshalled, _ := raw.Marshal()
|
|
||||||
|
|
||||||
return &treechangeproto.RawTreeChangeWithId{
|
|
||||||
RawChange: rawMarshalled,
|
|
||||||
Id: id,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *mockChangeCreator) createNewTreeStorage(treeId, aclHeadId string) treestorage.TreeStorage {
|
|
||||||
root := c.createRoot(treeId, aclHeadId)
|
|
||||||
treeStorage, _ := treestorage.NewInMemoryTreeStorage(root, []string{root.Id}, []*treechangeproto.RawTreeChangeWithId{root})
|
|
||||||
return treeStorage
|
|
||||||
}
|
|
||||||
|
|
||||||
type testTreeContext struct {
|
type testTreeContext struct {
|
||||||
aclList list.AclList
|
aclList list.AclList
|
||||||
treeStorage treestorage.TreeStorage
|
treeStorage treestorage.TreeStorage
|
||||||
changeBuilder ChangeBuilder
|
changeBuilder ChangeBuilder
|
||||||
changeCreator *mockChangeCreator
|
changeCreator *MockChangeCreator
|
||||||
objTree ObjectTree
|
objTree ObjectTree
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,9 +29,9 @@ func prepareAclList(t *testing.T) list.AclList {
|
||||||
return aclList
|
return aclList
|
||||||
}
|
}
|
||||||
|
|
||||||
func prepareTreeDeps(aclList list.AclList) (*mockChangeCreator, objectTreeDeps) {
|
func prepareTreeDeps(aclList list.AclList) (*MockChangeCreator, objectTreeDeps) {
|
||||||
changeCreator := &mockChangeCreator{}
|
changeCreator := &MockChangeCreator{}
|
||||||
treeStorage := changeCreator.createNewTreeStorage("0", aclList.Head().Id)
|
treeStorage := changeCreator.CreateNewTreeStorage("0", aclList.Head().Id)
|
||||||
root, _ := treeStorage.Root()
|
root, _ := treeStorage.Root()
|
||||||
changeBuilder := &nonVerifiableChangeBuilder{
|
changeBuilder := &nonVerifiableChangeBuilder{
|
||||||
ChangeBuilder: NewChangeBuilder(nil, root),
|
ChangeBuilder: NewChangeBuilder(nil, root),
|
||||||
|
@ -96,8 +48,8 @@ func prepareTreeDeps(aclList list.AclList) (*mockChangeCreator, objectTreeDeps)
|
||||||
}
|
}
|
||||||
|
|
||||||
func prepareTreeContext(t *testing.T, aclList list.AclList) testTreeContext {
|
func prepareTreeContext(t *testing.T, aclList list.AclList) testTreeContext {
|
||||||
changeCreator := &mockChangeCreator{}
|
changeCreator := &MockChangeCreator{}
|
||||||
treeStorage := changeCreator.createNewTreeStorage("0", aclList.Head().Id)
|
treeStorage := changeCreator.CreateNewTreeStorage("0", aclList.Head().Id)
|
||||||
root, _ := treeStorage.Root()
|
root, _ := treeStorage.Root()
|
||||||
changeBuilder := &nonVerifiableChangeBuilder{
|
changeBuilder := &nonVerifiableChangeBuilder{
|
||||||
ChangeBuilder: NewChangeBuilder(nil, root),
|
ChangeBuilder: NewChangeBuilder(nil, root),
|
||||||
|
@ -142,8 +94,8 @@ func TestObjectTree(t *testing.T) {
|
||||||
objTree := ctx.objTree
|
objTree := ctx.objTree
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("1", aclList.Head().Id, "0", false, "0"),
|
changeCreator.CreateRaw("1", aclList.Head().Id, "0", false, "0"),
|
||||||
changeCreator.createRaw("2", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("2", aclList.Head().Id, "0", false, "1"),
|
||||||
}
|
}
|
||||||
payload := RawChangesPayload{
|
payload := RawChangesPayload{
|
||||||
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
||||||
|
@ -187,7 +139,7 @@ func TestObjectTree(t *testing.T) {
|
||||||
objTree := ctx.objTree
|
objTree := ctx.objTree
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("0", aclList.Head().Id, "", true, ""),
|
changeCreator.CreateRaw("0", aclList.Head().Id, "", true, ""),
|
||||||
}
|
}
|
||||||
payload := RawChangesPayload{
|
payload := RawChangesPayload{
|
||||||
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
||||||
|
@ -211,7 +163,7 @@ func TestObjectTree(t *testing.T) {
|
||||||
objTree := ctx.objTree
|
objTree := ctx.objTree
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("2", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("2", aclList.Head().Id, "0", false, "1"),
|
||||||
}
|
}
|
||||||
payload := RawChangesPayload{
|
payload := RawChangesPayload{
|
||||||
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
||||||
|
@ -237,10 +189,10 @@ func TestObjectTree(t *testing.T) {
|
||||||
objTree := ctx.objTree
|
objTree := ctx.objTree
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("1", aclList.Head().Id, "0", false, "0"),
|
changeCreator.CreateRaw("1", aclList.Head().Id, "0", false, "0"),
|
||||||
changeCreator.createRaw("2", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("2", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("3", aclList.Head().Id, "0", true, "2"),
|
changeCreator.CreateRaw("3", aclList.Head().Id, "0", true, "2"),
|
||||||
changeCreator.createRaw("4", aclList.Head().Id, "3", false, "3"),
|
changeCreator.CreateRaw("4", aclList.Head().Id, "3", false, "3"),
|
||||||
}
|
}
|
||||||
payload := RawChangesPayload{
|
payload := RawChangesPayload{
|
||||||
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
||||||
|
@ -287,9 +239,9 @@ func TestObjectTree(t *testing.T) {
|
||||||
objTree := ctx.objTree
|
objTree := ctx.objTree
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("1", aclList.Head().Id, "0", false, "0"),
|
changeCreator.CreateRaw("1", aclList.Head().Id, "0", false, "0"),
|
||||||
changeCreator.createRaw("2", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("2", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("3", aclList.Head().Id, "0", true, "2"),
|
changeCreator.CreateRaw("3", aclList.Head().Id, "0", true, "2"),
|
||||||
}
|
}
|
||||||
payload := RawChangesPayload{
|
payload := RawChangesPayload{
|
||||||
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
||||||
|
@ -311,12 +263,12 @@ func TestObjectTree(t *testing.T) {
|
||||||
objTree := ctx.objTree
|
objTree := ctx.objTree
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("1", aclList.Head().Id, "0", false, "0"),
|
changeCreator.CreateRaw("1", aclList.Head().Id, "0", false, "0"),
|
||||||
changeCreator.createRaw("2", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("2", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("3", aclList.Head().Id, "0", true, "2"),
|
changeCreator.CreateRaw("3", aclList.Head().Id, "0", true, "2"),
|
||||||
changeCreator.createRaw("4", aclList.Head().Id, "0", false, "2"),
|
changeCreator.CreateRaw("4", aclList.Head().Id, "0", false, "2"),
|
||||||
changeCreator.createRaw("5", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("5", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("6", aclList.Head().Id, "0", false, "3", "4", "5"),
|
changeCreator.CreateRaw("6", aclList.Head().Id, "0", false, "3", "4", "5"),
|
||||||
}
|
}
|
||||||
|
|
||||||
payload := RawChangesPayload{
|
payload := RawChangesPayload{
|
||||||
|
@ -390,13 +342,13 @@ func TestObjectTree(t *testing.T) {
|
||||||
objTree := ctx.objTree
|
objTree := ctx.objTree
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("1", aclList.Head().Id, "0", false, "0"),
|
changeCreator.CreateRaw("1", aclList.Head().Id, "0", false, "0"),
|
||||||
changeCreator.createRaw("2", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("2", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("3", aclList.Head().Id, "0", true, "2"),
|
changeCreator.CreateRaw("3", aclList.Head().Id, "0", true, "2"),
|
||||||
changeCreator.createRaw("4", aclList.Head().Id, "0", false, "2"),
|
changeCreator.CreateRaw("4", aclList.Head().Id, "0", false, "2"),
|
||||||
changeCreator.createRaw("5", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("5", aclList.Head().Id, "0", false, "1"),
|
||||||
// main difference from tree example
|
// main difference from tree example
|
||||||
changeCreator.createRaw("6", aclList.Head().Id, "0", true, "3", "4", "5"),
|
changeCreator.CreateRaw("6", aclList.Head().Id, "0", true, "3", "4", "5"),
|
||||||
}
|
}
|
||||||
|
|
||||||
payload := RawChangesPayload{
|
payload := RawChangesPayload{
|
||||||
|
@ -471,9 +423,9 @@ func TestObjectTree(t *testing.T) {
|
||||||
objTree := ctx.objTree
|
objTree := ctx.objTree
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("1", aclList.Head().Id, "0", false, "0"),
|
changeCreator.CreateRaw("1", aclList.Head().Id, "0", false, "0"),
|
||||||
changeCreator.createRaw("2", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("2", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("3", aclList.Head().Id, "0", true, "2"),
|
changeCreator.CreateRaw("3", aclList.Head().Id, "0", true, "2"),
|
||||||
}
|
}
|
||||||
payload := RawChangesPayload{
|
payload := RawChangesPayload{
|
||||||
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
||||||
|
@ -485,9 +437,9 @@ func TestObjectTree(t *testing.T) {
|
||||||
require.Equal(t, "3", objTree.Root().Id)
|
require.Equal(t, "3", objTree.Root().Id)
|
||||||
|
|
||||||
rawChanges = []*treechangeproto.RawTreeChangeWithId{
|
rawChanges = []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("4", aclList.Head().Id, "0", false, "2"),
|
changeCreator.CreateRaw("4", aclList.Head().Id, "0", false, "2"),
|
||||||
changeCreator.createRaw("5", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("5", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("6", aclList.Head().Id, "0", false, "3", "4", "5"),
|
changeCreator.CreateRaw("6", aclList.Head().Id, "0", false, "3", "4", "5"),
|
||||||
}
|
}
|
||||||
payload = RawChangesPayload{
|
payload = RawChangesPayload{
|
||||||
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
NewHeads: []string{rawChanges[len(rawChanges)-1].Id},
|
||||||
|
@ -531,12 +483,12 @@ func TestObjectTree(t *testing.T) {
|
||||||
changeCreator, deps := prepareTreeDeps(aclList)
|
changeCreator, deps := prepareTreeDeps(aclList)
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("1", aclList.Head().Id, "0", false, "0"),
|
changeCreator.CreateRaw("1", aclList.Head().Id, "0", false, "0"),
|
||||||
changeCreator.createRaw("2", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("2", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("3", aclList.Head().Id, "0", true, "2"),
|
changeCreator.CreateRaw("3", aclList.Head().Id, "0", true, "2"),
|
||||||
changeCreator.createRaw("4", aclList.Head().Id, "0", false, "2"),
|
changeCreator.CreateRaw("4", aclList.Head().Id, "0", false, "2"),
|
||||||
changeCreator.createRaw("5", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("5", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("6", aclList.Head().Id, "0", false, "3", "4", "5"),
|
changeCreator.CreateRaw("6", aclList.Head().Id, "0", false, "3", "4", "5"),
|
||||||
}
|
}
|
||||||
deps.treeStorage.TransactionAdd(rawChanges, []string{"6"})
|
deps.treeStorage.TransactionAdd(rawChanges, []string{"6"})
|
||||||
hTree, err := buildHistoryTree(deps, HistoryTreeParams{
|
hTree, err := buildHistoryTree(deps, HistoryTreeParams{
|
||||||
|
@ -562,12 +514,12 @@ func TestObjectTree(t *testing.T) {
|
||||||
changeCreator, deps := prepareTreeDeps(aclList)
|
changeCreator, deps := prepareTreeDeps(aclList)
|
||||||
|
|
||||||
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
rawChanges := []*treechangeproto.RawTreeChangeWithId{
|
||||||
changeCreator.createRaw("1", aclList.Head().Id, "0", false, "0"),
|
changeCreator.CreateRaw("1", aclList.Head().Id, "0", false, "0"),
|
||||||
changeCreator.createRaw("2", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("2", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("3", aclList.Head().Id, "0", true, "2"),
|
changeCreator.CreateRaw("3", aclList.Head().Id, "0", true, "2"),
|
||||||
changeCreator.createRaw("4", aclList.Head().Id, "0", false, "2"),
|
changeCreator.CreateRaw("4", aclList.Head().Id, "0", false, "2"),
|
||||||
changeCreator.createRaw("5", aclList.Head().Id, "0", false, "1"),
|
changeCreator.CreateRaw("5", aclList.Head().Id, "0", false, "1"),
|
||||||
changeCreator.createRaw("6", aclList.Head().Id, "0", false, "3", "4", "5"),
|
changeCreator.CreateRaw("6", aclList.Head().Id, "0", false, "3", "4", "5"),
|
||||||
}
|
}
|
||||||
deps.treeStorage.TransactionAdd(rawChanges, []string{"6"})
|
deps.treeStorage.TransactionAdd(rawChanges, []string{"6"})
|
||||||
hTree, err := buildHistoryTree(deps, HistoryTreeParams{
|
hTree, err := buildHistoryTree(deps, HistoryTreeParams{
|
||||||
|
|
76
commonspace/object/tree/objecttree/testutils.go
Normal file
76
commonspace/object/tree/objecttree/testutils.go
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
package objecttree
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/object/acl/list"
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/object/tree/treechangeproto"
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/object/tree/treestorage"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MockChangeCreator struct{}
|
||||||
|
|
||||||
|
func NewMockChangeCreator() *MockChangeCreator {
|
||||||
|
return &MockChangeCreator{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *MockChangeCreator) CreateRoot(id, aclId string) *treechangeproto.RawTreeChangeWithId {
|
||||||
|
aclChange := &treechangeproto.RootChange{
|
||||||
|
AclHeadId: aclId,
|
||||||
|
}
|
||||||
|
res, _ := aclChange.Marshal()
|
||||||
|
|
||||||
|
raw := &treechangeproto.RawTreeChange{
|
||||||
|
Payload: res,
|
||||||
|
Signature: nil,
|
||||||
|
}
|
||||||
|
rawMarshalled, _ := raw.Marshal()
|
||||||
|
|
||||||
|
return &treechangeproto.RawTreeChangeWithId{
|
||||||
|
RawChange: rawMarshalled,
|
||||||
|
Id: id,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *MockChangeCreator) CreateRaw(id, aclId, snapshotId string, isSnapshot bool, prevIds ...string) *treechangeproto.RawTreeChangeWithId {
|
||||||
|
aclChange := &treechangeproto.TreeChange{
|
||||||
|
TreeHeadIds: prevIds,
|
||||||
|
AclHeadId: aclId,
|
||||||
|
SnapshotBaseId: snapshotId,
|
||||||
|
ChangesData: nil,
|
||||||
|
IsSnapshot: isSnapshot,
|
||||||
|
}
|
||||||
|
res, _ := aclChange.Marshal()
|
||||||
|
|
||||||
|
raw := &treechangeproto.RawTreeChange{
|
||||||
|
Payload: res,
|
||||||
|
Signature: nil,
|
||||||
|
}
|
||||||
|
rawMarshalled, _ := raw.Marshal()
|
||||||
|
|
||||||
|
return &treechangeproto.RawTreeChangeWithId{
|
||||||
|
RawChange: rawMarshalled,
|
||||||
|
Id: id,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *MockChangeCreator) CreateNewTreeStorage(treeId, aclHeadId string) treestorage.TreeStorage {
|
||||||
|
root := c.CreateRoot(treeId, aclHeadId)
|
||||||
|
treeStorage, _ := treestorage.NewInMemoryTreeStorage(root, []string{root.Id}, []*treechangeproto.RawTreeChangeWithId{root})
|
||||||
|
return treeStorage
|
||||||
|
}
|
||||||
|
|
||||||
|
func BuildTestableTree(aclList list.AclList, treeStorage treestorage.TreeStorage) (ObjectTree, error) {
|
||||||
|
root, _ := treeStorage.Root()
|
||||||
|
changeBuilder := &nonVerifiableChangeBuilder{
|
||||||
|
ChangeBuilder: NewChangeBuilder(nil, root),
|
||||||
|
}
|
||||||
|
deps := objectTreeDeps{
|
||||||
|
changeBuilder: changeBuilder,
|
||||||
|
treeBuilder: newTreeBuilder(treeStorage, changeBuilder),
|
||||||
|
treeStorage: treeStorage,
|
||||||
|
rawChangeLoader: newRawChangeLoader(treeStorage, changeBuilder),
|
||||||
|
validator: &noOpTreeValidator{},
|
||||||
|
aclList: aclList,
|
||||||
|
}
|
||||||
|
|
||||||
|
return buildObjectTree(deps)
|
||||||
|
}
|
|
@ -4,9 +4,8 @@ package synctree
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/anytypeio/any-sync/commonspace/object/tree/treechangeproto"
|
"github.com/anytypeio/any-sync/commonspace/object/tree/treechangeproto"
|
||||||
"github.com/anytypeio/any-sync/commonspace/objectsync"
|
"github.com/anytypeio/any-sync/commonspace/peermanager"
|
||||||
"github.com/anytypeio/any-sync/commonspace/spacesyncproto"
|
"github.com/anytypeio/any-sync/commonspace/spacesyncproto"
|
||||||
"github.com/anytypeio/any-sync/nodeconf"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type SyncClient interface {
|
type SyncClient interface {
|
||||||
|
@ -16,21 +15,18 @@ type SyncClient interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
type syncClient struct {
|
type syncClient struct {
|
||||||
objectsync.MessagePool
|
peermanager.PeerManager
|
||||||
RequestFactory
|
RequestFactory
|
||||||
spaceId string
|
spaceId string
|
||||||
configuration nodeconf.Configuration
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSyncClient(
|
func newSyncClient(
|
||||||
spaceId string,
|
spaceId string,
|
||||||
pool objectsync.MessagePool,
|
peerManager peermanager.PeerManager,
|
||||||
factory RequestFactory,
|
factory RequestFactory) SyncClient {
|
||||||
configuration nodeconf.Configuration) SyncClient {
|
|
||||||
return &syncClient{
|
return &syncClient{
|
||||||
MessagePool: pool,
|
PeerManager: peerManager,
|
||||||
RequestFactory: factory,
|
RequestFactory: factory,
|
||||||
configuration: configuration,
|
|
||||||
spaceId: spaceId,
|
spaceId: spaceId,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,7 +36,7 @@ func (s *syncClient) Broadcast(ctx context.Context, msg *treechangeproto.TreeSyn
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return s.MessagePool.Broadcast(ctx, objMsg)
|
return s.PeerManager.Broadcast(ctx, objMsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *syncClient) SendWithReply(ctx context.Context, peerId string, msg *treechangeproto.TreeSyncMessage, replyId string) (err error) {
|
func (s *syncClient) SendWithReply(ctx context.Context, peerId string, msg *treechangeproto.TreeSyncMessage, replyId string) (err error) {
|
||||||
|
@ -48,7 +44,7 @@ func (s *syncClient) SendWithReply(ctx context.Context, peerId string, msg *tree
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return s.MessagePool.SendPeer(ctx, peerId, objMsg)
|
return s.PeerManager.SendPeer(ctx, peerId, objMsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func marshallTreeMessage(message *treechangeproto.TreeSyncMessage, spaceId, objectId, replyId string) (objMsg *spacesyncproto.ObjectSyncMessage, err error) {
|
func marshallTreeMessage(message *treechangeproto.TreeSyncMessage, spaceId, objectId, replyId string) (objMsg *spacesyncproto.ObjectSyncMessage, err error) {
|
||||||
|
|
54
commonspace/object/tree/synctree/syncclient_test.go
Normal file
54
commonspace/object/tree/synctree/syncclient_test.go
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
package synctree
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/object/tree/objecttree"
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/objectsync/synchandler"
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/peermanager"
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/spacesyncproto"
|
||||||
|
"github.com/anytypeio/any-sync/commonspace/syncstatus"
|
||||||
|
"github.com/anytypeio/any-sync/net/peer"
|
||||||
|
)
|
||||||
|
|
||||||
|
type mockPeerManager struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockPeerManager) SendPeer(ctx context.Context, peerId string, msg *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||||
|
//TODO implement me
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockPeerManager) Broadcast(ctx context.Context, msg *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||||
|
//TODO implement me
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockPeerManager) GetResponsiblePeers(ctx context.Context) (peers []peer.Peer, err error) {
|
||||||
|
//TODO implement me
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
type broadcastTree struct {
|
||||||
|
objecttree.ObjectTree
|
||||||
|
SyncClient
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *broadcastTree) AddRawChanges(ctx context.Context, changes objecttree.RawChangesPayload) (objecttree.AddResult, error) {
|
||||||
|
res, err := b.ObjectTree.AddRawChanges(ctx, changes)
|
||||||
|
if err != nil {
|
||||||
|
return objecttree.AddResult{}, err
|
||||||
|
}
|
||||||
|
upd := b.SyncClient.CreateHeadUpdate(b.ObjectTree, res.Added)
|
||||||
|
b.SyncClient.Broadcast(ctx, upd)
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func build(spaceId string, objTree objecttree.ObjectTree, peerManager peermanager.PeerManager) synchandler.SyncHandler {
|
||||||
|
factory := GetRequestFactory()
|
||||||
|
syncClient := newSyncClient(spaceId, peerManager, factory)
|
||||||
|
netTree := &broadcastTree{
|
||||||
|
ObjectTree: objTree,
|
||||||
|
SyncClient: syncClient,
|
||||||
|
}
|
||||||
|
return newSyncTreeHandler(spaceId, netTree, syncClient, syncstatus.NewNoOpSyncStatus())
|
||||||
|
}
|
|
@ -101,8 +101,7 @@ func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t Sy
|
||||||
syncClient := createSyncClient(
|
syncClient := createSyncClient(
|
||||||
deps.SpaceId,
|
deps.SpaceId,
|
||||||
deps.ObjectSync.MessagePool(),
|
deps.ObjectSync.MessagePool(),
|
||||||
sharedFactory,
|
sharedFactory)
|
||||||
deps.Configuration)
|
|
||||||
syncTree := &syncTree{
|
syncTree := &syncTree{
|
||||||
ObjectTree: objTree,
|
ObjectTree: objTree,
|
||||||
syncClient: syncClient,
|
syncClient: syncClient,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue