Change decoder logic

This commit is contained in:
mcrakhman 2022-07-13 22:36:56 +02:00 committed by Mikhail Iudin
parent 90b884534c
commit 20df88bbde
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
6 changed files with 43 additions and 16 deletions

View File

@ -2,8 +2,9 @@ package account
import "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys" import "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
type AccountData struct { type AccountData struct { // TODO: create a convenient constructor for this
Identity string // TODO: this is essentially the same as sign key Identity string // TODO: this is essentially the same as sign key
SignKey keys.SigningPrivKey SignKey keys.SigningPrivKey
EncKey keys.EncryptionPrivKey EncKey keys.EncryptionPrivKey
Decoder keys.SigningPubKeyDecoder
} }

View File

@ -4,8 +4,6 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
"sync" "sync"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
) )
type AddResultSummary int type AddResultSummary int
@ -61,11 +59,10 @@ func BuildACLTree(
t treestorage.TreeStorage, t treestorage.TreeStorage,
acc *account.AccountData, acc *account.AccountData,
listener TreeUpdateListener) (ACLTree, error) { listener TreeUpdateListener) (ACLTree, error) {
decoder := keys.NewEd25519Decoder() aclTreeBuilder := newACLTreeBuilder(t, acc.Decoder)
aclTreeBuilder := newACLTreeBuilder(t, decoder) treeBuilder := newTreeBuilder(t, acc.Decoder)
treeBuilder := newTreeBuilder(t, decoder) snapshotValidator := newSnapshotValidator(acc.Decoder, acc) // TODO: this looks weird, change it
snapshotValidator := newSnapshotValidator(decoder, acc) aclStateBuilder := newACLStateBuilder(acc.Decoder, acc)
aclStateBuilder := newACLStateBuilder(decoder, acc)
changeBuilder := newChangeBuilder() changeBuilder := newChangeBuilder()
aclTree := &aclTree{ aclTree := &aclTree{
@ -84,7 +81,10 @@ func BuildACLTree(
if err != nil { if err != nil {
return nil, err return nil, err
} }
aclTree.removeOrphans() err = aclTree.removeOrphans()
if err != nil {
return nil, err
}
err = t.SetHeads(aclTree.Heads()) err = t.SetHeads(aclTree.Heads())
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -4,6 +4,7 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/pb" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/pb"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/testutils/treestoragebuilder" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/testutils/treestoragebuilder"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -25,6 +26,7 @@ func TestACLTree_UserJoinBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -59,6 +61,7 @@ func TestACLTree_UserJoinUpdate_Append(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -108,6 +111,7 @@ func TestACLTree_UserJoinUpdate_Rebuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -158,6 +162,7 @@ func TestACLTree_UserRemoveBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -188,6 +193,7 @@ func TestACLTree_UserRemoveBeforeBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -219,6 +225,7 @@ func TestACLTree_InvalidSnapshotBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -249,6 +256,7 @@ func TestACLTree_ValidSnapshotBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)

View File

@ -37,6 +37,9 @@ func BuildTreeStorageWithACL(
return nil, err return nil, err
} }
thr.SetHeads([]string{change.CID()}) err = thr.SetHeads([]string{change.CID()})
if err != nil {
return nil, err
}
return thr, nil return thr, nil
} }

View File

@ -31,15 +31,27 @@ func Test_BuildTreeStorageWithACL(t *testing.T) {
if err != nil { if err != nil {
t.Fatalf("build should not return error") t.Fatalf("build should not return error")
} }
if len(thr.Heads()) == 0 {
heads, err := thr.Heads()
if err != nil {
t.Fatalf("should return heads: %v", err)
}
if len(heads) == 0 {
t.Fatalf("tree storage should have non-empty heads") t.Fatalf("tree storage should have non-empty heads")
} }
if thr.Header() == nil {
t.Fatalf("tree storage should have non-empty header") header, err := thr.Header()
if err != nil {
t.Fatalf("tree storage header should return without error: %v", err)
} }
assert.Equal(t, thr.Heads()[0], thr.Header().FirstChangeId) assert.Equal(t, heads[0], header.FirstChangeId)
assert.NotEmpty(t, thr.TreeID())
ch, err := thr.GetChange(context.Background(), thr.Header().FirstChangeId) treeId, err := thr.TreeID()
if err != nil {
t.Fatalf("tree id should return without error: %v", err)
}
assert.NotEmpty(t, treeId)
ch, err := thr.GetChange(context.Background(), header.FirstChangeId)
if err != nil { if err != nil {
t.Fatalf("get change should not return error: %v", err) t.Fatalf("get change should not return error: %v", err)
} }

View File

@ -4,6 +4,7 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/testutils/treestoragebuilder" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/testutils/treestoragebuilder"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"testing" "testing"
) )
@ -16,6 +17,7 @@ func TestDocument_NewPlainTextDocument(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(),
} }
doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text") doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text")
@ -33,6 +35,7 @@ func TestDocument_PlainTextDocument_AddText(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(),
} }
doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text") doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text")