1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-08 05:57:03 +09:00

Test tree filter

This commit is contained in:
mcrakhman 2024-02-15 12:59:52 +01:00
parent 8ad16df17f
commit 95dac55978
No known key found for this signature in database
GPG key ID: DED12CFEF5B8396B
2 changed files with 70 additions and 2 deletions

View file

@ -25,6 +25,25 @@ type testTreeContext struct {
objTree ObjectTree
}
func genBuildFilterableTestableTree(filterFunc func(ch *Change) bool) func(treeStorage treestorage.TreeStorage, aclList list.AclList) (ObjectTree, error) {
return func(treeStorage treestorage.TreeStorage, aclList list.AclList) (ObjectTree, error) {
root, _ := treeStorage.Root()
changeBuilder := &nonVerifiableChangeBuilder{
ChangeBuilder: NewChangeBuilder(newMockKeyStorage(), root),
}
deps := objectTreeDeps{
changeBuilder: changeBuilder,
treeBuilder: newTreeBuilder(true, treeStorage, changeBuilder),
treeStorage: treeStorage,
rawChangeLoader: newRawChangeLoader(treeStorage, changeBuilder),
validator: &noOpTreeValidator{filterFunc: filterFunc},
aclList: aclList,
}
return buildObjectTree(deps)
}
}
func prepareAclList(t *testing.T) (list.AclList, *accountdata.AccountKeys) {
randKeys, err := accountdata.NewRandom()
require.NoError(t, err)
@ -667,6 +686,35 @@ func TestObjectTree(t *testing.T) {
})
})
t.Run("test tree filter", func(t *testing.T) {
filterFunc := func(change *Change) bool {
return slices.Contains([]string{"0", "1", "2", "3", "4", "7", "8"}, change.Id)
}
ctx := prepareContext(t, aclList, genBuildFilterableTestableTree(filterFunc), false, nil)
rawChanges := []*treechangeproto.RawTreeChangeWithId{
ctx.changeCreator.CreateRawWithData("1", aclList.Head().Id, "0", false, []byte("1"), "0"),
ctx.changeCreator.CreateRawWithData("2", aclList.Head().Id, "0", false, []byte("2"), "1"),
ctx.changeCreator.CreateRawWithData("3", aclList.Head().Id, "0", false, []byte("3"), "2"),
ctx.changeCreator.CreateRawWithData("4", aclList.Head().Id, "0", false, []byte("4"), "2"),
ctx.changeCreator.CreateRawWithData("5", aclList.Head().Id, "0", false, []byte("5"), "1"),
ctx.changeCreator.CreateRawWithData("6", aclList.Head().Id, "0", true, []byte("6"), "3", "4", "5"),
ctx.changeCreator.CreateRawWithData("7", aclList.Head().Id, "6", false, []byte("7"), "6"),
ctx.changeCreator.CreateRawWithData("8", aclList.Head().Id, "6", false, []byte("8"), "6"),
}
_, err := ctx.objTree.AddRawChanges(context.Background(), RawChangesPayload{
NewHeads: []string{"6"},
RawChanges: rawChanges,
})
require.NoError(t, err)
var ids []string
ctx.objTree.IterateRoot(nil, func(change *Change) bool {
ids = append(ids, change.Id)
return true
})
slices.Sort(ids)
require.Equal(t, []string{"0", "1", "2", "3", "4"}, ids)
})
t.Run("rollback when add to storage returns error", func(t *testing.T) {
ctx := prepareTreeContext(t, aclList)
changeCreator := ctx.changeCreator